




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第3 3章章 MCS-51MCS-51的指令系統(tǒng)與的指令系統(tǒng)與匯編語(yǔ)言匯編語(yǔ)言程序設(shè)計(jì)程序設(shè)計(jì) 【學(xué)習(xí)目標(biāo)】【學(xué)習(xí)目標(biāo)】l掌握單片機(jī)的掌握單片機(jī)的指令系統(tǒng)指令系統(tǒng),熟悉指令功能、指令格,熟悉指令功能、指令格式以及指令的尋址方式;式以及指令的尋址方式;l理解匯編語(yǔ)言的特點(diǎn)以及與機(jī)器語(yǔ)言之間的區(qū)別理解匯編語(yǔ)言的特點(diǎn)以及與機(jī)器語(yǔ)言之間的區(qū)別和聯(lián)系;和聯(lián)系;l掌握匯編語(yǔ)言掌握匯編語(yǔ)言程序設(shè)計(jì)程序設(shè)計(jì)的步驟、匯編語(yǔ)言程序的的步驟、匯編語(yǔ)言程序的結(jié)構(gòu);結(jié)構(gòu);l熟練掌握匯編語(yǔ)言應(yīng)用程序的開發(fā)熟練掌握匯編語(yǔ)言應(yīng)用程序的開發(fā) 【例【例3.113.11】 有一數(shù)據(jù)塊存放起始地址為有一數(shù)據(jù)塊存放起始地址為DATA
2、1DATA1的的片外片外RAMRAM區(qū),數(shù)據(jù)塊以區(qū),數(shù)據(jù)塊以“0”0”為結(jié)束標(biāo)志,要求將其傳送到為結(jié)束標(biāo)志,要求將其傳送到DATA2DATA2為為起始地址的起始地址的片內(nèi)片內(nèi)RAMRAM區(qū)。編寫程序如下:區(qū)。編寫程序如下: MOV DPTR, #DATA1 MOV DPTR, #DATA1; ;設(shè)置片外設(shè)置片外RAMRAM數(shù)據(jù)塊地址指針數(shù)據(jù)塊地址指針 MOV R0MOV R0,#DATA2 #DATA2 ; ;設(shè)置片內(nèi)設(shè)置片內(nèi)RAMRAM數(shù)據(jù)塊地址指針數(shù)據(jù)塊地址指針LOOP:MOVX A, DPTRLOOP:MOVX A, DPTR; ;取數(shù)取數(shù) JZ ENDOJZ ENDO; ;檢測(cè)是否為檢
3、測(cè)是否為0 0?為?為0 0,轉(zhuǎn),轉(zhuǎn)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單片機(jī)指令系統(tǒng)概述單片機(jī)指令系統(tǒng)概述1 1指令的概念指令的概念 指令指令是由是由CPUCPU解釋執(zhí)行,用于控制功能部件完成某種指定操解釋執(zhí)行,用于控制功能部件完成某種指定操作的命令。作的命令。 由于由于CPUCPU只能識(shí)別二進(jìn)制數(shù),所以計(jì)算機(jī)的指令均由二進(jìn)制只能
4、識(shí)別二進(jìn)制數(shù),所以計(jì)算機(jī)的指令均由二進(jìn)制代碼組成,通常把這樣的指令稱為代碼組成,通常把這樣的指令稱為機(jī)器指令機(jī)器指令。 一般的計(jì)算機(jī)都有幾十甚至上百條機(jī)器指令,這些指令就一般的計(jì)算機(jī)都有幾十甚至上百條機(jī)器指令,這些指令就構(gòu)成了計(jì)算機(jī)的構(gòu)成了計(jì)算機(jī)的指令系統(tǒng)指令系統(tǒng)。不同類型的。不同類型的CPUCPU具有不同的指令系統(tǒng)。具有不同的指令系統(tǒng)。 2 2指令系統(tǒng)說(shuō)明指令系統(tǒng)說(shuō)明MCS-51MCS-51的基本指令共的基本指令共111111條條: : 每條指令在程序存儲(chǔ)器每條指令在程序存儲(chǔ)器ROMROM中占據(jù)一定的中占據(jù)一定的空間空間,以字節(jié)為單位。,以字節(jié)為單位。按指令所占的字節(jié)來(lái)分:按指令所占的字節(jié)來(lái)
5、分: (1) (1) 單字節(jié)單字節(jié)指令指令4949條;條; (2) (2) 雙字節(jié)雙字節(jié)指令指令4545條;條; (3) (3) 三字節(jié)三字節(jié)指令指令1717條。條。每條指令在執(zhí)行時(shí)要花去一定的每條指令在執(zhí)行時(shí)要花去一定的時(shí)間時(shí)間,以機(jī)器周期為單,以機(jī)器周期為單位。位。按指令的執(zhí)行時(shí)間來(lái)分按指令的執(zhí)行時(shí)間來(lái)分: (1) (1) 1 1個(gè)機(jī)器周期個(gè)機(jī)器周期(1212個(gè)時(shí)鐘振蕩周期)指令個(gè)時(shí)鐘振蕩周期)指令6464條條 (2) (2) 2 2個(gè)機(jī)器周期個(gè)機(jī)器周期(2424個(gè)時(shí)鐘振蕩周期)指令個(gè)時(shí)鐘振蕩周期)指令4545條條 (3) (3) 4 4個(gè)機(jī)器周期個(gè)機(jī)器周期(4848個(gè)時(shí)鐘振蕩周期)個(gè)時(shí)鐘
6、振蕩周期)只有乘、只有乘、 除兩條指令的執(zhí)行時(shí)間。除兩條指令的執(zhí)行時(shí)間。 12MHz12MHz晶振晶振: :機(jī)器周期為機(jī)器周期為1 1 s s。按指令的按指令的功能功能分類,可分為分類,可分為5 5大類:大類: 數(shù)據(jù)傳送類數(shù)據(jù)傳送類(2929條);條);算術(shù)運(yùn)算類算術(shù)運(yùn)算類(2424條)條) 邏輯運(yùn)算及移位類邏輯運(yùn)算及移位類(2424););控制轉(zhuǎn)移類控制轉(zhuǎn)移類(1717條)條) 位操作類位操作類(1717條)條)【例【例3.33.3】 設(shè)片內(nèi)設(shè)片內(nèi)RAM 30HRAM 30H、31H31H和和32H32H、33H33H分別存放兩個(gè)分別存放兩個(gè)1616位無(wú)符號(hào)數(shù),要求將兩個(gè)數(shù)的和存入位無(wú)符號(hào)數(shù)
7、,要求將兩個(gè)數(shù)的和存入30H30H、31H31H(低位在前,(低位在前,高位在后)。程序如下:高位在后)。程序如下:【例【例3.33.3】 設(shè)片內(nèi)設(shè)片內(nèi)RAM 30HRAM 30H、31H31H和和32H32H、33H33H分別存放兩個(gè)分別存放兩個(gè)1616位無(wú)符號(hào)數(shù),要求將兩個(gè)數(shù)的和存入位無(wú)符號(hào)數(shù),要求將兩個(gè)數(shù)的和存入30H30H、31H31H(低位在前,(低位在前,高位在后)。程序如下:高位在后)。程序如下:MOV R0MOV R0,#30H #30H ; ; 設(shè)置第一個(gè)數(shù)地址指針設(shè)置第一個(gè)數(shù)地址指針MOVMOVR1R1,#32H #32H ; ; 設(shè)置第二個(gè)數(shù)地址指針設(shè)置第二個(gè)數(shù)地址指針M
8、OV A, R0MOV A, R0; ; 取低位取低位ADD A, R1ADD A, R1; ; 兩數(shù)低位相加兩數(shù)低位相加MOVMOVR0R0,A A ; ; 存存“和和”的低位的低位INCINCR0R0INCINCR1R1MOVMOVA, R0A, R0; ; 取高位取高位ADDC A, R1ADDC A, R1; ; 兩數(shù)高位相加兩數(shù)高位相加MOVMOVR0R0,A A ; ; 存存“和和”的高位的高位SJMPSJMP $ $【例【例3.113.11】 有一數(shù)據(jù)塊存放起始地址為有一數(shù)據(jù)塊存放起始地址為DATA1DATA1的的片外片外RAMRAM區(qū),數(shù)據(jù)塊以區(qū),數(shù)據(jù)塊以“0”0”為結(jié)束標(biāo)志,
9、要求將其傳送到為結(jié)束標(biāo)志,要求將其傳送到DATA2DATA2為為起始地址的起始地址的片內(nèi)片內(nèi)RAMRAM區(qū)。編寫程序如下:區(qū)。編寫程序如下: MOV DPTR, #DATA1 MOV DPTR, #DATA1; ;設(shè)置片外設(shè)置片外RAMRAM數(shù)據(jù)塊地址指針數(shù)據(jù)塊地址指針 MOV R0MOV R0,#DATA2 #DATA2 ; ;設(shè)置片內(nèi)設(shè)置片內(nèi)RAMRAM數(shù)據(jù)塊地址指針數(shù)據(jù)塊地址指針LOOP:MOVX A, DPTRLOOP:MOVX A, DPTR; ;取數(shù)取數(shù) JZ ENDOJZ ENDO; ;檢測(cè)是否為檢測(cè)是否為0 0?為?為0 0,轉(zhuǎn),轉(zhuǎn)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個(gè)個(gè)LEDLED,以產(chǎn)生跑馬燈的效果。,以產(chǎn)生跑馬燈的效果。連接好電路并且完成程序之后,您將可以看到連接好電路并且完成程序之后,您將可以看到8 8個(gè)個(gè)LEDLED依次依次輪流閃爍。輪流閃爍。 在這次練習(xí)中,您將學(xué)會(huì)如何使用在這次練習(xí)中,您將學(xué)會(huì)如何使用I/O PortI/O
11、Port輸出數(shù)據(jù),輸出數(shù)據(jù),以及如何使用循環(huán)實(shí)現(xiàn)時(shí)間延遲。以及如何使用循環(huán)實(shí)現(xiàn)時(shí)間延遲。 電電路路圖圖#include void delay (void) /* delay 函數(shù)函數(shù) */ unsigned char i,j; /* 這個(gè)函數(shù)執(zhí)行時(shí)間的延遲這個(gè)函數(shù)執(zhí)行時(shí)間的延遲 */ for (i=0;i255;i+) for(j=0;j255;j+) ;void main (void) unsigned char j=0XFE; /*聲明變量聲明變量 j ,11111110*/ while (1) /* 無(wú)窮循環(huán)無(wú)窮循環(huán) */ /*依次讓依次讓LED 0,1,2,3,4,5,6,7閃爍閃爍
12、*/ j=(j1) | 0 x01; if(j=0XFF) j=0XFE; P1 = j; /* 將數(shù)值輸出到將數(shù)值輸出到Port1,控制,控制LED亮或滅亮或滅 */ delay(); /* 調(diào)用調(diào)用 delay 函數(shù)函數(shù)*/ 標(biāo)號(hào):操作碼標(biāo)號(hào):操作碼 操作數(shù);注釋操作數(shù);注釋 指令格式指令格式 兩部分組成,即兩部分組成,即操作碼操作碼和和操作數(shù)操作數(shù)。 操作碼操作碼: :規(guī)定指令進(jìn)行什么操作規(guī)定指令進(jìn)行什么操作 操作數(shù)操作數(shù): :指令操作的對(duì)象指令操作的對(duì)象方括符方括符 表示可選項(xiàng)表示可選項(xiàng)標(biāo)號(hào)代表指令所在地址,標(biāo)號(hào)代表指令所在地址,1-81-8個(gè)字母?jìng)€(gè)字母/ /數(shù)字,數(shù)字,“:”:”結(jié)尾
13、結(jié)尾 標(biāo)號(hào)標(biāo)號(hào):操作碼操作碼 目的操作數(shù)目的操作數(shù),源操作數(shù)源操作數(shù);注釋注釋 START:MOV A,#30H START:MOV A,#30H ; ;將立即數(shù)將立即數(shù)30H30H傳送至傳送至A A中中 MOV DPTR,#5678H MOV DPTR,#5678H ; ;將立即數(shù)將立即數(shù)5678H5678H傳送至傳送至DPTRDPTR 標(biāo)號(hào):指令的符號(hào)地址。標(biāo)號(hào):指令的符號(hào)地址。 用于一段功能程序的識(shí)別標(biāo)記或控制轉(zhuǎn)移地址。用于一段功能程序的識(shí)別標(biāo)記或控制轉(zhuǎn)移地址。指令前的標(biāo)號(hào)代表該指令的地址,是指令前的標(biāo)號(hào)代表該指令的地址,是用符號(hào)表示的用符號(hào)表示的地址地址。一般用英文字母和數(shù)字組成。標(biāo)號(hào)
14、必須用冒號(hào)一般用英文字母和數(shù)字組成。標(biāo)號(hào)必須用冒號(hào)“ :”與操作碼分隔。與操作碼分隔。 操作碼:表示指令的操作功能。操作碼:表示指令的操作功能。 操作碼用助記符表示,它操作碼用助記符表示,它代表了指令的操作代表了指令的操作功能功能。 操作碼是指令的必需部分,是指令的核心,不操作碼是指令的必需部分,是指令的核心,不可缺少。可缺少。START:MOV A,#30H START:MOV A,#30H ; ;將立即數(shù)將立即數(shù)30H30H傳送至傳送至A A中中 MOV DPTR,#5678H MOV DPTR,#5678H ; ;將立即數(shù)將立即數(shù)5678H5678H傳送至傳送至DPTRDPTR 操作數(shù):
15、參加操作的數(shù)據(jù)或數(shù)據(jù)地址。操作數(shù):參加操作的數(shù)據(jù)或數(shù)據(jù)地址。 操作數(shù)與操作碼之間用空格分隔,操作數(shù)與操作數(shù)與操作碼之間用空格分隔,操作數(shù)與 操作數(shù)操作數(shù)之間用逗號(hào)之間用逗號(hào)“,”分隔。分隔。 操作數(shù)可以是操作數(shù)可以是數(shù)據(jù)數(shù)據(jù),也可以是,也可以是數(shù)據(jù)的地址數(shù)據(jù)的地址、數(shù)據(jù)地址數(shù)據(jù)地址的地址的地址或或操作數(shù)的其他信息操作數(shù)的其他信息。 操作數(shù)可分為目的操作數(shù)和源操作數(shù)。操作數(shù)可分為目的操作數(shù)和源操作數(shù)。 操作數(shù)可用二進(jìn)制數(shù)、十進(jìn)制數(shù)或十六進(jìn)制操作數(shù)可用二進(jìn)制數(shù)、十進(jìn)制數(shù)或十六進(jìn)制數(shù)表示。數(shù)表示。 操作數(shù)的個(gè)數(shù)可以是操作數(shù)的個(gè)數(shù)可以是0 03 3個(gè)。個(gè)。 注釋:指令功能說(shuō)明。注釋:指令功能說(shuō)明。 注
16、釋屬于非必需項(xiàng),是為便于閱讀,注釋屬于非必需項(xiàng),是為便于閱讀, 對(duì)指令對(duì)指令功能作的說(shuō)明和注解。功能作的說(shuō)明和注解。 注釋必須以注釋必須以“;”開始。開始。3 3指令系統(tǒng)中的特殊符號(hào)指令系統(tǒng)中的特殊符號(hào)1 1)RnRn:選定當(dāng)前寄存器區(qū)的寄存器:選定當(dāng)前寄存器區(qū)的寄存器R0R0R7R7。2 2) :間接尋址方式中,表示間址寄存器的符號(hào)。如:間接尋址方式中,表示間址寄存器的符號(hào)。如RiRi,表示,表示當(dāng)前選中的工作寄存器組中可作為地址指針的兩個(gè)工作寄存器當(dāng)前選中的工作寄存器組中可作為地址指針的兩個(gè)工作寄存器R0R0和和R1R1。 3 3)#data#data:8 8位常數(shù),即包含在指令中的位常數(shù)
17、,即包含在指令中的8 8位常數(shù)。位常數(shù)。 4 4)#data16#data16:1616位常數(shù),即包含在指令中的位常數(shù),即包含在指令中的1616位常數(shù)。位常數(shù)。5 5)directdirect:8 8位片內(nèi)位片內(nèi)RAMRAM單元(包括單元(包括SFRSFR)的直接地址。)的直接地址。6 6)addr11addr11:1111位目的地址,用于位目的地址,用于ACALLACALL和和AJMPAJMP指令中。目的地址指令中。目的地址必須放在與下一條指令第一個(gè)字節(jié)同一個(gè)必須放在與下一條指令第一個(gè)字節(jié)同一個(gè)2KB2KB程序存儲(chǔ)地址空間程序存儲(chǔ)地址空間之內(nèi)。之內(nèi)。7 7)addr16addr16:1616
18、位目的地址,用于位目的地址,用于LCALLLCALL和和LJMPLJMP指令中。目的地址指令中。目的地址范圍在范圍在64KB64KB程序存儲(chǔ)器地址空間。程序存儲(chǔ)器地址空間。8 8)relrel:補(bǔ)碼形式的:補(bǔ)碼形式的8 8位地址偏移量,用于相對(duì)轉(zhuǎn)移指令中。偏位地址偏移量,用于相對(duì)轉(zhuǎn)移指令中。偏移量以下一條指令第一字節(jié)地址為基值,偏移范圍為移量以下一條指令第一字節(jié)地址為基值,偏移范圍為-128-128+127+127。9 9)bitbit:片內(nèi):片內(nèi)RAMRAM或特殊功能寄存器的直接尋址位地址。或特殊功能寄存器的直接尋址位地址。MOV DPTR,#5678H MOV R1,#32H MOV A,
19、 R0 3.2 3.2 指令系統(tǒng)的尋址方式指令系統(tǒng)的尋址方式尋址方式尋址方式就是在指令中就是在指令中說(shuō)明操作數(shù)所在地址說(shuō)明操作數(shù)所在地址的方法。的方法。共共7 7種種尋址方式。尋址方式。立即尋址立即尋址直接尋址直接尋址寄存器尋址寄存器尋址寄存器間接尋址寄存器間接尋址變址尋址變址尋址( (基址寄存器基址寄存器+ +變址寄存器間接尋址變址寄存器間接尋址) )相對(duì)尋址相對(duì)尋址位尋址位尋址1 1立即尋址方式立即尋址方式 指令的指令的操作數(shù)是要參與運(yùn)算的數(shù)操作數(shù)是要參與運(yùn)算的數(shù),所以又叫立即數(shù),所以又叫立即數(shù),用用“#”#”號(hào)表示。立即數(shù)就是存放在程序存儲(chǔ)器中的常數(shù)。號(hào)表示。立即數(shù)就是存放在程序存儲(chǔ)器中
20、的常數(shù)。 例如:例如:ADD AADD A,#34H#34H 把立即數(shù)把立即數(shù)34H34H與累加器與累加器A A中內(nèi)容相加,結(jié)果送中內(nèi)容相加,結(jié)果送A A中。在中。在MCS-51MCS-51的指令系統(tǒng)中,僅有一條指令的操作數(shù)是的指令系統(tǒng)中,僅有一條指令的操作數(shù)是1616位的位的立即數(shù),其功能是向地址指針立即數(shù),其功能是向地址指針 DPTRDPTR傳送傳送1616位的地址,即位的地址,即把立即數(shù)的高把立即數(shù)的高8 8位送入位送入DPHDPH,低,低8 8位送入位送入DPLDPL。 例如:例如:MOV DPTRMOV DPTR,#3FA6H#3FA6H 表示把表示把1616位二進(jìn)制表示的地址送給位
21、二進(jìn)制表示的地址送給DPTRDPTR寄存器。寄存器。2 2直接尋址方式直接尋址方式 直接尋址方式直接尋址方式是指操作數(shù)給出的是參與運(yùn)算的數(shù)的地址。是指操作數(shù)給出的是參與運(yùn)算的數(shù)的地址。在在MCS-51MCS-51單片機(jī)中,直接地址只能用來(lái)表示特殊功能寄存器、單片機(jī)中,直接地址只能用來(lái)表示特殊功能寄存器、內(nèi)部數(shù)據(jù)存儲(chǔ)器以及位地址空間。其中,特殊功能寄存器和內(nèi)部數(shù)據(jù)存儲(chǔ)器以及位地址空間。其中,特殊功能寄存器和位地址空間只能用直接尋址方式來(lái)訪問(wèn)。位地址空間只能用直接尋址方式來(lái)訪問(wèn)。 例如:例如:MOV AMOV A,3AH3AH 表示把內(nèi)部表示把內(nèi)部RAMRAM的的3AH3AH單元的內(nèi)容傳送到單元的
22、內(nèi)容傳送到A A。 尋址范圍:尋址范圍: (1) (1) 內(nèi)部?jī)?nèi)部RAMRAM的的128128個(gè)單元個(gè)單元(2) (2) 特殊功能寄存器。除了以單元地址的形式外特殊功能寄存器。除了以單元地址的形式外, ,還還可用寄可用寄存器符號(hào)存器符號(hào)的形式給出。例如:的形式給出。例如: MOV AMOV A,80H80H 與與 MOV AMOV A,P0P0是等價(jià)的是等價(jià)的。直接尋址是給出操作數(shù)的直接地址。直接尋址是給出操作數(shù)的直接地址。3 3寄存器尋址方式寄存器尋址方式 操作數(shù)在寄存器中操作數(shù)在寄存器中 MOV AMOV A,Rn Rn ;(;(RnRn)AA,n=0n=07 7 表示把寄存器表示把寄存器
23、RnRn的內(nèi)容傳送給累加器的內(nèi)容傳送給累加器A A 尋址范圍:尋址范圍:(1 1)4 4組通用工作寄存區(qū)共組通用工作寄存區(qū)共3232個(gè)工作寄存器。個(gè)工作寄存器。(2 2)部分特殊功能寄存器,例如)部分特殊功能寄存器,例如A A、B B 以及數(shù)據(jù)指針寄以及數(shù)據(jù)指針寄存器存器DPTRDPTR等。等。MOV A,R0 MOV A,R0 ; ;將將R0R0中的數(shù)據(jù)傳送至中的數(shù)據(jù)傳送至A A中中INC AINC AMUL ABMUL AB【例】【例】這些被尋址寄存器中的內(nèi)容就是操作數(shù)這些被尋址寄存器中的內(nèi)容就是操作數(shù)4. 4. 寄存器間接尋址方式寄存器間接尋址方式 寄存器中存放的是操作數(shù)的地址,寄存器中
24、存放的是操作數(shù)的地址,在寄存器前加在寄存器前加前綴標(biāo)志前綴標(biāo)志“” 。訪問(wèn)訪問(wèn)內(nèi)部?jī)?nèi)部RAMRAM或或外部外部RAMRAM的低的低256256個(gè)字節(jié)個(gè)字節(jié)時(shí),時(shí),只能采用只能采用R0R0或或R1R1作為作為間址寄存器間址寄存器。例如:。例如: MOV AMOV A,RiRi ;i=0i=0或或1 1 其中其中RiRi中的內(nèi)容為中的內(nèi)容為40H40H,把內(nèi)部,把內(nèi)部RAM40HRAM40H單元內(nèi)容送單元內(nèi)容送A A。尋址范圍:尋址范圍:(1 1)訪問(wèn)訪問(wèn)內(nèi)部?jī)?nèi)部RAMRAM低低128128個(gè)個(gè)單元,其通用形式為單元,其通用形式為RiRi(2 2)對(duì)對(duì)外部?jī)?nèi)部外部?jī)?nèi)部RAMRAM的的64K64K字
25、節(jié)字節(jié)的間接尋址,例如:的間接尋址,例如: MOVX AMOVX A,DPTRDPTR(3 3)片外數(shù)據(jù)存儲(chǔ)器的低片外數(shù)據(jù)存儲(chǔ)器的低256256字節(jié)字節(jié) 例如:例如:MOVX AMOVX A,RiRi(4 4)堆棧區(qū)堆棧區(qū) 堆棧操作指令堆棧操作指令PUSHPUSH(壓棧)和(壓棧)和POPPOP(出棧)使用堆棧指針(出棧)使用堆棧指針(SPSP)作間址寄存器)作間址寄存器5 5基址寄存器加變址寄存器間址尋址方式基址寄存器加變址寄存器間址尋址方式 以以1616位寄存器位寄存器DPTRDPTR(或(或PCPC)作為基址寄存器,累加器作)作為基址寄存器,累加器作為變址寄存器。變址時(shí),把兩者的內(nèi)容相加
26、,得到的結(jié)果作為變址寄存器。變址時(shí),把兩者的內(nèi)容相加,得到的結(jié)果作為操作數(shù)的地址。這種方式常用于查表操作。為操作數(shù)的地址。這種方式常用于查表操作。 例如:例如: 1 1)以程序計(jì)數(shù)器當(dāng)前值為基址)以程序計(jì)數(shù)器當(dāng)前值為基址 格式:格式:MOVC AMOVC A,A+PCA+PC 2 2)以數(shù)據(jù)指針)以數(shù)據(jù)指針DPTRDPTR為基址為基址 格式:格式:MOVC AMOVC A,A+DPTRA+DPTR 如:其中如:其中A A的原有內(nèi)容為的原有內(nèi)容為05H05H,DPTRDPTR的內(nèi)容為的內(nèi)容為0400H0400H,該指令,該指令執(zhí)行的結(jié)果是把程序存儲(chǔ)器執(zhí)行的結(jié)果是把程序存儲(chǔ)器0405H0405H單
27、元的內(nèi)容傳送給單元的內(nèi)容傳送給A A。說(shuō)明:說(shuō)明: (1 1)本尋址方式是)本尋址方式是專門針對(duì)程序存儲(chǔ)器專門針對(duì)程序存儲(chǔ)器的尋址方式,尋址范的尋址方式,尋址范圍可達(dá)到圍可達(dá)到64KB64KB。(2 2)本尋址方式的指令只有本尋址方式的指令只有3 3條條:MOVC AMOVC A,A+DPTRA+DPTRMOVC AMOVC A,A+PCA+PCJMP A+DPTRJMP A+DPTR 6 6相對(duì)尋址方式相對(duì)尋址方式 在相對(duì)尋址的轉(zhuǎn)移指令中,給出了地址偏移量,以在相對(duì)尋址的轉(zhuǎn)移指令中,給出了地址偏移量,以“relrel”表表示,即把示,即把PCPC的當(dāng)前值加上偏移量就構(gòu)成了程序轉(zhuǎn)移的目的地址:
28、的當(dāng)前值加上偏移量就構(gòu)成了程序轉(zhuǎn)移的目的地址: 目的地址目的地址= =轉(zhuǎn)移指令所在的地址轉(zhuǎn)移指令所在的地址 + + 轉(zhuǎn)移指令的字節(jié)數(shù)轉(zhuǎn)移指令的字節(jié)數(shù) + + relrel 偏移量偏移量relrel是一帶符號(hào)的是一帶符號(hào)的8 8位二進(jìn)制數(shù)補(bǔ)碼數(shù)位二進(jìn)制數(shù)補(bǔ)碼數(shù)。 范圍是:范圍是:128 +127128 +127 向向地址增加方向地址增加方向最大可轉(zhuǎn)移(最大可轉(zhuǎn)移(127+127+轉(zhuǎn)移指令字節(jié))個(gè)單元地址,轉(zhuǎn)移指令字節(jié))個(gè)單元地址, 向向地址減少方向地址減少方向最大可轉(zhuǎn)移(最大可轉(zhuǎn)移(128-128-轉(zhuǎn)移指令字節(jié))個(gè)單元地址。轉(zhuǎn)移指令字節(jié))個(gè)單元地址。 注意:注意:1 1)“當(dāng)前當(dāng)前PCPC值值”
29、指程序中下一條指令所在的首地址,是一指程序中下一條指令所在的首地址,是一個(gè)個(gè)1616位數(shù);位數(shù);2 2)符號(hào))符號(hào)“rel”rel”表示表示“偏移量偏移量”, ,是一個(gè)帶符號(hào)的單字節(jié)數(shù)是一個(gè)帶符號(hào)的單字節(jié)數(shù), ,范圍是范圍是:-128+127(80H7FH):-128+127(80H7FH)在實(shí)際編程中,在實(shí)際編程中,“rel” rel” 通常用標(biāo)號(hào)代替通常用標(biāo)號(hào)代替例:例:2000H:SJMP 08H ;在實(shí)際編程中,在實(shí)際編程中,“rel” rel” 通常用標(biāo)號(hào)代替通常用標(biāo)號(hào)代替例:例:SJMP LOOP1SJMP LOOP1例:例:2000H2000H:SJMP 08HSJMP 08H
30、; 原原PCPC值為值為2000H2000H;執(zhí)行這條指令后的當(dāng)前;執(zhí)行這條指令后的當(dāng)前PCPC值為值為2002H2002H,relrel為為08H08H。2002H+08H=200AH2002H+08H=200AH,轉(zhuǎn)移目的地址為,轉(zhuǎn)移目的地址為200AH200AH,程,程序就跳轉(zhuǎn)至序就跳轉(zhuǎn)至200AH200AH去執(zhí)行了。去執(zhí)行了。右圖為右圖為SJMP 08HSJMP 08H相對(duì)尋址相對(duì)尋址示意圖。示意圖。;將位地址;將位地址07H(07H(字節(jié)字節(jié)地址地址20H20H中最高位中最高位) )中的數(shù)據(jù)傳送至進(jìn)中的數(shù)據(jù)傳送至進(jìn)位位位位CyCy。 7. 7. 位尋址方式位尋址方式 位尋址是對(duì)內(nèi)位尋
31、址是對(duì)內(nèi)RAMRAM和特殊功能寄存器中的可尋址位和特殊功能寄存器中的可尋址位進(jìn)行操作的尋址方式。進(jìn)行操作的尋址方式。指令中直接給出了操作數(shù)所在指令中直接給出了操作數(shù)所在的位地址。的位地址。例:例: 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)位地址里的數(shù)據(jù)只可能是一個(gè))位地址里的數(shù)據(jù)只可能是一個(gè) 0 0 或或 1 1 2 2)有的位地址十分明確
32、)有的位地址十分明確, ,如如 P1.0, ACC.7P1.0, ACC.7等等, ,有的位地址有的位地址則則“不太明確不太明確”,如:,如: MOV AMOV A,17H ; (A)(17H),17H17H ; (A)(17H),17H是是字節(jié)地址字節(jié)地址 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單片機(jī)指令系統(tǒng)單片機(jī)指令系統(tǒng) 111111條指令條指令,按功
33、能分類,可分為下面,按功能分類,可分為下面5 5大類大類: (1 1)數(shù)據(jù)傳送類)數(shù)據(jù)傳送類(29(29條條) ) (2 2)算術(shù)操作類)算術(shù)操作類(24(24條條 (3 3)邏輯運(yùn)算類)邏輯運(yùn)算類(24(24條條) ) (4 4)控制轉(zhuǎn)移類)控制轉(zhuǎn)移類(17(17條條) ) (5 5)位操作類)位操作類(17(17條條) ) 這這5大類指令,基本大類指令,基本實(shí)現(xiàn)單片機(jī)無(wú)所不能的實(shí)現(xiàn)單片機(jī)無(wú)所不能的功能!功能!指令中符號(hào)的意義指令中符號(hào)的意義: :Rn Rn 當(dāng)前寄存器區(qū)的當(dāng)前寄存器區(qū)的8 8個(gè)工作寄存器個(gè)工作寄存器R0R0R7(n=0R7(n=0 7)7)。Ri Ri 當(dāng)前寄存器區(qū)中可作間
34、接尋址寄存器的當(dāng)前寄存器區(qū)中可作間接尋址寄存器的2 2個(gè)寄存?zhèn)€寄存 器器R0R0、R1(i=0,1)R1(i=0,1)。DirectDirect 直接地址,即直接地址,即8 8位的內(nèi)部位的內(nèi)部RAMRAM或特殊功能寄存或特殊功能寄存 器的器的字節(jié)字節(jié)地址。地址。#data#data 包含在包含在指令中的指令中的8 8位立即數(shù)位立即數(shù)。#data16#data16 包含在包含在指令中的指令中的1616位立即數(shù)位立即數(shù)。relrel 相對(duì)轉(zhuǎn)移指令中的偏移量,為相對(duì)轉(zhuǎn)移指令中的偏移量,為8 8位的帶符號(hào)補(bǔ)位的帶符號(hào)補(bǔ) 碼數(shù)。碼數(shù)。DPTRDPTR 數(shù)據(jù)指針數(shù)據(jù)指針,可用作,可用作1616位的數(shù)據(jù)地址
35、寄存器。位的數(shù)據(jù)地址寄存器。bitbit 內(nèi)部?jī)?nèi)部RAMRAM或特殊功能寄存器中的或特殊功能寄存器中的直接尋址位直接尋址位。C C(或(或CyCy) 進(jìn)位標(biāo)志位或位處理機(jī)中的累加器。進(jìn)位標(biāo)志位或位處理機(jī)中的累加器。addr11addr11 1111位目的地址位目的地址addr16addr16 1616位目的地址位目的地址 間接尋址寄存器前綴,如間接尋址寄存器前綴,如RiRi,A+DPTRA+DPTR(X)(X) X X中的內(nèi)容中的內(nèi)容。(X)(X) 由由X X尋址的單元中的內(nèi)容尋址的單元中的內(nèi)容。 箭頭右邊的內(nèi)容被箭頭左邊的內(nèi)容所取代。箭頭右邊的內(nèi)容被箭頭左邊的內(nèi)容所取代。3.3.1 3.3.
36、1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 使用最頻繁使用最頻繁的一類指令的一類指令, ,通用格式:通用格式: MOV MOV , 屬屬“復(fù)制復(fù)制” ” ,而,而不是不是“搬家搬家”數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令不影響標(biāo)志位不影響標(biāo)志位:CyCy、AcAc和和OVOV,影響奇偶標(biāo)志位影響奇偶標(biāo)志位P P。 1 1以累加器為目的操作數(shù)的指令以累加器為目的操作數(shù)的指令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 ; 立即數(shù)立即數(shù)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為目的操作數(shù)的指令
38、為目的操作數(shù)的指令 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 功能:是把源操作數(shù)的內(nèi)容送入當(dāng)前一組工作寄存器區(qū)的功能:是把源操作數(shù)的內(nèi)容送入當(dāng)前一組工作寄存器區(qū)的R0R0R7R7中的某一個(gè)寄存器。中的某一個(gè)寄存器。3.3.以直接地址為目的操作數(shù)的指令以直接地址為目的操作數(shù)的指令 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 功能:功能:把源操作數(shù)送入直接地址指出的存儲(chǔ)單元。把源操作數(shù)送入直接地址指出的存儲(chǔ)單元。directdir
40、ect指指的是內(nèi)部的是內(nèi)部RAMRAM或或SFRSFR的地址。的地址。4.4.以間接操作地址為目的操作數(shù)的指令以間接操作地址為目的操作數(shù)的指令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位數(shù)目標(biāo)地址傳送指令位數(shù)目標(biāo)地址傳送指令 MOV DPTR,#data16 ; #data16DPTRMOV DPTR,#data16 ; #dat
41、a16DPTR 唯一的唯一的1616位數(shù)據(jù)的傳送指令位數(shù)據(jù)的傳送指令 , ,立即數(shù)的立即數(shù)的高高8 8位位送入送入DPHDPH,立即數(shù)的,立即數(shù)的低低8 8位位送入送入DPLDPL。6 6堆棧操作指令堆棧操作指令 MCS-51MCS-51內(nèi)部?jī)?nèi)部RAMRAM中可以設(shè)定一個(gè)中可以設(shè)定一個(gè)后進(jìn)先出后進(jìn)先出(LIFO-Last LIFO-Last In First OutIn First Out)的區(qū)域稱作)的區(qū)域稱作堆棧堆棧. . 堆棧指針堆棧指針SPSP指出指出堆棧的堆棧的棧頂位置棧頂位置。(1)(1)進(jìn)棧指令進(jìn)棧指令 PUSH directPUSH direct 其功能是首先將堆棧指針其功能是
42、首先將堆棧指針SPSP的內(nèi)容加的內(nèi)容加1 1,指向空單元;,指向空單元;然后將直接尋址單元中的數(shù)據(jù)壓入到然后將直接尋址單元中的數(shù)據(jù)壓入到SPSP所指示的單元中,所指示的單元中,此時(shí),此時(shí),SPSP的內(nèi)容就是新的棧頂。的內(nèi)容就是新的棧頂。(2)(2)出棧指令出棧指令 POP directPOP direct 其功能與其功能與PUSHPUSH的相反,即首先將棧頂?shù)南喾?,即首先將棧頂SPSP所指示的單元內(nèi)所指示的單元內(nèi)容彈出到直接尋址單元中,然后將容彈出到直接尋址單元中,然后將SPSP的內(nèi)容減的內(nèi)容減1 1,此時(shí),此時(shí)SPSP指指向新的棧頂。向新的棧頂。 例如,例如,設(shè)設(shè)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例如,例如,設(shè)片內(nèi)設(shè)片內(nèi)RAMRAM(30H30H)=X=X,(,(40H40H)=Y=Y,通過(guò)堆棧操作實(shí)現(xiàn),通過(guò)堆棧操作實(shí)現(xiàn)兩單元內(nèi)容互相交換,程序如下:兩單元內(nèi)容互相交換,程序如下:MOV SP, #1FHMOV SP, #1FHPUSH 30HPUSH 30HPUSH 40HPUSH 40HPOP 30HPOP 30HPO
44、P 40HPOP 40H程序執(zhí)行結(jié)果:(程序執(zhí)行結(jié)果:(30H30H)=Y=Y,(,(40H40H)=X=X。7.7.查表指令查表指令 共兩條,用于讀程序存儲(chǔ)器中的數(shù)據(jù)表格的指令,均采用基址寄存器共兩條,用于讀程序存儲(chǔ)器中的數(shù)據(jù)表格的指令,均采用基址寄存器加變址寄存器間接尋址方式。加變址寄存器間接尋址方式。 (1) MOVC A,A+PC(1) MOVC A,A+PC ; ; ;PC+1PC,(A+PC)A;PC+1PC,(A+PC)A以以PCPC作基址寄存器作基址寄存器,A A的內(nèi)容的內(nèi)容作為無(wú)符號(hào)整數(shù)和作為無(wú)符號(hào)整數(shù)和PCPC中的內(nèi)容(下一條中的內(nèi)容(下一條指令的起始地址)指令的起始地址)
45、相加后得到一個(gè)相加后得到一個(gè)1616位的地址,位的地址,該地址指出的程序該地址指出的程序存儲(chǔ)單元的內(nèi)容送到累加器存儲(chǔ)單元的內(nèi)容送到累加器A A。注意:注意:PSENPSEN* *信號(hào)有效信號(hào)有效。例如例如: : (A)=30H, (A)=30H,執(zhí)行地址執(zhí)行地址1000H1000H處的指令處的指令 1000H1000H: MOVC A,A+PCMOVC A,A+PC 本指令占用一個(gè)字節(jié),執(zhí)行結(jié)果將程序存儲(chǔ)器中本指令占用一個(gè)字節(jié),執(zhí)行結(jié)果將程序存儲(chǔ)器中1031H1031H的內(nèi)容送入的內(nèi)容送入A A。優(yōu)點(diǎn):優(yōu)點(diǎn):不改變特殊功能寄存器及不改變特殊功能寄存器及PCPC的狀態(tài),根據(jù)的狀態(tài),根據(jù)A A的內(nèi)
46、容就可以取出的內(nèi)容就可以取出表格中的常數(shù)。表格中的常數(shù)。缺點(diǎn):缺點(diǎn):表格只能存放表格只能存放在該條查表指令后面在該條查表指令后面的的256256個(gè)個(gè)單元之內(nèi)單元之內(nèi),表格的,表格的大小受到限制,且表格只能被一段程序所利用。大小受到限制,且表格只能被一段程序所利用。(2) MOVC A,A+DPTR ; (2) MOVC A,A+DPTR ; ;(A+DPTR)A;(A+DPTR)A以以DPTRDPTR作為基址寄存器,作為基址寄存器,A A的內(nèi)容作為無(wú)符號(hào)數(shù)和的內(nèi)容作為無(wú)符號(hào)數(shù)和DPTRDPTR的內(nèi)容的內(nèi)容相加得到一個(gè)相加得到一個(gè)1616位的地址,把由該地址指出的程序存儲(chǔ)器單位的地址,把由該地址
47、指出的程序存儲(chǔ)器單元的內(nèi)容送到累加器元的內(nèi)容送到累加器A. A. 例如例如:(DPTR)=8100H (A)=40H (DPTR)=8100H (A)=40H 執(zhí)行指令執(zhí)行指令 MOVC A,A+DPTRMOVC A,A+DPTR 本指令的本指令的執(zhí)行結(jié)果執(zhí)行結(jié)果只和指針只和指針DPTRDPTR及累加器及累加器A A的內(nèi)容有關(guān),與該的內(nèi)容有關(guān),與該指令存放的地址及常數(shù)表格存放的地址無(wú)關(guān),指令存放的地址及常數(shù)表格存放的地址無(wú)關(guān),因此表格的大因此表格的大小和位置可以在小和位置可以在64K64K程序存儲(chǔ)器中任意安排程序存儲(chǔ)器中任意安排,一個(gè)表格,一個(gè)表格可為可為各個(gè)程序塊公用。各個(gè)程序塊公用。兩條指
48、令是在兩條指令是在MOVMOV的后面加的后面加C C,“C”C”是是CODECODE的第一個(gè)字母,即的第一個(gè)字母,即代碼的意思。代碼的意思?!纠俊纠?已知已知ROMROM中存有中存有0909的平方表,首地址為的平方表,首地址為2000H2000H,試根,試根據(jù)累加器據(jù)累加器A A中的數(shù)值查找對(duì)應(yīng)的平方值,存入內(nèi)中的數(shù)值查找對(duì)應(yīng)的平方值,存入內(nèi)RAM 30HRAM 30H。( (設(shè)設(shè)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(設(shè)設(shè)A=3)A=3), ;A=(2003H)=09HA=(2003H)=09H MOV 30H MOV 30H,A A ;平方值存入內(nèi);平方值存入內(nèi)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與外部數(shù)據(jù)存儲(chǔ)器傳送指令與外部數(shù)據(jù)存儲(chǔ)器傳送指令 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存儲(chǔ)器或存儲(chǔ)器或I/OI/O中的一個(gè)字節(jié),或把中的一個(gè)字節(jié),或把A A中一個(gè)字節(jié)中一個(gè)字節(jié)的數(shù)據(jù)寫到外部的數(shù)據(jù)寫到外部RAMRAM存儲(chǔ)器或存儲(chǔ)器或I/OI/O中。中。 注意:伴隨著注意:伴隨著RDRD* *或或WRWR* *信號(hào)有效。信號(hào)有效。采用采用DPTRDPTR間接尋址,間接尋址,高高8 8位地址(位地址(DPHDPH)由)由P2P2口輸出,低口輸出,低8 8位地址位地址(DPLDPL)由)由P0P0口輸出??谳敵觥2捎貌捎肦iRi(i=
52、0,1i=0,1)間接尋址)間接尋址,可尋址片外,可尋址片外RAMRAM的的256256個(gè)單元。個(gè)單元。RiRi內(nèi)內(nèi)容由容由P0P0口輸出??谳敵?。MOVMOV后后 “X”X”表示單片機(jī)訪問(wèn)的是片外表示單片機(jī)訪問(wèn)的是片外RAMRAM存儲(chǔ)器或存儲(chǔ)器或I/OI/O。內(nèi)內(nèi)RAMRAM( (包括特殊功能寄存器包括特殊功能寄存器): ): 用用MOVMOV指令傳送;指令傳送;外外RAM: RAM: 用用MOVXMOVX指令傳送;指令傳送;ROM: ROM: 用用MOVCMOVC指令傳送。指令傳送。 三個(gè)不同的存儲(chǔ)空間用三種不同的指令傳送:三個(gè)不同的存儲(chǔ)空間用三種不同的指令傳送:【例】【例】 按下列要求傳
53、送數(shù)據(jù):設(shè)按下列要求傳送數(shù)據(jù):設(shè)ROM(2000H)=ABHROM(2000H)=ABH (1)ROM 2000H (1)ROM 2000H單元數(shù)據(jù)送內(nèi)單元數(shù)據(jù)送內(nèi)RAM 10HRAM 10H單元;單元; (2)R0M 2000H(2)R0M 2000H單元數(shù)據(jù)送外單元數(shù)據(jù)送外RAM 80HRAM 80H單元;單元; (3)ROM 2000H(3)ROM 2000H單元數(shù)據(jù)送外單元數(shù)據(jù)送外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 ;存內(nèi)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)字節(jié)交換指令)字節(jié)交換指令 XCH A,RnXCH A,Rn XCH A,directXCH A,direct XCH A,RiXCH A,Ri例如例如,已知,已知R0=15HR0=15H,A=46HA=46H,(,(15H15H)=50H=50H, 執(zhí)行指令執(zhí)行指令XCH AXCH A,R0R0程序執(zhí)行的結(jié)果:程序執(zhí)行的結(jié)果:A=50HA=50H,(15H15H)=46H=46H
56、。 執(zhí)行下列指令:執(zhí)行下列指令: 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)半字節(jié)交換指令)半字節(jié)交換指令 XCHD A,RiXCHD A,Ri 累加器的低累加器的低4 4位與內(nèi)部位與內(nèi)部RAMRAM低低4 4位交換。例如:位交換。例如:例如,已知例如,已知R0=20HR0=20H,A=5AHA=5AH,片內(nèi),片內(nèi)RAMRAM(20H20H)=46H=46H, 執(zhí)行指令執(zhí)行指令
57、XCHD AXCHD A,R0R0程序執(zhí)行結(jié)果:程序執(zhí)行結(jié)果:A=56HA=56H,(,(20H20H)=4AH=4AH。(3 3)累加器)累加器A A的高的高4 4位與低位與低4 4位內(nèi)容互換指令位內(nèi)容互換指令 SWAP SWAP A A ; A.3; A.3A.0A.0 A.7 A.7A.4A.4該指令的功能是,將該指令的功能是,將A A的高、低兩個(gè)半字節(jié)相互交換的高、低兩個(gè)半字節(jié)相互交換3.3.2 3.3.2 算術(shù)操作類指令算術(shù)操作類指令 單字節(jié)的加、減、乘、除法指令,都是針對(duì)單字節(jié)的加、減、乘、除法指令,都是針對(duì)8 8位二進(jìn)制無(wú)符位二進(jìn)制無(wú)符號(hào)數(shù)。執(zhí)行的結(jié)果對(duì)號(hào)數(shù)。執(zhí)行的結(jié)果對(duì)CyCy
58、、AcAc、OVOV 三種標(biāo)志位有影響。三種標(biāo)志位有影響。但增但增1 1和減和減1 1指令不影響上述標(biāo)志。指令不影響上述標(biāo)志。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 一個(gè)加數(shù)總是
59、來(lái)自累加器一個(gè)加數(shù)總是來(lái)自累加器A A,而另一個(gè)加數(shù)可由不同,而另一個(gè)加數(shù)可由不同的尋址方式得到。結(jié)果總是放在的尋址方式得到。結(jié)果總是放在A A中。中。使用加法指令時(shí),使用加法指令時(shí),要注意累加器要注意累加器A A中的運(yùn)算結(jié)果對(duì)各個(gè)標(biāo)志中的運(yùn)算結(jié)果對(duì)各個(gè)標(biāo)志位的影響:位的影響:(1 1)如果)如果位位7 7有進(jìn)位有進(jìn)位,則置,則置“1”1”進(jìn)位標(biāo)志進(jìn)位標(biāo)志CyCy,否則清,否則清“0”Cy0”Cy(2 2)如果)如果位位3 3有進(jìn)位有進(jìn)位,置,置“1”1”輔助進(jìn)位標(biāo)志輔助進(jìn)位標(biāo)志AcAc,否則清,否則清“0”Ac0”Ac(AcAc為為PSWPSW寄存器中的一位)寄存器中的一位)(3 3)如果位
60、如果位6 6有進(jìn)位,而位有進(jìn)位,而位7 7沒有進(jìn)位,或者位沒有進(jìn)位,或者位7 7有進(jìn)位,而有進(jìn)位,而位位6 6沒有,則溢出標(biāo)志位沒有,則溢出標(biāo)志位OVOV置置“1”1”,否則,否則OVOV清清“0” 0” 。溢出標(biāo)志位溢出標(biāo)志位OVOV的狀態(tài),只有在的狀態(tài),只有在帶符號(hào)數(shù)加法運(yùn)算帶符號(hào)數(shù)加法運(yùn)算時(shí)才有意義時(shí)才有意義。當(dāng)兩個(gè)帶符號(hào)數(shù)相加時(shí),當(dāng)兩個(gè)帶符號(hào)數(shù)相加時(shí),OV=1OV=1,表示加法運(yùn)算表示加法運(yùn)算超出了超出了累加累加器器A A所能表示的帶符號(hào)數(shù)的有效范圍。所能表示的帶符號(hào)數(shù)的有效范圍。 例例 (A)=53H(A)=53H,(R0)=FCH(R0)=FCH,執(zhí)行指令,執(zhí)行指令 ADD A,R
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物質(zhì)能發(fā)電的生物質(zhì)能發(fā)電新技術(shù)開發(fā)考核試卷
- 一年級(jí)口算練習(xí)題大全(1000題)
- 靜脈血液標(biāo)本采集指南 2
- 血液透析患者的護(hù)理
- 小學(xué)四年級(jí)語(yǔ)文詞語(yǔ)搭配練習(xí)題
- 江西省南昌二中、九江一中、新余一中、臨川一中八所重點(diǎn)中學(xué)2025屆高三下第二次診斷性考試數(shù)學(xué)試題含解析
- 新疆昌吉市教育共同體2025屆高中畢業(yè)班第一次模擬(生物試題理)試卷含解析
- 平頂山文化藝術(shù)職業(yè)學(xué)院《影視平面設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東省泰安市南關(guān)中學(xué)2024-2025學(xué)年中考數(shù)學(xué)試題考前三個(gè)月(江蘇專版)含解析
- 江西省宜春市豐城市豐城九中2025屆高三4月綜合測(cè)試生物試題理試題含解析
- 化學(xué)性及藥物性頜骨骨髓炎
- 神奇的植物王國(guó)課件
- 員工崗位技能考核評(píng)定表
- 人工氣道的護(hù)理劉亞課件
- 項(xiàng)目部安全生產(chǎn)事故應(yīng)急預(yù)案
- 垂體瘤-PPT課件
- 鉆井井控裝置
- 贛美版(江西)小學(xué)四年級(jí)美術(shù)下全冊(cè)教案
- 12隊(duì)淘汰賽_對(duì)陣表
- 我國(guó)城市馬拉松賽事發(fā)展現(xiàn)狀分析
- 貧困戶登記表入戶摸底調(diào)查表
評(píng)論
0/150
提交評(píng)論