RS1RS0組合為00時,選中第0組工作寄存器,R0~R7地址為00H~07H;
RS1RS0組合為01時,選中第1組工作寄存器,R0~R7地址為08H~0FH;
RS1RS0組合為10時,選中第2組工作寄存器,R0~R7地址為10H~17H;
RS1RS0組合為11時,選中第3組工作寄存器,R0~R7地址為18H~1FH。
類似arm的usr模式svc模式irq模式fiq模式,
psw.4psw.3
000區(qū)r0-r7獨立
011區(qū)r0-r7獨立
102區(qū)r0-r7獨立
123區(qū)r0-r7獨立
上邊的每個區(qū)都由相同的名字r0-r7寄存器引用,但數(shù)據(jù)空間卻不同,所以各自獨立,
每組寄存器在物理上是獨立的,也就是說,一共有32個寄存器。上電后默認(rèn)是第0組,但四組寄存器的功能、優(yōu)點完全相同。r0-r7支持豐富的尋址方式,可以大大提高運行效率。
所以,如果你有四個程序段(或者說線程)要交叉運行,都想使用到效率很高的r0-r7,就可以讓它們各占一組,只要切換區(qū)域就行了,而不必頻繁地保護(hù)現(xiàn)場。
尋址方式:
51單片機有7種尋址方式。
1、寄存器尋址:前面提到了內(nèi)部RAM中的00H-1FH地址單元作為工作寄存器使用。一共是有32各地址單元,分成四組,每組有8個寄存器,命名為R0-R7,每次可以使用其中的一組。當(dāng)使用R0-R7來表示操作數(shù)時,就屬于寄存器尋址方式。
例如:MOVA,R0;把寄存器R0的內(nèi)容送入累加器A中
2、直接尋址:在指令中直接給出操作數(shù)地址,就屬于直接尋址方式。此時指令的操作數(shù)部分直接是操作數(shù)的地址。
例如:MOVA,2AH;把RAM地址2AH的內(nèi)容送入累加器A中
3、立即尋址:
例如:MOVA,#3AH;該指令就是表示把立即數(shù)3AH送入累加器A中,立即數(shù)前加上一個#,和直接尋址方式區(qū)分
4、寄存器間接尋址:若以寄存器的名稱直接給出操作數(shù)的地址,則稱為寄存器間接尋址。
例如:MOVA,@R0;該指令是把RO里的內(nèi)容作為地址,這個地址的數(shù)據(jù)送入累加器A,注意前面需要加@
5、變址尋址:變址尋址是以某個寄存器的內(nèi)容為基本的地址,然后在這個基址上加以地址的偏移量,才是真正的操作數(shù)地址。
例如:MOVA,@A+DPTR;地址是A+DPTR的值,這個地址的內(nèi)容送如累加器A
6、相對尋址:相對轉(zhuǎn)移指令需要用到相對尋址方式,此時操作數(shù)部分給出的是地址的相對偏移量部分。
目的地址=源地址+指令字節(jié)數(shù)+rel(rel可正可負(fù))
例如:SJMPrel
7、位尋址:概念就不做解釋了。還是把reg52.h這個頭文件貼出來說。