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

2.2 尋址方式

從指令格式知道,指令的重要組成部分是操作數,指出了參與操作的數據或數據的地址。尋找操作數地址的方式稱為尋址方式。一條指令采用什么樣的尋址方式,是由指令的功能決定的,尋址方式越多,指令功能就越強。

MCS-51指令系統共使用了7種尋址方式,包括寄存器尋址、直接尋址、立即數尋址、寄存器間接尋址、變址尋址、相對尋址和位尋址。

1.立即數尋址

在這種尋址方式中,指令多是雙字節的。立即數尋址是指將操作數直接寫在指令中。例如:指令MOV A,#3AH執行的操作是將立即數3AH送到累加器A中,該指令就是立即數尋址。注意:立即數前面必須加“#”號,以區別立即數和直接地址。該指令的執行過程如圖2-1所示。

圖2-1 立即數尋址示意圖

2.直接尋址

在這種尋址方式中,把存放操作數的內存單元的地址直接寫在指令中。在MCS-51單片機中,可以直接尋址的存儲器主要有內部RAM區和特殊功能寄存器SFR區。例如:指令MOV A,3AH執行的操作是將內部RAM中地址為3AH的單元內容傳送到累加器A中,其操作數3AH就是存放數據的單元地址,因此該指令是直接尋址。設內部RAM 3AH單元的內容是88H,那么指令MOV A,3AH的執行過程如圖2-2所示。

圖2-2 直接尋址示意圖

3.寄存器尋址

寄存器尋址是指將操作數存放于寄存器中,寄存器包括工作寄存器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-3所示。

圖2-3 寄存器尋址示意圖

4.寄存器間接尋址

在這種尋址方式中,操作數所指定的寄存器中存放的不是操作數本身,而是操作數地址,這種尋址方式用于訪問片內數據存儲器或片外數據存儲器。

在MCS-51指令系統中,用于寄存器間接尋址的寄存器有R0、R1和DPTR,稱為寄存器間接尋址寄存器。注意:間接尋址寄存器前面必須加上符號“@”。

例如:指令MOV A,@R0執行的操作是將R0的內容作為內部RAM的地址,再將該地址單元中的內容取出來送到累加器A中。

設R0=3AH,內部RAM 3AH中的值是65H,則指令MOV A,@R0的執行結果是累加器A的值為65H,該指令的執行過程如圖2-4所示。

5.變址尋址

在這種尋址方式中,是將基址寄存器與變址寄存器的內容相加,結果作為操作數的地址。DPTR或PC是基址寄存器,累加器A是變址寄存器。該類尋址方式主要用于查表操作。例如:指令MOVC A,@A+DPTR執行的操作是將累加器A和基址寄存器DPTR的內容相加,相加結果作為操作數存放的地址,再將操作數取出來送到累加器A中。

設累加器A=02H,DPTR=0300H,外部ROM(0302H)=55H,則指令MOVC A,@A+DPTR的執行結果是累加器A的內容為55H。該指令的執行過程如圖2-5所示。

圖2-4 寄存器間接尋址示意圖

圖2-5 變址尋址示意圖

6.相對尋址

相對尋址是指程序計數器PC的當前內容與指令第二字節所給出的數相加,其結果作為跳轉指令的轉移地址(也稱目的地址)。該類尋址方式主要用于跳轉指令。

例如:JC rel

這條指令表示若進位C=0,則不跳轉,程序繼續向下執行;若進位C=1,則以PC中的當前值為基地址,加上偏移量rel后所得到的結果為該轉移指令的目的地址。

現假設該指令存放于0100H、0101H單元,且rel=30H,若(C)=1,因PC當前值(下一條指令的地址)為0102H,故執行完該指令后,程序轉向(PC)+30H=0132H地址執行。0132H地址稱為目的地址,0100H稱為源地址。該指令執行過程如圖2-6所示。

圖2-6 相對尋址示意圖

在實際工作中,有時需根據已知的源地址和目的地址計算偏移量rel。現以兩字節相對轉移指令為例,討論偏移量rel的計算。

正向跳轉時:

rel=目的地址-源地址-2=地址差-2

反向跳轉時,目的地址小于源地址,rel用負數的補碼表示:

7.位尋址

位尋址是指按位進行的操作,MCS-51單片機中,操作數不僅可以按字節為單位進行操作,也可以按位進行操作。當我們把某一位作為操作數時,這個操作數的地址稱為位地址。而上述介紹的指令都是按字節進行的操作。

位尋址區包括專門安排在內部RAM中的兩個區域:一是內部RAM的位尋址區,地址范圍是20H~2FH,共16個RAM單元,位地址為00H~7FH;二是特殊功能寄存器SFR中有11個寄存器可以位尋址。

例如:指令SETB 3DH執行的操作是將內部RAM位尋址區中的3DH位置1。

設內部RAM 27H單元原來的內容是00H,執行SETB 3DH后,由于3DH對應著內部RAM 27H的第6位,因此該位變為1,也就是27H單元的內容變為20H。該指令的執行過程如圖2-7所示。

圖2-7 位尋址示意圖

主站蜘蛛池模板: 读书| 古丈县| 南宁市| 衡南县| 东台市| 新兴县| 美姑县| 博湖县| 内丘县| 天台县| 文登市| 阳春市| 那曲县| 河北省| 右玉县| 华亭县| 安西县| 周宁县| 宜阳县| 磐安县| 肃南| 尼勒克县| 丰原市| 乡宁县| 五寨县| 贡觉县| 濮阳市| 东港市| 天柱县| 崇仁县| 新绛县| 白银市| 三穗县| 辽源市| 和政县| 安阳市| 南澳县| 临泉县| 遵化市| 仙游县| 贵南县|