單片機的尋址方式定義
尋找操作數地址的方式稱為尋址方式。
1. 寄存器尋址
寄存器尋址是指將操作數存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOV R1,A的操作是把累加器A中的數據傳送到寄存器R1中,其操作數存放在累加器A中,所以尋址方式為寄存器尋址。
如果程序狀態寄存器PSW的RS1RS0=01(選中第二組工作寄存器,對應地址為08H~0FH),設累加器A的內容為20H,則執行MOV R1,A指令后,內部RAM 09H單元的值就變為20H。
2. 直接尋址
直接尋址是指把存放操作數的內存單元的地址直接寫在指令中。在MCS-51單片機中,可以直接尋址的存儲器主要有內部RAM區和特殊功能寄存器SFR區。
例如,指令MOV A,3AH執行的操作是將內部RAM 中地址為3AH的單元內容傳送到累加器A中,其操作數3AH就是存放數據的單元地址,因此該指令是直接尋址。
3. 立即數尋址
立即數尋址是指將操作數直接寫在指令中。
例如,指令MOV A,#3AH執行的操作是將立即數3AH送到累加器A中,該指令就是立即數尋址。
4. 寄存器間接尋址
寄存器間接尋址是指將存放操作數的內存單元的地址放在寄存器中,指令中只給出該寄存器。執行指令時,首先根據寄存器的內容,找到所需要的操作數地址,再由該地址找到操作數并完成相應操作。
在MCS-51指令系統中,用于寄存器間接尋址的寄存器有R0、R1和DPTR,稱為寄存器間接尋址寄存器。
設R0=3AH,內部RAM 3AH中的值是65H,則指令MOV A,@R0的執行結果是累加器A的值為65H。
單片機的尋址方式分類
MCS-51系列單片機尋址方式共有七種:寄存器尋址、直接尋址、立即數尋址、寄存器間接尋址、變址尋址、相對尋址、位尋址。
1、寄存器尋址
寄存器尋址是指操作數存放在某一寄存器中,指令中給出寄存器名,就能得到操作數。寄存器可以使用寄存器組R0~R7中某一個或其它寄存器(A,B,DPTR等)。
例如:
MOV A,R0 ;(R0 )→A
MOV P1,A ;(A)→P1
ADD A, R0 ;(A)+(R0) →A
2、直接尋址
在指令中直接給出操作數所在的存儲單元的地址,稱為直接尋址方式。在8051中,使用直接尋址方式可訪問片內RAM的128個單元以及所有的特殊功能寄存器(SFR),對于特殊功能寄存器,既可以使用他們的地址,也可以使用他們的名字。
例如:
MOV A, 3AH ;(3AH) →A
又如:
MOV A, P1 ;(P1口) →A
也可寫為:
MOV A, 90H ; 90H是P1口的地址。
3、立即數尋址
指令操作碼后面緊跟的是一字節或兩字節操作數,用 # 號表示,以區別直接地址。例如:
MOV A, #3AH ;3AH→A
MCS-51系列單片機有一條指令,要求操作碼后面緊跟的是兩個字節立即數,即
MOV DPTR, #DATA16
4、寄存器間接尋址
寄存器中的內容是一個地址,由該地址單元尋址到所需的操作數。
例如: MOV R1,#30H ;(R1)← 立即數30H
MOV @R1,#0FH ;(30H)←立即數0FH
MOV A,@R1 ;(A)←((30H))=#0FH
注意:
“間接”表示某寄存器中的“內容”只是一個“單元地址”,這個地址單元中存放的數據才是要找的“操作數”。
例如,指令MOV A,@R0執行的操作是將R0的內容作為內部RAM的地址,再將該地址單元中的內容取出來送到累加器A中,如圖所示。
5、變址尋址 ,也稱為: 基址寄存器+變址寄存器間接尋址
以16位的地址指針寄存器DPTR或 16位的PC寄存器為基址寄存器,以累加器 A 為變址寄存器,兩者中的“內容”形成一個16位的“地址”,該“地址”所指的存儲單元中的內容才是操作數。用變址尋址方式只能訪問程序存儲器,訪問的范圍為64KB,當然,這種訪問只能從ROM中讀取數據而不能寫入。
例如: MOVC A, @A+DPTR ;((A)+ (DPTR))→A
設:A中已存有#30H,DPTR中已存有#1000H
MOVC A,@A+DPTR;(A)←((A)+(DPTR))
操作:將30H+1000H=1030H單元中的數放進累加器A
6、相對尋址
相對尋址只出現在相對轉移指令中。相對轉移指令執行時,是以當前的PC值加上指令中規定的偏移量rel而形成實際的轉移地址。這里所說得PC的當前值是執行完相對轉移指令后的PC值,一般將相對轉移指令操作碼所在的地址稱為源地址,轉移后的地址稱為目的地址。于是有:目的地址=源地址+2(相對轉移指令字節數)+rel
51單片機指令系統中相對轉移指令既有雙字節的,也有三字節的。
7、位尋址
采用位尋址方式的指令,操作數是8位二進制數中的某一位。指令中給出的是位地址,是片內RAM某個單元中的某一位的地址。位地址在指令中用bit表示。
例: CLR P1.0 ;(P1.0) ← 0
SETB ACC.7 ;(ACC.7)← 1
CPL C ;( C )← NOT( C )
位地址常用下列三種方式表示;
(1)直接使用位地址表示。對于20H~2FH的16個單元共128位,位地址分布是00H~7FH。
(2)對于特殊功能寄存器,可以直接用寄存器名字加位數表示,如PSW.3、ACC.5等。
(3)對于定義了位名字的特殊位,可以直接用其位名表示,例如:CY、AC等。
尋址方式及對應存儲器空間
尋址方式尋址空間
立即數尋址程序存儲器ROM、數據存儲器RAM
直接尋址片內RAM低128B,特殊功能寄存器
寄存器尋址通用寄存器R0---R7,其他寄存器A、B、DPTR
寄存器間接尋址片內RAM低128B【@R0、@R1、SP(僅PUSH、POP)】
片外RAM(@R0、@R1、@DPTR)
變址尋址程序存儲器、數據存儲器、(@A+PC、@A+DPTR)
相對尋址程序存儲器256B(PC+偏移量)
位尋址片內RAM的20H---2FH字節地址、部分特殊功能寄存器
尋址方式中常用符號注釋
(1) Rn(n=0~7) 當前選中的工作寄存器R0~R7 。
(2) Ri(i=0,1) 當前選中的工作寄存器組中,可作為間址寄存器
的兩個工作寄存器R0、R1。
(3) #data 8位立即數。
(4) # data16 16位立即數。
(5) direct 8位片內RAM單元(包括SFR)的直接地址。
(6) addr11 11位目的地址,用于ACALL和AJMP指令中。
(7) addr16 16位目的地址,用于LCALL和LJMP指令中。
(8) rel 補碼形成的8位地址偏移量。
(9) bit 片內直接尋址位地址。
(10)@ 間接尋址方式中,表示間址寄存器的符號。
(11)/ 位操作指令中,表示對該位先取反再參與操作,但
不影響該位原值。
(12)(X) 表示X中的內容。
(13)((X)) 由X指出的地址單元中的內容。
(14) → 指令操作流程,將箭頭左邊的內容送入箭頭右邊的單元。
評論
查看更多