單片機指令系統(tǒng)的尋址方式
要正確執(zhí)行指令,就必須能得到正確的操作數(shù)和操作碼。操作碼字段在機器里的表示比較簡單,只需對每一種操作指定確定的二進制代碼就可以了。指令的操作數(shù)字段的情況就比較復雜,操作數(shù)可能就在指令中,也有可能在寄存器或存儲器中,這此設備內的數(shù)據(jù)要正確進行操作就要在指令中指出其地址,尋找操作數(shù)地址的方法稱為尋址方式。51系列單片機指令系統(tǒng)的尋址方式有以下7種。
一、立即尋址
在這種尋址方式中,指令中跟在操作碼后面的一個字節(jié)就是實際操作數(shù)。在這種尋址方式中,指令中跟在操作碼后面的一個字節(jié)就是實際操作數(shù)。立即數(shù)前面必須有符號“#”。
例:MOV A, #0FFH ; FFH →(A)將立即數(shù)FFH送入累加器A。
這條指令為雙字節(jié)指令,操作數(shù)FFH以指令形式存放在程序存儲器內。
二、直接尋址
直接尋址就是在指令中包含了操作數(shù)的地址,該地址直接給出了參加運算或傳送的數(shù)據(jù)所在的字節(jié)單元或位。直接尋址方式中操作數(shù)存儲的空間有三種。
1)訪問內部低128個字節(jié)單元(00H~7FH),指令中直接給出地址。
例:MOV A, 70H ; 70H)→(A)把RAM 70H單元中的內容送累加器A。
2)訪問特殊功能寄存器,只能用直接尋址方式進行訪問。
例:MOV IE, #85H ; 85H→(IE)。IE為特殊功能寄存器,其字節(jié)地址為A8H。
3) 位地址空間的訪問,指令中以位名稱或者位地址的形式給出。
例:MOV C, 00H ; 將00H單元的內容→進位位C。
三、寄存器尋址
寄存器尋址是指以某一個可尋址的寄存器的內容為操作數(shù)。寄存器尋址指令中,操作數(shù)域中給出的是操作數(shù)所在的寄存器,寄存器的內容才是本條指令的操作數(shù)。
四個寄存器組共有32個通用寄存器,但指令中使用的是當前工作寄存器組,因此在使用寄存器尋址指令前,必須先將RS0,S1位置位,確定當前工作寄存器組。
例:MOV A, Ri ;(Ri)→(A)。
四、寄存器間接尋址
在這種尋址方式中,操作數(shù)所指定的寄存器中存放的不是操作數(shù)本身,而是操作數(shù)的地址。寄存器間接尋址方式把指令中寄存器的內容作為地址,再到該地址單元取得操作數(shù)。變址尋址寄存器間接尋址用符號“@”表示。
例:MOV A, @Rj ;((Rj))→(A)。
若R0內容為11H,而內部RAM 11H單元中的內容是33H,則指令MOV A,@R0的功能是將33H這個數(shù)送到累加器A。
五、基址寄存器加變址寄存器間接尋址
基址加變址寄存器間接尋址以DPTR或PC的內容為基地址,然后,在這個基地址的基礎上加上累加器A中的地址偏移量形成真正的操作數(shù)地址。這種尋址方式常用于查表操作。
例: MOVC A, @A+DPTR ;(DPTR)+(A))→(A)。
MOVC A, @A+PC ;((PC)+(A))→(A)。
A中為無符號數(shù),指令功能是A的內容和DPTR或當前PC的內容相加得到程序存儲器的有效地址,把該存儲器單元中的內容送到A。
六、相對尋址
相對尋址是將程序計數(shù)器PC中的當前值(該當前值是指執(zhí)行完這條相對轉移指令后的PC的字節(jié)地址)為基準,加上指令中給定的偏移量所得結果而形成實際的轉移地址。這種尋址方式主要用于轉移指令指定轉移的目標地址。
一般將相對轉移指令操作碼所在地址稱為源地址,轉移后的地址稱為目的地址,目的地址的計算方法如下:
目的地址=源地址+相對轉移指令字節(jié)+相對偏移值
七、位尋址
位尋址是指對片內RAM的位尋址區(qū)和某些可位尋址的特殊功能寄存器進行位操作時的尋址方式。位地址表示一個可作位尋址的單元,它或者在內部RAM中或者是一個硬件的位。
例:MOV C, 20H ; 將20H單元的內容→進位位C 。
編輯:admin 最后修改時間:2019-06-23