




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第3 3章章 MCS-51MCS-51的指令系統與的指令系統與匯編語言匯編語言程序設計程序設計 【學習目標】【學習目標】l掌握單片機的掌握單片機的指令系統指令系統,熟悉指令功能、指令格,熟悉指令功能、指令格式以及指令的尋址方式;式以及指令的尋址方式;l理解匯編語言的特點以及與機器語言之間的區別理解匯編語言的特點以及與機器語言之間的區別和聯系;和聯系;l掌握匯編語言掌握匯編語言程序設計程序設計的步驟、匯編語言程序的的步驟、匯編語言程序的結構;結構;l熟練掌握匯編語言應用程序的開發熟練掌握匯編語言應用程序的開發 【例【例3.113.11】 有一數據塊存放起始地址為有一數據塊存放起始地址為DATA
2、1DATA1的的片外片外RAMRAM區,數據塊以區,數據塊以“0”0”為結束標志,要求將其傳送到為結束標志,要求將其傳送到DATA2DATA2為為起始地址的起始地址的片內片內RAMRAM區。編寫程序如下:區。編寫程序如下: MOV DPTR, #DATA1 MOV DPTR, #DATA1; ;設置片外設置片外RAMRAM數據塊地址指針數據塊地址指針 MOV R0MOV R0,#DATA2 #DATA2 ; ;設置片內設置片內RAMRAM數據塊地址指針數據塊地址指針LOOP:MOVX A, DPTRLOOP:MOVX A, DPTR; ;取數取數 JZ ENDOJZ ENDO; ;檢測是否為檢
3、測是否為0 0?為?為0 0,轉,轉ENDOENDO MOV R0 MOV R0,A A; ;不為不為0 0,傳送,傳送 INC DPTRINC DPTR; ;修改地址指針修改地址指針 INC R0INC R0 AJMP LOOP AJMP LOOPENDO: SJMPENDO: SJMP $ $3.1 MCS-513.1 MCS-51單片機指令系統概述單片機指令系統概述1 1指令的概念指令的概念 指令指令是由是由CPUCPU解釋執行,用于控制功能部件完成某種指定操解釋執行,用于控制功能部件完成某種指定操作的命令。作的命令。 由于由于CPUCPU只能識別二進制數,所以計算機的指令均由二進制只能
4、識別二進制數,所以計算機的指令均由二進制代碼組成,通常把這樣的指令稱為代碼組成,通常把這樣的指令稱為機器指令機器指令。 一般的計算機都有幾十甚至上百條機器指令,這些指令就一般的計算機都有幾十甚至上百條機器指令,這些指令就構成了計算機的構成了計算機的指令系統指令系統。不同類型的。不同類型的CPUCPU具有不同的指令系統。具有不同的指令系統。 2 2指令系統說明指令系統說明MCS-51MCS-51的基本指令共的基本指令共111111條條: : 每條指令在程序存儲器每條指令在程序存儲器ROMROM中占據一定的中占據一定的空間空間,以字節為單位。,以字節為單位。按指令所占的字節來分:按指令所占的字節來
5、分: (1) (1) 單字節單字節指令指令4949條;條; (2) (2) 雙字節雙字節指令指令4545條;條; (3) (3) 三字節三字節指令指令1717條。條。每條指令在執行時要花去一定的每條指令在執行時要花去一定的時間時間,以機器周期為單,以機器周期為單位。位。按指令的執行時間來分按指令的執行時間來分: (1) (1) 1 1個機器周期個機器周期(1212個時鐘振蕩周期)指令個時鐘振蕩周期)指令6464條條 (2) (2) 2 2個機器周期個機器周期(2424個時鐘振蕩周期)指令個時鐘振蕩周期)指令4545條條 (3) (3) 4 4個機器周期個機器周期(4848個時鐘振蕩周期)個時鐘
6、振蕩周期)只有乘、只有乘、 除兩條指令的執行時間。除兩條指令的執行時間。 12MHz12MHz晶振晶振: :機器周期為機器周期為1 1 s s。按指令的按指令的功能功能分類,可分為分類,可分為5 5大類:大類: 數據傳送類數據傳送類(2929條);條);算術運算類算術運算類(2424條)條) 邏輯運算及移位類邏輯運算及移位類(2424););控制轉移類控制轉移類(1717條)條) 位操作類位操作類(1717條)條)【例【例3.33.3】 設片內設片內RAM 30HRAM 30H、31H31H和和32H32H、33H33H分別存放兩個分別存放兩個1616位無符號數,要求將兩個數的和存入位無符號數
7、,要求將兩個數的和存入30H30H、31H31H(低位在前,(低位在前,高位在后)。程序如下:高位在后)。程序如下:【例【例3.33.3】 設片內設片內RAM 30HRAM 30H、31H31H和和32H32H、33H33H分別存放兩個分別存放兩個1616位無符號數,要求將兩個數的和存入位無符號數,要求將兩個數的和存入30H30H、31H31H(低位在前,(低位在前,高位在后)。程序如下:高位在后)。程序如下:MOV R0MOV R0,#30H #30H ; ; 設置第一個數地址指針設置第一個數地址指針MOVMOVR1R1,#32H #32H ; ; 設置第二個數地址指針設置第二個數地址指針M
8、OV A, R0MOV A, R0; ; 取低位取低位ADD A, R1ADD A, R1; ; 兩數低位相加兩數低位相加MOVMOVR0R0,A A ; ; 存存“和和”的低位的低位INCINCR0R0INCINCR1R1MOVMOVA, R0A, R0; ; 取高位取高位ADDC A, R1ADDC A, R1; ; 兩數高位相加兩數高位相加MOVMOVR0R0,A A ; ; 存存“和和”的高位的高位SJMPSJMP $ $【例【例3.113.11】 有一數據塊存放起始地址為有一數據塊存放起始地址為DATA1DATA1的的片外片外RAMRAM區,數據塊以區,數據塊以“0”0”為結束標志,
9、要求將其傳送到為結束標志,要求將其傳送到DATA2DATA2為為起始地址的起始地址的片內片內RAMRAM區。編寫程序如下:區。編寫程序如下: MOV DPTR, #DATA1 MOV DPTR, #DATA1; ;設置片外設置片外RAMRAM數據塊地址指針數據塊地址指針 MOV R0MOV R0,#DATA2 #DATA2 ; ;設置片內設置片內RAMRAM數據塊地址指針數據塊地址指針LOOP:MOVX A, DPTRLOOP:MOVX A, DPTR; ;取數取數 JZ ENDOJZ ENDO; ;檢測是否為檢測是否為0 0?為?為0 0,轉,轉ENDOENDO MOV R0 MOV R0,
10、A A; ;不為不為0 0,傳送,傳送 INC DPTRINC DPTR; ;修改地址指針修改地址指針 INC R0INC R0 AJMP LOOP AJMP LOOPENDO: SJMPENDO: SJMP $ $例例1 1、LEDLED的控制的控制 使用使用89C5l89C5l的的Port 1Port 1連接連接8 8個個LEDLED,以產生跑馬燈的效果。,以產生跑馬燈的效果。連接好電路并且完成程序之后,您將可以看到連接好電路并且完成程序之后,您將可以看到8 8個個LEDLED依次依次輪流閃爍。輪流閃爍。 在這次練習中,您將學會如何使用在這次練習中,您將學會如何使用I/O PortI/O
11、Port輸出數據,輸出數據,以及如何使用循環實現時間延遲。以及如何使用循環實現時間延遲。 電電路路圖圖#include void delay (void) /* delay 函數函數 */ unsigned char i,j; /* 這個函數執行時間的延遲這個函數執行時間的延遲 */ for (i=0;i255;i+) for(j=0;j255;j+) ;void main (void) unsigned char j=0XFE; /*聲明變量聲明變量 j ,11111110*/ while (1) /* 無窮循環無窮循環 */ /*依次讓依次讓LED 0,1,2,3,4,5,6,7閃爍閃爍
12、*/ j=(j1) | 0 x01; if(j=0XFF) j=0XFE; P1 = j; /* 將數值輸出到將數值輸出到Port1,控制,控制LED亮或滅亮或滅 */ delay(); /* 調用調用 delay 函數函數*/ 標號:操作碼標號:操作碼 操作數;注釋操作數;注釋 指令格式指令格式 兩部分組成,即兩部分組成,即操作碼操作碼和和操作數操作數。 操作碼操作碼: :規定指令進行什么操作規定指令進行什么操作 操作數操作數: :指令操作的對象指令操作的對象方括符方括符 表示可選項表示可選項標號代表指令所在地址,標號代表指令所在地址,1-81-8個字母個字母/ /數字,數字,“:”:”結尾
13、結尾 標號標號:操作碼操作碼 目的操作數目的操作數,源操作數源操作數;注釋注釋 START:MOV A,#30H START:MOV A,#30H ; ;將立即數將立即數30H30H傳送至傳送至A A中中 MOV DPTR,#5678H MOV DPTR,#5678H ; ;將立即數將立即數5678H5678H傳送至傳送至DPTRDPTR 標號:指令的符號地址。標號:指令的符號地址。 用于一段功能程序的識別標記或控制轉移地址。用于一段功能程序的識別標記或控制轉移地址。指令前的標號代表該指令的地址,是指令前的標號代表該指令的地址,是用符號表示的用符號表示的地址地址。一般用英文字母和數字組成。標號
14、必須用冒號一般用英文字母和數字組成。標號必須用冒號“ :”與操作碼分隔。與操作碼分隔。 操作碼:表示指令的操作功能。操作碼:表示指令的操作功能。 操作碼用助記符表示,它操作碼用助記符表示,它代表了指令的操作代表了指令的操作功能功能。 操作碼是指令的必需部分,是指令的核心,不操作碼是指令的必需部分,是指令的核心,不可缺少。可缺少。START:MOV A,#30H START:MOV A,#30H ; ;將立即數將立即數30H30H傳送至傳送至A A中中 MOV DPTR,#5678H MOV DPTR,#5678H ; ;將立即數將立即數5678H5678H傳送至傳送至DPTRDPTR 操作數:
15、參加操作的數據或數據地址。操作數:參加操作的數據或數據地址。 操作數與操作碼之間用空格分隔,操作數與操作數與操作碼之間用空格分隔,操作數與 操作數操作數之間用逗號之間用逗號“,”分隔。分隔。 操作數可以是操作數可以是數據數據,也可以是,也可以是數據的地址數據的地址、數據地址數據地址的地址的地址或或操作數的其他信息操作數的其他信息。 操作數可分為目的操作數和源操作數。操作數可分為目的操作數和源操作數。 操作數可用二進制數、十進制數或十六進制操作數可用二進制數、十進制數或十六進制數表示。數表示。 操作數的個數可以是操作數的個數可以是0 03 3個。個。 注釋:指令功能說明。注釋:指令功能說明。 注
16、釋屬于非必需項,是為便于閱讀,注釋屬于非必需項,是為便于閱讀, 對指令對指令功能作的說明和注解。功能作的說明和注解。 注釋必須以注釋必須以“;”開始。開始。3 3指令系統中的特殊符號指令系統中的特殊符號1 1)RnRn:選定當前寄存器區的寄存器:選定當前寄存器區的寄存器R0R0R7R7。2 2) :間接尋址方式中,表示間址寄存器的符號。如:間接尋址方式中,表示間址寄存器的符號。如RiRi,表示,表示當前選中的工作寄存器組中可作為地址指針的兩個工作寄存器當前選中的工作寄存器組中可作為地址指針的兩個工作寄存器R0R0和和R1R1。 3 3)#data#data:8 8位常數,即包含在指令中的位常數
17、,即包含在指令中的8 8位常數。位常數。 4 4)#data16#data16:1616位常數,即包含在指令中的位常數,即包含在指令中的1616位常數。位常數。5 5)directdirect:8 8位片內位片內RAMRAM單元(包括單元(包括SFRSFR)的直接地址。)的直接地址。6 6)addr11addr11:1111位目的地址,用于位目的地址,用于ACALLACALL和和AJMPAJMP指令中。目的地址指令中。目的地址必須放在與下一條指令第一個字節同一個必須放在與下一條指令第一個字節同一個2KB2KB程序存儲地址空間程序存儲地址空間之內。之內。7 7)addr16addr16:1616
18、位目的地址,用于位目的地址,用于LCALLLCALL和和LJMPLJMP指令中。目的地址指令中。目的地址范圍在范圍在64KB64KB程序存儲器地址空間。程序存儲器地址空間。8 8)relrel:補碼形式的:補碼形式的8 8位地址偏移量,用于相對轉移指令中。偏位地址偏移量,用于相對轉移指令中。偏移量以下一條指令第一字節地址為基值,偏移范圍為移量以下一條指令第一字節地址為基值,偏移范圍為-128-128+127+127。9 9)bitbit:片內:片內RAMRAM或特殊功能寄存器的直接尋址位地址。或特殊功能寄存器的直接尋址位地址。MOV DPTR,#5678H MOV R1,#32H MOV A,
19、 R0 3.2 3.2 指令系統的尋址方式指令系統的尋址方式尋址方式尋址方式就是在指令中就是在指令中說明操作數所在地址說明操作數所在地址的方法。的方法。共共7 7種種尋址方式。尋址方式。立即尋址立即尋址直接尋址直接尋址寄存器尋址寄存器尋址寄存器間接尋址寄存器間接尋址變址尋址變址尋址( (基址寄存器基址寄存器+ +變址寄存器間接尋址變址寄存器間接尋址) )相對尋址相對尋址位尋址位尋址1 1立即尋址方式立即尋址方式 指令的指令的操作數是要參與運算的數操作數是要參與運算的數,所以又叫立即數,所以又叫立即數,用用“#”#”號表示。立即數就是存放在程序存儲器中的常數。號表示。立即數就是存放在程序存儲器中
20、的常數。 例如:例如:ADD AADD A,#34H#34H 把立即數把立即數34H34H與累加器與累加器A A中內容相加,結果送中內容相加,結果送A A中。在中。在MCS-51MCS-51的指令系統中,僅有一條指令的操作數是的指令系統中,僅有一條指令的操作數是1616位的位的立即數,其功能是向地址指針立即數,其功能是向地址指針 DPTRDPTR傳送傳送1616位的地址,即位的地址,即把立即數的高把立即數的高8 8位送入位送入DPHDPH,低,低8 8位送入位送入DPLDPL。 例如:例如:MOV DPTRMOV DPTR,#3FA6H#3FA6H 表示把表示把1616位二進制表示的地址送給位
21、二進制表示的地址送給DPTRDPTR寄存器。寄存器。2 2直接尋址方式直接尋址方式 直接尋址方式直接尋址方式是指操作數給出的是參與運算的數的地址。是指操作數給出的是參與運算的數的地址。在在MCS-51MCS-51單片機中,直接地址只能用來表示特殊功能寄存器、單片機中,直接地址只能用來表示特殊功能寄存器、內部數據存儲器以及位地址空間。其中,特殊功能寄存器和內部數據存儲器以及位地址空間。其中,特殊功能寄存器和位地址空間只能用直接尋址方式來訪問。位地址空間只能用直接尋址方式來訪問。 例如:例如:MOV AMOV A,3AH3AH 表示把內部表示把內部RAMRAM的的3AH3AH單元的內容傳送到單元的
22、內容傳送到A A。 尋址范圍:尋址范圍: (1) (1) 內部內部RAMRAM的的128128個單元個單元(2) (2) 特殊功能寄存器。除了以單元地址的形式外特殊功能寄存器。除了以單元地址的形式外, ,還還可用寄可用寄存器符號存器符號的形式給出。例如:的形式給出。例如: MOV AMOV A,80H80H 與與 MOV AMOV A,P0P0是等價的是等價的。直接尋址是給出操作數的直接地址。直接尋址是給出操作數的直接地址。3 3寄存器尋址方式寄存器尋址方式 操作數在寄存器中操作數在寄存器中 MOV AMOV A,Rn Rn ;(;(RnRn)AA,n=0n=07 7 表示把寄存器表示把寄存器
23、RnRn的內容傳送給累加器的內容傳送給累加器A A 尋址范圍:尋址范圍:(1 1)4 4組通用工作寄存區共組通用工作寄存區共3232個工作寄存器。個工作寄存器。(2 2)部分特殊功能寄存器,例如)部分特殊功能寄存器,例如A A、B B 以及數據指針寄以及數據指針寄存器存器DPTRDPTR等。等。MOV A,R0 MOV A,R0 ; ;將將R0R0中的數據傳送至中的數據傳送至A A中中INC AINC AMUL ABMUL AB【例】【例】這些被尋址寄存器中的內容就是操作數這些被尋址寄存器中的內容就是操作數4. 4. 寄存器間接尋址方式寄存器間接尋址方式 寄存器中存放的是操作數的地址,寄存器中
24、存放的是操作數的地址,在寄存器前加在寄存器前加前綴標志前綴標志“” 。訪問訪問內部內部RAMRAM或或外部外部RAMRAM的低的低256256個字節個字節時,時,只能采用只能采用R0R0或或R1R1作為作為間址寄存器間址寄存器。例如:。例如: MOV AMOV A,RiRi ;i=0i=0或或1 1 其中其中RiRi中的內容為中的內容為40H40H,把內部,把內部RAM40HRAM40H單元內容送單元內容送A A。尋址范圍:尋址范圍:(1 1)訪問訪問內部內部RAMRAM低低128128個個單元,其通用形式為單元,其通用形式為RiRi(2 2)對對外部內部外部內部RAMRAM的的64K64K字
25、節字節的間接尋址,例如:的間接尋址,例如: MOVX AMOVX A,DPTRDPTR(3 3)片外數據存儲器的低片外數據存儲器的低256256字節字節 例如:例如:MOVX AMOVX A,RiRi(4 4)堆棧區堆棧區 堆棧操作指令堆棧操作指令PUSHPUSH(壓棧)和(壓棧)和POPPOP(出棧)使用堆棧指針(出棧)使用堆棧指針(SPSP)作間址寄存器)作間址寄存器5 5基址寄存器加變址寄存器間址尋址方式基址寄存器加變址寄存器間址尋址方式 以以1616位寄存器位寄存器DPTRDPTR(或(或PCPC)作為基址寄存器,累加器作)作為基址寄存器,累加器作為變址寄存器。變址時,把兩者的內容相加
26、,得到的結果作為變址寄存器。變址時,把兩者的內容相加,得到的結果作為操作數的地址。這種方式常用于查表操作。為操作數的地址。這種方式常用于查表操作。 例如:例如: 1 1)以程序計數器當前值為基址)以程序計數器當前值為基址 格式:格式:MOVC AMOVC A,A+PCA+PC 2 2)以數據指針)以數據指針DPTRDPTR為基址為基址 格式:格式:MOVC AMOVC A,A+DPTRA+DPTR 如:其中如:其中A A的原有內容為的原有內容為05H05H,DPTRDPTR的內容為的內容為0400H0400H,該指令,該指令執行的結果是把程序存儲器執行的結果是把程序存儲器0405H0405H單
27、元的內容傳送給單元的內容傳送給A A。說明:說明: (1 1)本尋址方式是)本尋址方式是專門針對程序存儲器專門針對程序存儲器的尋址方式,尋址范的尋址方式,尋址范圍可達到圍可達到64KB64KB。(2 2)本尋址方式的指令只有本尋址方式的指令只有3 3條條:MOVC AMOVC A,A+DPTRA+DPTRMOVC AMOVC A,A+PCA+PCJMP A+DPTRJMP A+DPTR 6 6相對尋址方式相對尋址方式 在相對尋址的轉移指令中,給出了地址偏移量,以在相對尋址的轉移指令中,給出了地址偏移量,以“relrel”表表示,即把示,即把PCPC的當前值加上偏移量就構成了程序轉移的目的地址:
28、的當前值加上偏移量就構成了程序轉移的目的地址: 目的地址目的地址= =轉移指令所在的地址轉移指令所在的地址 + + 轉移指令的字節數轉移指令的字節數 + + relrel 偏移量偏移量relrel是一帶符號的是一帶符號的8 8位二進制數補碼數位二進制數補碼數。 范圍是:范圍是:128 +127128 +127 向向地址增加方向地址增加方向最大可轉移(最大可轉移(127+127+轉移指令字節)個單元地址,轉移指令字節)個單元地址, 向向地址減少方向地址減少方向最大可轉移(最大可轉移(128-128-轉移指令字節)個單元地址。轉移指令字節)個單元地址。 注意:注意:1 1)“當前當前PCPC值值”
29、指程序中下一條指令所在的首地址,是一指程序中下一條指令所在的首地址,是一個個1616位數;位數;2 2)符號)符號“rel”rel”表示表示“偏移量偏移量”, ,是一個帶符號的單字節數是一個帶符號的單字節數, ,范圍是范圍是:-128+127(80H7FH):-128+127(80H7FH)在實際編程中,在實際編程中,“rel” rel” 通常用標號代替通常用標號代替例:例:2000H:SJMP 08H ;在實際編程中,在實際編程中,“rel” rel” 通常用標號代替通常用標號代替例:例:SJMP LOOP1SJMP LOOP1例:例:2000H2000H:SJMP 08HSJMP 08H
30、; 原原PCPC值為值為2000H2000H;執行這條指令后的當前;執行這條指令后的當前PCPC值為值為2002H2002H,relrel為為08H08H。2002H+08H=200AH2002H+08H=200AH,轉移目的地址為,轉移目的地址為200AH200AH,程,程序就跳轉至序就跳轉至200AH200AH去執行了。去執行了。右圖為右圖為SJMP 08HSJMP 08H相對尋址相對尋址示意圖。示意圖。;將位地址;將位地址07H(07H(字節字節地址地址20H20H中最高位中最高位) )中的數據傳送至進中的數據傳送至進位位位位CyCy。 7. 7. 位尋址方式位尋址方式 位尋址是對內位尋
31、址是對內RAMRAM和特殊功能寄存器中的可尋址位和特殊功能寄存器中的可尋址位進行操作的尋址方式。進行操作的尋址方式。指令中直接給出了操作數所在指令中直接給出了操作數所在的位地址。的位地址。例:例: CLR P1.0 CLR P1.0 ;(P1.0) 0(P1.0) 0 SETB ACC.7 SETB ACC.7 ;(ACC.7) 1(ACC.7) 1 CPL C CPL C ;( C ) NOT( C )( C ) NOT( C )MOV C,07HMOV C,07H 注意:注意: 1 1)位地址里的數據只可能是一個)位地址里的數據只可能是一個 0 0 或或 1 1 2 2)有的位地址十分明確
32、)有的位地址十分明確, ,如如 P1.0, ACC.7P1.0, ACC.7等等, ,有的位地址有的位地址則則“不太明確不太明確”,如:,如: MOV AMOV A,17H ; (A)(17H),17H17H ; (A)(17H),17H是是字節地址字節地址 MOV ACC.0MOV ACC.0,17H ;(ACC.0)(17H),17H ;(ACC.0)(17H),這里這里ACC.0 ACC.0 是是位位地址地址所以該指令中的所以該指令中的17H17H是是22H22H單元的第單元的第7 7位位3.3 MCS-513.3 MCS-51單片機指令系統單片機指令系統 111111條指令條指令,按功
33、能分類,可分為下面,按功能分類,可分為下面5 5大類大類: (1 1)數據傳送類)數據傳送類(29(29條條) ) (2 2)算術操作類)算術操作類(24(24條條 (3 3)邏輯運算類)邏輯運算類(24(24條條) ) (4 4)控制轉移類)控制轉移類(17(17條條) ) (5 5)位操作類)位操作類(17(17條條) ) 這這5大類指令,基本大類指令,基本實現單片機無所不能的實現單片機無所不能的功能!功能!指令中符號的意義指令中符號的意義: :Rn Rn 當前寄存器區的當前寄存器區的8 8個工作寄存器個工作寄存器R0R0R7(n=0R7(n=0 7)7)。Ri Ri 當前寄存器區中可作間
34、接尋址寄存器的當前寄存器區中可作間接尋址寄存器的2 2個寄存個寄存 器器R0R0、R1(i=0,1)R1(i=0,1)。DirectDirect 直接地址,即直接地址,即8 8位的內部位的內部RAMRAM或特殊功能寄存或特殊功能寄存 器的器的字節字節地址。地址。#data#data 包含在包含在指令中的指令中的8 8位立即數位立即數。#data16#data16 包含在包含在指令中的指令中的1616位立即數位立即數。relrel 相對轉移指令中的偏移量,為相對轉移指令中的偏移量,為8 8位的帶符號補位的帶符號補 碼數。碼數。DPTRDPTR 數據指針數據指針,可用作,可用作1616位的數據地址
35、寄存器。位的數據地址寄存器。bitbit 內部內部RAMRAM或特殊功能寄存器中的或特殊功能寄存器中的直接尋址位直接尋址位。C C(或(或CyCy) 進位標志位或位處理機中的累加器。進位標志位或位處理機中的累加器。addr11addr11 1111位目的地址位目的地址addr16addr16 1616位目的地址位目的地址 間接尋址寄存器前綴,如間接尋址寄存器前綴,如RiRi,A+DPTRA+DPTR(X)(X) X X中的內容中的內容。(X)(X) 由由X X尋址的單元中的內容尋址的單元中的內容。 箭頭右邊的內容被箭頭左邊的內容所取代。箭頭右邊的內容被箭頭左邊的內容所取代。3.3.1 3.3.
36、1 數據傳送類指令數據傳送類指令 使用最頻繁使用最頻繁的一類指令的一類指令, ,通用格式:通用格式: MOV MOV , 屬屬“復制復制” ” ,而,而不是不是“搬家搬家”數據傳送類指令數據傳送類指令不影響標志位不影響標志位:CyCy、AcAc和和OVOV,影響奇偶標志位影響奇偶標志位P P。 1 1以累加器為目的操作數的指令以累加器為目的操作數的指令MOV A , MOV A , data ; #data (A)data ; #data (A)MOV A, Rn ; (Rn) (A), n=0MOV A, Rn ; (Rn) (A), n=07 7MOV A , Ri ; (Ri) (A)M
37、OV A , Ri ; (Ri) (A),i=0,1i=0,1MOV A , direct ; (direct) (A)MOV A , direct ; (direct) (A) 例如:例如: MOV A , MOV A , 0F5H ;0F5H ; 立即數立即數F5H (A) F5H (A) MOV A , R5 ; (R5) (A) MOV A , R5 ; (R5) (A) MOV A , R0 ; (R0) (A)MOV A , R0 ; (R0) (A)MOV A , 30H ; (30H)MOV A , 30H ; (30H) (A)(A)2. 2. 以以RnRn為目的操作數的指令
38、為目的操作數的指令 MOV Rn,A ; (A)Rn,n=0MOV Rn,A ; (A)Rn,n=07 7 MOV Rn,direct ; MOV Rn,direct ;(directdirect)Rn,n=0Rn,n=07 7 MOV Rn,#dat ; #dataRn,n=0 MOV Rn,#dat ; #dataRn,n=07 7 功能:是把源操作數的內容送入當前一組工作寄存器區的功能:是把源操作數的內容送入當前一組工作寄存器區的R0R0R7R7中的某一個寄存器。中的某一個寄存器。3.3.以直接地址為目的操作數的指令以直接地址為目的操作數的指令 MOV direct,A MOV dire
39、ct,A ; (A)direct; (A)direct MOV direct,Rn MOV direct,Rn;(Rn)direct, n=0;(Rn)direct, n=07 7 MOV direct1,direct2 MOV direct1,direct2; ; MOV direct,Ri MOV direct,Ri ; (Ri)direct; (Ri)direct MOV direct,#data MOV direct,#data; #datadirect; #datadirect 功能:功能:把源操作數送入直接地址指出的存儲單元。把源操作數送入直接地址指出的存儲單元。directdir
40、ect指指的是內部的是內部RAMRAM或或SFRSFR的地址。的地址。4.4.以間接操作地址為目的操作數的指令以間接操作地址為目的操作數的指令MOV Ri,A ;A(Ri),i=0,1MOV Ri,A ;A(Ri),i=0,1 MOV Ri,direct ; MOV Ri,direct ; (directdirect)(Ri)(Ri) MOV Ri,#data ; #data(Ri) MOV Ri,#data ; #data(Ri)5.165.16位數目標地址傳送指令位數目標地址傳送指令 MOV DPTR,#data16 ; #data16DPTRMOV DPTR,#data16 ; #dat
41、a16DPTR 唯一的唯一的1616位數據的傳送指令位數據的傳送指令 , ,立即數的立即數的高高8 8位位送入送入DPHDPH,立即數的,立即數的低低8 8位位送入送入DPLDPL。6 6堆棧操作指令堆棧操作指令 MCS-51MCS-51內部內部RAMRAM中可以設定一個中可以設定一個后進先出后進先出(LIFO-Last LIFO-Last In First OutIn First Out)的區域稱作)的區域稱作堆棧堆棧. . 堆棧指針堆棧指針SPSP指出指出堆棧的堆棧的棧頂位置棧頂位置。(1)(1)進棧指令進棧指令 PUSH directPUSH direct 其功能是首先將堆棧指針其功能是
42、首先將堆棧指針SPSP的內容加的內容加1 1,指向空單元;,指向空單元;然后將直接尋址單元中的數據壓入到然后將直接尋址單元中的數據壓入到SPSP所指示的單元中,所指示的單元中,此時,此時,SPSP的內容就是新的棧頂。的內容就是新的棧頂。(2)(2)出棧指令出棧指令 POP directPOP direct 其功能與其功能與PUSHPUSH的相反,即首先將棧頂的相反,即首先將棧頂SPSP所指示的單元內所指示的單元內容彈出到直接尋址單元中,然后將容彈出到直接尋址單元中,然后將SPSP的內容減的內容減1 1,此時,此時SPSP指指向新的棧頂。向新的棧頂。 例如,例如,設設SP=30HSP=30H,(
43、,(50H50H)=8FH=8FH,指令如下:,指令如下:PUSH 50H PUSH 50H ; SP+1SP; SP+1SP,(50H)(31H)(50H)(31H)POP 40HPOP 40H; (31H)(40H); (31H)(40H),SP-1SPSP-1SP例如,例如,設片內設片內RAMRAM(30H30H)=X=X,(,(40H40H)=Y=Y,通過堆棧操作實現,通過堆棧操作實現兩單元內容互相交換,程序如下:兩單元內容互相交換,程序如下:MOV SP, #1FHMOV SP, #1FHPUSH 30HPUSH 30HPUSH 40HPUSH 40HPOP 30HPOP 30HPO
44、P 40HPOP 40H程序執行結果:(程序執行結果:(30H30H)=Y=Y,(,(40H40H)=X=X。7.7.查表指令查表指令 共兩條,用于讀程序存儲器中的數據表格的指令,均采用基址寄存器共兩條,用于讀程序存儲器中的數據表格的指令,均采用基址寄存器加變址寄存器間接尋址方式。加變址寄存器間接尋址方式。 (1) MOVC A,A+PC(1) MOVC A,A+PC ; ; ;PC+1PC,(A+PC)A;PC+1PC,(A+PC)A以以PCPC作基址寄存器作基址寄存器,A A的內容的內容作為無符號整數和作為無符號整數和PCPC中的內容(下一條中的內容(下一條指令的起始地址)指令的起始地址)
45、相加后得到一個相加后得到一個1616位的地址,位的地址,該地址指出的程序該地址指出的程序存儲單元的內容送到累加器存儲單元的內容送到累加器A A。注意:注意:PSENPSEN* *信號有效信號有效。例如例如: : (A)=30H, (A)=30H,執行地址執行地址1000H1000H處的指令處的指令 1000H1000H: MOVC A,A+PCMOVC A,A+PC 本指令占用一個字節,執行結果將程序存儲器中本指令占用一個字節,執行結果將程序存儲器中1031H1031H的內容送入的內容送入A A。優點:優點:不改變特殊功能寄存器及不改變特殊功能寄存器及PCPC的狀態,根據的狀態,根據A A的內
46、容就可以取出的內容就可以取出表格中的常數。表格中的常數。缺點:缺點:表格只能存放表格只能存放在該條查表指令后面在該條查表指令后面的的256256個個單元之內單元之內,表格的,表格的大小受到限制,且表格只能被一段程序所利用。大小受到限制,且表格只能被一段程序所利用。(2) MOVC A,A+DPTR ; (2) MOVC A,A+DPTR ; ;(A+DPTR)A;(A+DPTR)A以以DPTRDPTR作為基址寄存器,作為基址寄存器,A A的內容作為無符號數和的內容作為無符號數和DPTRDPTR的內容的內容相加得到一個相加得到一個1616位的地址,把由該地址指出的程序存儲器單位的地址,把由該地址
47、指出的程序存儲器單元的內容送到累加器元的內容送到累加器A. A. 例如例如:(DPTR)=8100H (A)=40H (DPTR)=8100H (A)=40H 執行指令執行指令 MOVC A,A+DPTRMOVC A,A+DPTR 本指令的本指令的執行結果執行結果只和指針只和指針DPTRDPTR及累加器及累加器A A的內容有關,與該的內容有關,與該指令存放的地址及常數表格存放的地址無關,指令存放的地址及常數表格存放的地址無關,因此表格的大因此表格的大小和位置可以在小和位置可以在64K64K程序存儲器中任意安排程序存儲器中任意安排,一個表格,一個表格可為可為各個程序塊公用。各個程序塊公用。兩條指
48、令是在兩條指令是在MOVMOV的后面加的后面加C C,“C”C”是是CODECODE的第一個字母,即的第一個字母,即代碼的意思。代碼的意思。【例】【例】 已知已知ROMROM中存有中存有0909的平方表,首地址為的平方表,首地址為2000H2000H,試根,試根據累加器據累加器A A中的數值查找對應的平方值,存入內中的數值查找對應的平方值,存入內RAM 30HRAM 30H。( (設設A=3)A=3) 解:解:若用若用DPTRDPTR作為基址寄存器,可編程如下:作為基址寄存器,可編程如下:1000H1000H:MOV DPTRMOV DPTR,#2000H #2000H ;置;置ROMROM平
49、方表首地址平方表首地址 MOVC AMOVC A,A+DPTR A+DPTR ;A+2000H=2003H(A+2000H=2003H(設設A=3)A=3), ;A=(2003H)=09HA=(2003H)=09H MOV 30H MOV 30H,A A ;平方值存入內;平方值存入內RAM 30HRAM 30H中中 2000H2000H:00H 00H ;平方表:;平方表:0 02 2=0=02001H2001H:01H 01H ; 1 12 2=1 =1 2002H2002H:04H 04H ; 2 22 2=4=42003H2003H:09H 09H ; 3 32 2=9=92004H20
50、04H:10H 10H ; 4 42 2=16=16,16=10H16=10H 2009H2009H:51H 51H ; 9 92 2=81=81,81=51H81=51H8.8.累加器累加器A A與外部數據存儲器傳送指令與外部數據存儲器傳送指令 MOVX A,DPTR MOVX A,DPTR ;(DPTR)A,;(DPTR)A,讀外部讀外部RAM/IORAM/IO MOVX A,Ri MOVX A,Ri ;(Ri)A,;(Ri)A,讀外部讀外部RAM/IORAM/IO MOVX DPTR,A MOVX DPTR,A;(A)(DPTR),;(A)(DPTR),寫外部寫外部RAM/IORAM/I
51、O MOVX Ri,A MOVX Ri,A ;(A)(Ri),;(A)(Ri),寫外部寫外部RAM/IORAM/IO功能:讀外部功能:讀外部RAMRAM存儲器或存儲器或I/OI/O中的一個字節,或把中的一個字節,或把A A中一個字節中一個字節的數據寫到外部的數據寫到外部RAMRAM存儲器或存儲器或I/OI/O中。中。 注意:伴隨著注意:伴隨著RDRD* *或或WRWR* *信號有效。信號有效。采用采用DPTRDPTR間接尋址,間接尋址,高高8 8位地址(位地址(DPHDPH)由)由P2P2口輸出,低口輸出,低8 8位地址位地址(DPLDPL)由)由P0P0口輸出。口輸出。采用采用RiRi(i=
52、0,1i=0,1)間接尋址)間接尋址,可尋址片外,可尋址片外RAMRAM的的256256個單元。個單元。RiRi內內容由容由P0P0口輸出。口輸出。MOVMOV后后 “X”X”表示單片機訪問的是片外表示單片機訪問的是片外RAMRAM存儲器或存儲器或I/OI/O。內內RAMRAM( (包括特殊功能寄存器包括特殊功能寄存器): ): 用用MOVMOV指令傳送;指令傳送;外外RAM: RAM: 用用MOVXMOVX指令傳送;指令傳送;ROM: ROM: 用用MOVCMOVC指令傳送。指令傳送。 三個不同的存儲空間用三種不同的指令傳送:三個不同的存儲空間用三種不同的指令傳送:【例】【例】 按下列要求傳
53、送數據:設按下列要求傳送數據:設ROM(2000H)=ABHROM(2000H)=ABH (1)ROM 2000H (1)ROM 2000H單元數據送內單元數據送內RAM 10HRAM 10H單元;單元; (2)R0M 2000H(2)R0M 2000H單元數據送外單元數據送外RAM 80HRAM 80H單元;單元; (3)ROM 2000H(3)ROM 2000H單元數據送外單元數據送外RAM 1000HRAM 1000H單元;單元;解解(1)(1):MOV DPTR,#2000H ;置基址2000H,DPTR=2000H MOV A,#00H ;置變址0,A=00H MOVC A,A+DP
54、TR ;讀ROM 2000H,A=ABH MOV 10H,A ;存內RAM 10H單元,(10H)=ABH解解(2)(2):MOV DPTR,#1FFFH ;置基址1FFFH,DPTR=1FFFH MOV A,#01H ;置變址01H,A=01H MOVC A,A+DPTR ;讀ROM 2000H,A=ABH NOV R0,#80H ;置外RAM間址,R0=80H MOVX R0,A ;寫外RAM 80H,外RAM(80H)=ABH解解(3)(3):MOV DPTR,#2000H ;置基址2000H,DPTR=2000H MOV A,#00H ;置變址0,A=00H MOVC A,A+DPTR
55、 ;讀ROM 2000H,A=ABH MOV DPH,1OH ;修改外RAM地址,DPTR=1000H MOVX DPTR,A ;寫外RAM 1000H,外RAM(1000H)=ABH9 9交換指令交換指令(1 1)字節交換指令)字節交換指令 XCH A,RnXCH A,Rn XCH A,directXCH A,direct XCH A,RiXCH A,Ri例如例如,已知,已知R0=15HR0=15H,A=46HA=46H,(,(15H15H)=50H=50H, 執行指令執行指令XCH AXCH A,R0R0程序執行的結果:程序執行的結果:A=50HA=50H,(15H15H)=46H=46H
56、。 執行下列指令:執行下列指令: XCH A,R7 ;(A)XCH A,R7 ;(A)與與(R7)(R7)互換互換 XCH A,40H ;(A)XCH A,40H ;(A)與與(40H)(40H)互換互換 XCH A,R0 ;(A)XCH A,R0 ;(A)與與(R0)(R0)互換互換(2 2)半字節交換指令)半字節交換指令 XCHD A,RiXCHD A,Ri 累加器的低累加器的低4 4位與內部位與內部RAMRAM低低4 4位交換。例如:位交換。例如:例如,已知例如,已知R0=20HR0=20H,A=5AHA=5AH,片內,片內RAMRAM(20H20H)=46H=46H, 執行指令執行指令
57、XCHD AXCHD A,R0R0程序執行結果:程序執行結果:A=56HA=56H,(,(20H20H)=4AH=4AH。(3 3)累加器)累加器A A的高的高4 4位與低位與低4 4位內容互換指令位內容互換指令 SWAP SWAP A A ; A.3; A.3A.0A.0 A.7 A.7A.4A.4該指令的功能是,將該指令的功能是,將A A的高、低兩個半字節相互交換的高、低兩個半字節相互交換3.3.2 3.3.2 算術操作類指令算術操作類指令 單字節的加、減、乘、除法指令,都是針對單字節的加、減、乘、除法指令,都是針對8 8位二進制無符位二進制無符號數。執行的結果對號數。執行的結果對CyCy
58、、AcAc、OVOV 三種標志位有影響。三種標志位有影響。但增但增1 1和減和減1 1指令不影響上述標志。指令不影響上述標志。1 1加法指令加法指令,(,(不帶不帶CyCy加法指令加法指令) )(4 4條)條) ADD A,Rn ;A+(Rn)AADD A,Rn ;A+(Rn)A,n=0n=07 7 ADD A,direct ;A+(direct)A ADD A,direct ;A+(direct)A ADD A,Ri ;A+(Ri)A,i=0,1 ADD A,Ri ;A+(Ri)A,i=0,1 ADD A,#data ;A+#dataAADD A,#data ;A+#dataA 一個加數總是
59、來自累加器一個加數總是來自累加器A A,而另一個加數可由不同,而另一個加數可由不同的尋址方式得到。結果總是放在的尋址方式得到。結果總是放在A A中。中。使用加法指令時,使用加法指令時,要注意累加器要注意累加器A A中的運算結果對各個標志中的運算結果對各個標志位的影響:位的影響:(1 1)如果)如果位位7 7有進位有進位,則置,則置“1”1”進位標志進位標志CyCy,否則清,否則清“0”Cy0”Cy(2 2)如果)如果位位3 3有進位有進位,置,置“1”1”輔助進位標志輔助進位標志AcAc,否則清,否則清“0”Ac0”Ac(AcAc為為PSWPSW寄存器中的一位)寄存器中的一位)(3 3)如果位
60、如果位6 6有進位,而位有進位,而位7 7沒有進位,或者位沒有進位,或者位7 7有進位,而有進位,而位位6 6沒有,則溢出標志位沒有,則溢出標志位OVOV置置“1”1”,否則,否則OVOV清清“0” 0” 。溢出標志位溢出標志位OVOV的狀態,只有在的狀態,只有在帶符號數加法運算帶符號數加法運算時才有意義時才有意義。當兩個帶符號數相加時,當兩個帶符號數相加時,OV=1OV=1,表示加法運算表示加法運算超出了超出了累加累加器器A A所能表示的帶符號數的有效范圍。所能表示的帶符號數的有效范圍。 例例 (A)=53H(A)=53H,(R0)=FCH(R0)=FCH,執行指令,執行指令 ADD A,R
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 濰坊食品科技職業學院《生理學中醫方法論醫學哲學》2023-2024學年第二學期期末試卷
- 新疆農業大學《城市交通管理》2023-2024學年第二學期期末試卷
- 武漢市漢陽區重點中學2024-2025學年初三下學期期末生物試題理試題含解析
- 礦物加工廠安全生產與事故預防考核試卷
- 礦產勘查中的地質公園建設與保護考核試卷
- 白酒與傳統文化產業的結合與創新模式探討考核試卷
- 社交媒體與全球文化傳播考核試卷
- 礦石提煉工藝的經濟效益分析考核試卷
- 物聯網在零售行業的應用考核試卷
- 林木育種與森林碳匯能力提升考核試卷
- 農行反洗錢與制裁合規知識競賽考試題庫大全-上下
- 養老院安全知識培訓課件
- 中國資源循環集團有限公司招聘真題2024
- 基礎教育教學研究項目結項鑒定審批書
- 2025年中國中壓變頻器市場競爭策略及行業投資潛力預測報告
- 2025-2030直銷銀行行業發展分析及投資戰略研究報告
- 百師聯盟2025屆高三一輪復習聯考(五)政治試題含答案
- 2025年四川長寧縣國恒資本控股集團有限公司招聘筆試參考題庫附帶答案詳解
- 2024年蕪湖城市園林集團股份有限公司招聘筆試真題
- 2025年濟源職業技術學院單招職業技能測試題庫參考答案
- 垃圾桶采購投標方案(技術方案)
評論
0/150
提交評論