官术网_书友最值得收藏!

  • 單片機(jī)原理
  • 張志霞 張楠楠 王永剛 楊萍主編
  • 1403字
  • 2021-10-22 23:53:55

第二節(jié) 尋址方式

指令的一個重要組成部分是操作數(shù),指令給出參與運(yùn)算的數(shù)據(jù)的方式稱為尋址方式。一、寄存器尋址

由指令指出某一個寄存器的內(nèi)容作為操作數(shù),這種尋址方式稱為寄存器尋址。

尋址空間:R0~R7

A、B、C、AB、DPTR

例如指令:

INC R0

;(R0)+1→R0

其功能為對R0進(jìn)行操作,使其內(nèi)容加1。二、直接尋址

在指令中含有操作數(shù)的直接地址,該地址指出了參與運(yùn)算或傳送的數(shù)據(jù)所在的字節(jié)單元或位的地址。

直接尋址方式訪問以下三種存儲空間:

(1)特殊功能寄存器(特殊功能寄存器只能用直接尋址方式訪問)。(2)內(nèi)部數(shù)據(jù)存儲器的低128字節(jié)。

(3)位地址空間。例如指令:

ANL 70H,#48H

;(70H)∧48H→70H

其功能是把內(nèi)部RAM中70H單元的內(nèi)容和常數(shù)48H邏輯與后,結(jié)果寫入70H單元。

三、寄存器間接尋址

由指令指出某一個寄存器的內(nèi)容作為操作數(shù)的地址,這種尋址方式稱為寄存器間接尋址(特別應(yīng)注意寄存器的內(nèi)容不是操作數(shù),而是操作數(shù)所在的存儲器地址)。

寄存器間接尋址使用所選定的寄存器區(qū)中R0或R1作地址指針(對堆棧操作指令用棧指針SP)來尋址內(nèi)部RAM(00~0FFH)。寄存器間接尋址也適用于訪問外部擴(kuò)展的數(shù)據(jù)存儲器,用R0、R1或DPTR作為地址指針。寄存器間接尋址用符號@表示。

尋址空間:內(nèi)部RAM(@R0、@R1、SP)

外部數(shù)據(jù)存儲器(@R0、@R1、@DPTR)

例如指令:

ANL A,@R0

;(A)∧((R0))→A

其功能為R0所指出的內(nèi)部RAM單元內(nèi)容和累加器A的內(nèi)容進(jìn)行邏輯與,結(jié)果送累

加器A。

四、立即尋址

立即尋址方式中操作數(shù)包含在指令字節(jié)中,即操作數(shù)以指令字節(jié)的形式存放于程序存儲器中。

例如指令:

MOV A,#70H

其功能為把常數(shù)70H傳送到累加器A。五、基寄存器加變址寄存器間接尋址

這種尋址方式以16位的程序計數(shù)器PC或數(shù)據(jù)指針DPTR作為基寄存器,以8位的累加器A作為變址寄存器。基寄存器和變址寄存器的內(nèi)容相加形成16位的地址,該地址即為操作數(shù)的地址。

尋址空間:程序存儲器(@A+PC、@A+DPTR)

例如指令:

MOVC A,@A+PC

;((A)+(PC))→A

MOVC A,@A+DPTR

;((A)+(DPTR))→A

六、相對尋址

相對尋址方式是為實現(xiàn)程序的相對轉(zhuǎn)移而設(shè)計的,為相對轉(zhuǎn)移指令所采用。

在相對尋址的轉(zhuǎn)移指令中,給出了地址偏移量(在MCS-51指令中以rel表示),把PC的當(dāng)前值加上偏移量就構(gòu)成了程序轉(zhuǎn)移目的地址。但這里的PC當(dāng)前值是指執(zhí)行完該轉(zhuǎn)移指令后的PC值,即轉(zhuǎn)移指令的PC值加上它的字節(jié)數(shù)。因此轉(zhuǎn)移的目的地址可用如下公式表示:

目的地址:轉(zhuǎn)移指令地址+轉(zhuǎn)移指令字節(jié)數(shù)+rel

在MCS-51指令系統(tǒng)中,有多條相對轉(zhuǎn)移指令,這些指令多數(shù)為二字節(jié)指令,但也有個別為三字節(jié)的。偏移量rel是一個帶符號的8位二進(jìn)制補(bǔ)碼數(shù)。所能表示的數(shù)的范圍是-128~+127,因此相對轉(zhuǎn)移是以相對轉(zhuǎn)移指令所在地址為基點(diǎn),向前最大可轉(zhuǎn)移(127+轉(zhuǎn)移指令字節(jié)數(shù))個單元地址,向后最大可轉(zhuǎn)移(128-轉(zhuǎn)移指令字節(jié)數(shù))個單元地址。

MCS51有五個存儲器空間,且多數(shù)從零地址開始編址:程序存儲器空間

0000H~0FFFFH

內(nèi)部RAM空間

00H~0FFH

特殊功能寄存器空間

80H~0FFH

位地址空間

00H~0FFH

外部RAM/IO空間

0000H~0FFFFH

指令對哪一個存儲器空間進(jìn)行操作是由指令的操作碼和尋址方式確定的。對程序存儲器只能采用立即尋址和基寄存器加變址寄存器間接尋址方式,特殊功能寄存器只能采用直接尋址方式,不能采用寄存器間接尋址,8052/8032等單片機(jī)內(nèi)部RAM的高128字節(jié)(80H~0FFH)只能采用寄存器間接尋址,不能使用直接尋址方式,位操作指令只能對位尋址區(qū)操作。外部擴(kuò)展的數(shù)據(jù)存儲器只能用 MOVX指令訪問,而內(nèi)部RAM的低128字節(jié)(00~7FH)既能用直接尋址,也能用寄存器間接尋址,操作指令最豐富。

主站蜘蛛池模板: 宜春市| 喀喇沁旗| 如东县| 广安市| 新野县| 巴林右旗| 揭西县| 扎赉特旗| 蓬安县| 望都县| 云安县| 盐津县| 东港市| 泸定县| 丰镇市| 绵阳市| 佛学| 铜鼓县| 兴安县| 且末县| 枞阳县| 全椒县| 涟水县| 汾阳市| 随州市| 资阳市| 靖远县| 高阳县| 大兴区| 银川市| 陈巴尔虎旗| 安龙县| 霍城县| 乃东县| 平果县| 南宁市| 永修县| 宜春市| 西城区| 藁城市| 双柏县|