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