MCS51指令系統(tǒng)_第1頁
MCS51指令系統(tǒng)_第2頁
MCS51指令系統(tǒng)_第3頁
MCS51指令系統(tǒng)_第4頁
MCS51指令系統(tǒng)_第5頁
已閱讀5頁,還剩87頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 MCS-51 指令系統(tǒng)l 本章要點(diǎn)本章要點(diǎn)l 本章難點(diǎn)本章難點(diǎn)l 指令系統(tǒng)指令系統(tǒng)l 指令指令是指計(jì)算機(jī)根據(jù)人們的要求來完成某項(xiàng)操作的命令是指計(jì)算機(jī)根據(jù)人們的要求來完成某項(xiàng)操作的命令 指令系統(tǒng)指令系統(tǒng)是指計(jì)算機(jī)所有命令的集合。是指計(jì)算機(jī)所有命令的集合。 計(jì)算機(jī)能直接識(shí)別的只能是由計(jì)算機(jī)能直接識(shí)別的只能是由0 0和和1 1編碼組成的指令,編碼組成的指令,也稱為也稱為機(jī)器語言指令機(jī)器語言指令。這種編碼稱為。這種編碼稱為機(jī)器碼機(jī)器碼。匯編語言指令:匯編語言指令:用指令符號(hào)描述的計(jì)算機(jī)語言指令。用指令符號(hào)描述的計(jì)算機(jī)語言指令。包含包含2 2個(gè)基本部分:個(gè)基本部分:操作碼和操作數(shù)操作碼和操作數(shù)。操作碼

2、:它規(guī)定了指令的功能;操作碼:它規(guī)定了指令的功能;操作數(shù):指令操作的對(duì)象,它指出了參與操作的數(shù)據(jù)來源操作數(shù):指令操作的對(duì)象,它指出了參與操作的數(shù)據(jù)來源和操作結(jié)果所存放的地址單元。和操作結(jié)果所存放的地址單元。PS:由二進(jìn)制編碼表示的機(jī)器語言指令不便于由二進(jìn)制編碼表示的機(jī)器語言指令不便于閱讀理解和記憶,因此在微機(jī)控制系統(tǒng)中采用匯閱讀理解和記憶,因此在微機(jī)控制系統(tǒng)中采用匯編語言指令來編寫程序。編語言指令來編寫程序。4.1 MCS-51單片機(jī)的匯編語言指令格式和符號(hào)簡介單片機(jī)的匯編語言指令格式和符號(hào)簡介 標(biāo)號(hào)標(biāo)號(hào)又稱為符號(hào)地址,是用戶設(shè)定的地址的符號(hào),代又稱為符號(hào)地址,是用戶設(shè)定的地址的符號(hào),代表該指

3、令表該指令第一個(gè)字節(jié)在存儲(chǔ)器中存放的地址第一個(gè)字節(jié)在存儲(chǔ)器中存放的地址。一般由。一般由1-6個(gè)字符組成,由字母和數(shù)字組成。必須用英文大寫個(gè)字符組成,由字母和數(shù)字組成。必須用英文大寫字母開始,如字母開始,如:START、LOOP1。2)操作碼助記符:操作碼助記符:由英文字母組成的字符串,它規(guī)定了由英文字母組成的字符串,它規(guī)定了指令的功能,是指令中唯一不能空缺的部分。如:指令的功能,是指令中唯一不能空缺的部分。如:MOV、ADD、ORL等。等。3)操作數(shù)操作數(shù) 操作數(shù)是指令操作的對(duì)象,它指出了參與操作操作數(shù)是指令操作的對(duì)象,它指出了參與操作的數(shù)據(jù)來源和操作結(jié)果存放的單元。的數(shù)據(jù)來源和操作結(jié)果存放的

4、單元。操作數(shù)可以是一個(gè)操作數(shù)可以是一個(gè)數(shù)數(shù)(立即數(shù)立即數(shù)),也可以是一個(gè)數(shù)所在的存儲(chǔ)單元地址。,也可以是一個(gè)數(shù)所在的存儲(chǔ)單元地址。操操作數(shù)最多有作數(shù)最多有3個(gè)。有個(gè)。有2個(gè)個(gè)4)注釋部分注釋部分 注釋是對(duì)該語句或程序段功能的解釋說明,注釋是對(duì)該語句或程序段功能的解釋說明,可有可無,單片機(jī)不執(zhí)行。以可有可無,單片機(jī)不執(zhí)行。以” ; ”開頭。開頭。主程序?qū)嶋H從主程序?qū)嶋H從2000H2000H開始存放,復(fù)位后,通過開始存放,復(fù)位后,通過跳轉(zhuǎn)指令跳轉(zhuǎn)指令LJMPLJMP轉(zhuǎn)移至轉(zhuǎn)移至2000H2000H開始執(zhí)行。開始執(zhí)行。 ORG 0000H LJMP START . . ORG 2000HSTART:

5、 CLR A ;寄存器單元內(nèi)容清零寄存器單元內(nèi)容清零 MOV A,#23HPS:匯編語言指令和機(jī)器語言指令一一對(duì)應(yīng),用匯匯編語言指令和機(jī)器語言指令一一對(duì)應(yīng),用匯編語言編寫的源程序單片機(jī)不能直接執(zhí)行,必須翻譯編語言編寫的源程序單片機(jī)不能直接執(zhí)行,必須翻譯成機(jī)器語言程序,成機(jī)器語言程序,這個(gè)翻譯過程稱為匯編這個(gè)翻譯過程稱為匯編。匯編有匯編有2種格式:手工匯編和機(jī)器匯編。種格式:手工匯編和機(jī)器匯編。手工匯編:編程人員把匯編語言指令通過查表指令表手工匯編:編程人員把匯編語言指令通過查表指令表逐條翻譯成機(jī)器語言指令。逐條翻譯成機(jī)器語言指令。機(jī)器匯編:用專門的匯編程序,在計(jì)算機(jī)上進(jìn)行翻譯。機(jī)器匯編:用專門

6、的匯編程序,在計(jì)算機(jī)上進(jìn)行翻譯。現(xiàn)在主要是使用機(jī)器匯編。現(xiàn)在主要是使用機(jī)器匯編。 MCS-51機(jī)器語言指令機(jī)器語言指令根據(jù)其指令編碼長短的不同有根據(jù)其指令編碼長短的不同有單字節(jié)指令、雙字節(jié)指令、三字節(jié)指令三種格式。單字節(jié)指令、雙字節(jié)指令、三字節(jié)指令三種格式。1、單字節(jié)指令、單字節(jié)指令 由由8位二進(jìn)制編碼表示,該指令在存儲(chǔ)器存放時(shí)需要位二進(jìn)制編碼表示,該指令在存儲(chǔ)器存放時(shí)需要占用占用1個(gè)存儲(chǔ)單元個(gè)存儲(chǔ)單元。有。有2種形式:種形式:1)8位全表示操作碼。例如空操作指令位全表示操作碼。例如空操作指令NOP,其機(jī)器碼,其機(jī)器碼為:為: 2)8位編碼中包含操作碼和寄存器編碼,例如:位編碼中包含操作碼和寄

7、存器編碼,例如: 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0NOP操作碼操作碼1 1 1 0 1 0001 1 1 0 1 000寄存器編碼寄存器編碼MOV A,R02、雙字節(jié)指令、雙字節(jié)指令 由由2個(gè)字節(jié)組成,該指令在存儲(chǔ)器存放時(shí)需要占用個(gè)字節(jié)組成,該指令在存儲(chǔ)器存放時(shí)需要占用2個(gè)存儲(chǔ)單元個(gè)存儲(chǔ)單元。例如:例如: MOV A,#85H0 1 1 1 0 1 0 00 1 1 1 0 1 0 0機(jī)器碼為機(jī)器碼為第第1字節(jié)字節(jié)第第2字節(jié)字節(jié)1 0 0 0 0 1 0 11 0 0 0 0 1 0 1操作碼操作碼74H 操作數(shù)操作數(shù)85H3、三字節(jié)指令、三字節(jié)指令 由由3個(gè)字節(jié)組

8、成,該指令在存儲(chǔ)器存放時(shí)需要占用個(gè)字節(jié)組成,該指令在存儲(chǔ)器存放時(shí)需要占用3個(gè)存儲(chǔ)單元個(gè)存儲(chǔ)單元。第。第1個(gè)字節(jié)為操作碼,后個(gè)字節(jié)為操作碼,后2個(gè)字節(jié)為操作數(shù)。個(gè)字節(jié)為操作數(shù)。例如:例如: MOV 78H,#80H0 1 1 1 0 1 0 10 1 1 1 0 1 0 1第第1字節(jié)字節(jié)第第2字節(jié)字節(jié)0 1 1 1 1 0 0 00 1 1 1 1 0 0 0操作碼操作碼75H 第第1 操作數(shù)操作數(shù)78H第第3字節(jié)字節(jié)1 0 0 0 0 0 0 01 0 0 0 0 0 0 0 第第2 操作數(shù)操作數(shù)80H總結(jié):總結(jié):由二進(jìn)制編碼表示的機(jī)器語言指令不便于由二進(jìn)制編碼表示的機(jī)器語言指令不便于閱讀理解

9、和記憶,因此在微機(jī)控制系統(tǒng)中采用匯閱讀理解和記憶,因此在微機(jī)控制系統(tǒng)中采用匯編語言指令來編寫程序。編語言指令來編寫程序。 數(shù)據(jù)的表示形式數(shù)據(jù)的表示形式(1)二進(jìn)制數(shù)形式二進(jìn)制數(shù)形式 末尾用字母末尾用字母B標(biāo)識(shí)標(biāo)識(shí),如如01011000B(2)十進(jìn)制數(shù)形式十進(jìn)制數(shù)形式 末尾用字母末尾用字母D標(biāo)識(shí)或不用任標(biāo)標(biāo)識(shí)或不用任標(biāo)識(shí)。如識(shí)。如78D、98(3)十六進(jìn)制數(shù)形式十六進(jìn)制數(shù)形式 末尾用字母末尾用字母H標(biāo)識(shí),標(biāo)識(shí),當(dāng)數(shù)據(jù)的當(dāng)數(shù)據(jù)的第一個(gè)數(shù)碼為字母時(shí),第一個(gè)數(shù)碼為字母時(shí),須在前面添加須在前面添加”0”,如如0AEH( (4)ASCII4)ASCII碼形式碼形式 用單引號(hào)括起來標(biāo)識(shí)用單引號(hào)括起來標(biāo)識(shí),如

10、如ABCABC 1) Rn: 表示當(dāng)前工作寄存器區(qū)中的表示當(dāng)前工作寄存器區(qū)中的8個(gè)通用寄存?zhèn)€通用寄存器器, n表示表示07, 即即R0R7, 當(dāng)前工作寄存器的當(dāng)前工作寄存器的選定是由選定是由PSW的的RS1和和RS0位決定的。位決定的。 2) Ri:當(dāng)前工作寄存器區(qū)中的當(dāng)前工作寄存器區(qū)中的2個(gè)通用寄存器個(gè)通用寄存器, i表示表示0或或1, 即即R0和和R1。 3) data: 表示立即數(shù)表示立即數(shù), data為為8位常數(shù)。位常數(shù)。 4) data16: 16位立即數(shù)。位立即數(shù)。 5) addr11: 11位目的地址。目的地址應(yīng)與下條位目的地址。目的地址應(yīng)與下條指令處于相同的指令處于相同的2 K

11、B程序存儲(chǔ)器地址空間范圍程序存儲(chǔ)器地址空間范圍內(nèi)內(nèi), 主要用于絕對(duì)轉(zhuǎn)移指令主要用于絕對(duì)轉(zhuǎn)移指令A(yù)JMP和子程序絕和子程序絕對(duì)調(diào)用指令對(duì)調(diào)用指令A(yù)CALL指令中。指令中。 2 指令中常用符號(hào)指令中常用符號(hào)6)addr16: 16位目的地址。位目的地址。 目的地址可在全部程目的地址可在全部程序存儲(chǔ)器的序存儲(chǔ)器的64 KB空間范圍內(nèi)空間范圍內(nèi), 主要用于無條件長轉(zhuǎn)主要用于無條件長轉(zhuǎn)移指令移指令LJMP和子程序長調(diào)用指令和子程序長調(diào)用指令LCALL中。中。7) direct: 8位內(nèi)部數(shù)據(jù)存儲(chǔ)器位內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM的單元地址的單元地址(00H7FH), 或特殊功能寄存器或特殊功能寄存器SFR的地址的

12、地址(80H0FFH)或地址符號(hào)。或地址符號(hào)。 8) rel: 以補(bǔ)碼形式表示的以補(bǔ)碼形式表示的8位偏移量位偏移量, 范圍為范圍為-128+127, 主要用于無條件相對(duì)短轉(zhuǎn)移指令主要用于無條件相對(duì)短轉(zhuǎn)移指令SJMP和所有的條件轉(zhuǎn)移指令中。和所有的條件轉(zhuǎn)移指令中。9) bit: 內(nèi)部數(shù)據(jù)存儲(chǔ)器內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM和特殊功能寄存器和特殊功能寄存器SFR中的可尋址位的位地址。中的可尋址位的位地址。10)C: 代表代表PSW中的進(jìn)位標(biāo)志位,也是單片機(jī)中中的進(jìn)位標(biāo)志位,也是單片機(jī)中位處理器的累加器。位處理器的累加器。11) (X) :表示括號(hào)內(nèi)表示括號(hào)內(nèi)X寄存器或寄存器或X地址單元中的內(nèi)容地址單元中的內(nèi)

13、容12) (X) :表示以某寄存器或地址單元中的內(nèi)容為地表示以某寄存器或地址單元中的內(nèi)容為地址的這個(gè)單元中的內(nèi)容。址的這個(gè)單元中的內(nèi)容。13) : 間接尋址方式中間址寄存器的標(biāo)志符號(hào)。間接尋址方式中間址寄存器的標(biāo)志符號(hào)。14) 將箭頭右邊的內(nèi)容傳遞給箭頭左邊的單元或寄存器將箭頭右邊的內(nèi)容傳遞給箭頭左邊的單元或寄存器15) 4.2 MCS-51單片機(jī)的尋址方式單片機(jī)的尋址方式 操作數(shù)是操作數(shù)是指令的重要組成部分,指出了參與操作的數(shù)據(jù)或指令的重要組成部分,指出了參與操作的數(shù)據(jù)或數(shù)據(jù)所在存儲(chǔ)單元的地址。數(shù)據(jù)所在存儲(chǔ)單元的地址。尋找操作數(shù)地址的方式稱為尋址方尋找操作數(shù)地址的方式稱為尋址方式。一條指令采

14、用什么樣的尋址方式,是由指令的功能決定的。式。一條指令采用什么樣的尋址方式,是由指令的功能決定的。尋址方式越多,指令功能就越強(qiáng)。尋址方式越多,指令功能就越強(qiáng)。 MCS-51指令系統(tǒng)共使用了指令系統(tǒng)共使用了7種尋址方式,包括種尋址方式,包括立即數(shù)尋立即數(shù)尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址、相址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址、相對(duì)尋址和位尋址。對(duì)尋址和位尋址。操作數(shù)在指令中直接以操作數(shù)在指令中直接以立即數(shù)立即數(shù)的形式給出。立即數(shù)可以是的形式給出。立即數(shù)可以是8位的位的,也可以是,也可以是16位的。前面加位的。前面加“#”來標(biāo)志。來標(biāo)志。例:例:MOV A,#70

15、H ; ;#表示立即數(shù)表示立即數(shù) 70H送入累加器中送入累加器中 ;70H A MOV DPTR,#8200H; #指令執(zhí)行后指令執(zhí)行后DPTR的內(nèi)容為的內(nèi)容為8200H ;8200H DPTR操作數(shù)的地址操作數(shù)的地址在指令中直接給出,直接尋址方式可訪問三種地在指令中直接給出,直接尋址方式可訪問三種地址空間。址空間。 的低的低MOV A,P1 ; (P1) A MOV A,70H ;(70H) A ,把,把70H單元中的數(shù)據(jù)送入單元中的數(shù)據(jù)送入AMOV C,00H ; 把位地址把位地址00H單元的的內(nèi)容送入單元的的內(nèi)容送入C中。中。將指定的某一寄存器的內(nèi)容為操作數(shù)。將指定的某一寄存器的內(nèi)容為操

16、作數(shù)。 3 寄存器尋址寄存器尋址MOV A , R0 ;A (R0) (R0)A結(jié)果(結(jié)果(A)=35H(A)=01H,(R0)=35H4 寄存器間接尋址寄存器間接尋址 指令所指定的寄存器中的內(nèi)容為操作數(shù)指令所指定的寄存器中的內(nèi)容為操作數(shù)的地址。的地址。工作寄存器工作寄存器R0、R1和專用寄存器和專用寄存器DPTR,在寄存器前加在寄存器前加“”符號(hào)表示間接尋址。符號(hào)表示間接尋址。 寄存器間接尋址的尋址空間為片內(nèi)和片寄存器間接尋址的尋址空間為片內(nèi)和片外的外的RAM。 片內(nèi)片內(nèi)RAM的寄存器間接尋址用寄存器的寄存器間接尋址用寄存器R0、R1。片外片外RAM的寄存器間接尋址有的寄存器間接尋址有2種形

17、式:種形式:一是采用一是采用R0、R1(8位的寄存器位的寄存器)作間址寄)作間址寄存器,這時(shí)存器,這時(shí)R0、R1提供低提供低8位地址,而高位地址,而高8位位地址則由地址則由P2口提供;二是采用口提供;二是采用16位的位的DPTR作間址寄存器。作間址寄存器。MOV A,R0 ;A (R0)MOV A,R0;A (R0)例如:例如:(R0)65H,(65H)26H如圖如圖3.2所示,所示,執(zhí)行結(jié)果(執(zhí)行結(jié)果(A)65H,執(zhí)行結(jié)果(執(zhí)行結(jié)果(A)26H。注意:是區(qū)別寄存器尋址的注意:是區(qū)別寄存器尋址的標(biāo)志。標(biāo)志。(R1)=00H,(P1)=20HMOVX A,R1 ; A (P2R1)MOVX A,

18、DPTR ; A (DPTR)26H片內(nèi)RAMA 65H 圖3.2 R065H把把DPTR中的內(nèi)容為地址的片外中的內(nèi)容為地址的片外RAM中的數(shù)據(jù)送中的數(shù)據(jù)送A訪問訪問 片內(nèi)片內(nèi)RAM訪問訪問 片外片外RAM5 變址尋址變址尋址 用來訪問程序寄存器的某個(gè)字用來訪問程序寄存器的某個(gè)字節(jié)單元。節(jié)單元。 以以DPTR和和PC作為基址寄存器,作為基址寄存器,累加器累加器A變址寄存器,兩者內(nèi)容之變址寄存器,兩者內(nèi)容之和為操作數(shù)的地址。和為操作數(shù)的地址。 (1)MOVCA,APC;A( (A)(PC) )(2)MOVCA,ADPTR ;A ( (A)(DPTR) ) 執(zhí)行第一條時(shí)先取指,將該指令取完后的執(zhí)行

19、第一條時(shí)先取指,將該指令取完后的PC值和累加器值和累加器A中的偏移量相加,作為操作數(shù)中的偏移量相加,作為操作數(shù)地址,從該地址中取出操作數(shù)送入地址,從該地址中取出操作數(shù)送入A中。第二中。第二條過程與第一條指令類似,例如:條過程與第一條指令類似,例如: MOVDPTR,2000H ;DPTR2000HMOVA,06H ;A06HMOVCA,ADPTR ;A34H程序存儲(chǔ)器A 圖3.4 DPTR20 06H0000H34H 2006H 00H A L U PC當(dāng)前值當(dāng)前值是是指該轉(zhuǎn)移指令的首地址指該轉(zhuǎn)移指令的首地址加上加上該指令的字該指令的字節(jié)數(shù)節(jié)數(shù),也就是下一條指令在存儲(chǔ)器中的的首地址。,也就是下

20、一條指令在存儲(chǔ)器中的的首地址。 程序存儲(chǔ)器圖3-3 指令過程 PC當(dāng)前值當(dāng)前值 26H0000H2000H2001H 80H 26H 2028H02H 20H A L U2002Hrel MCS-51的指令系統(tǒng)中共有的指令系統(tǒng)中共有111條指令,條指令,具有指令執(zhí)具有指令執(zhí)行時(shí)間短,指令字節(jié)數(shù)少,位操作指令豐富的特點(diǎn)。行時(shí)間短,指令字節(jié)數(shù)少,位操作指令豐富的特點(diǎn)。字節(jié)數(shù)字節(jié)數(shù)執(zhí)行的時(shí)間執(zhí)行的時(shí)間單字節(jié)指令移類單字節(jié)指令移類49條條1個(gè)機(jī)器周期指令個(gè)機(jī)器周期指令64條條雙字節(jié)指令雙字節(jié)指令45條條2個(gè)機(jī)器周期指令個(gè)機(jī)器周期指令45條條三字節(jié)指令三字節(jié)指令17條條4個(gè)機(jī)器周期指令個(gè)機(jī)器周期指令2條

21、條按指令功能分類:按指令功能分類: 數(shù)據(jù)傳送類數(shù)據(jù)傳送類29條;算術(shù)運(yùn)算類條;算術(shù)運(yùn)算類24條;條; 邏輯運(yùn)算類邏輯運(yùn)算類24條;控制轉(zhuǎn)移類條;控制轉(zhuǎn)移類17條;條; 位操作類位操作類17條條3.3 指令系統(tǒng)指令系統(tǒng)數(shù)據(jù)傳送類指令共數(shù)據(jù)傳送類指令共29條條, 它是指令系統(tǒng)中最活躍、它是指令系統(tǒng)中最活躍、 使用最多的一類指令。使用最多的一類指令。 一般的操作是把源操作數(shù)傳一般的操作是把源操作數(shù)傳送到目的操作數(shù)送到目的操作數(shù), 即指令執(zhí)行后目的操作數(shù)改為源即指令執(zhí)行后目的操作數(shù)改為源操作數(shù)操作數(shù), 而源操作數(shù)保持不變。而源操作數(shù)保持不變。3.3.1通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令1. 數(shù)據(jù)傳送到累

22、加器數(shù)據(jù)傳送到累加器A的指令的指令這組指令的功能是:這組指令的功能是:把源操作數(shù)指定的內(nèi)容送入累加器把源操作數(shù)指定的內(nèi)容送入累加器A。MOV A, R5 ; (A)=3DHMOV A,78H ; (A)=0A2HMOV A,R0 ; (A)=20HMOV A, 78H ; (A)=78H例如:(例如:(A)=80H,(R0)=10H,(10H)=20H,(R5)=3DH,(78H)=0A2H(Rn) A(Ri) A(direct) A#data A(R5) A(78H) A(R0) A#78H A2. 數(shù)據(jù)傳送到工作寄存器數(shù)據(jù)傳送到工作寄存器Rn的指令的指令指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 執(zhí)

23、行周期執(zhí)行周期 這組指令的功能是這組指令的功能是: 把源操作數(shù)的內(nèi)容送入當(dāng)前工作寄把源操作數(shù)的內(nèi)容送入當(dāng)前工作寄存器區(qū)的存器區(qū)的R0R7中的某一個(gè)寄存器中的某一個(gè)寄存器。Rn ( A)Rn ( direct)Rn #data3. 以直接地址以直接地址direct為目的操作數(shù)的傳送指令為目的操作數(shù)的傳送指令指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 執(zhí)行周期執(zhí)行周期這組指令的功能是:這組指令的功能是:把源操作數(shù)的內(nèi)容送入直接地址把源操作數(shù)的內(nèi)容送入直接地址單元單元direct。指令中的直接地址指令中的直接地址direct是指片內(nèi)是指片內(nèi)RAM單單元元00H7FH區(qū)域和特殊功能寄存器。區(qū)域和特殊功能寄存器。

24、例例direct ( A)direct ( Rn)direct 1 ( direct) direct (( Ri))direct #data 4. 以寄存器間接地址以寄存器間接地址Ri為目的操作數(shù)的傳送指令為目的操作數(shù)的傳送指令 這類指令的功能是將源操作數(shù)的內(nèi)容送到這類指令的功能是將源操作數(shù)的內(nèi)容送到R0或或R1的內(nèi)容所的內(nèi)容所指定的地址單元中。指定的地址單元中。指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 執(zhí)行周期執(zhí)行周期例例(Ri) (A)(Ri) (direct)(Ri) #data5. 以以DPTR為目的操作數(shù)的傳送指令為目的操作數(shù)的傳送指令 這組指令的功能是這組指令的功能是:把:把16位立即數(shù)送

25、入位立即數(shù)送入DPTR。16位的數(shù)位的數(shù)據(jù)指針寄存器據(jù)指針寄存器DPTR由由DPH和和DPL組成,組成,16位立即數(shù)的高位立即數(shù)的高8位送位送DPH,低低8位送入位送入DPL中。中。 以上是以以上是以MOV為指令助記符的內(nèi)部數(shù)據(jù)傳送指令,當(dāng)內(nèi)為指令助記符的內(nèi)部數(shù)據(jù)傳送指令,當(dāng)內(nèi)部部RAM不夠用時(shí),可對(duì)系統(tǒng)擴(kuò)展外部不夠用時(shí),可對(duì)系統(tǒng)擴(kuò)展外部RAM,這時(shí)就會(huì)用到下,這時(shí)就會(huì)用到下面介紹的訪問外部面介紹的訪問外部RAM的指令。的指令。 DPTR #data16 4.3.2 片外片外RAM(或或I/O口口)與累加器與累加器A傳送數(shù)據(jù)指令(傳送數(shù)據(jù)指令(MOVX) 訪問片外訪問片外RAM只能用以上只能用

26、以上4條指令,(條指令,(1)當(dāng)用)當(dāng)用R0或或R1作寄作寄存器間接尋址時(shí),低存器間接尋址時(shí),低8位地址由寄存器位地址由寄存器R0或或R1提供,若擴(kuò)展外部提供,若擴(kuò)展外部RAM時(shí)時(shí),可由可由P2口提供高口提供高8位地址。(位地址。(2)用)用DPTR(16位位)作間接作間接尋址的寄存器時(shí),片外尋址的寄存器時(shí),片外RAM的尋址范圍可達(dá)的尋址范圍可達(dá)64KB。例如。例如(P2)=20H,要將要將A中的內(nèi)容存儲(chǔ)到片外中的內(nèi)容存儲(chǔ)到片外RAM中的中的20FFH單單元中去元中去. MOV R0,#0FFH MOV DPTR,#20FFHMOVX R0,A MOV DPTR,A 指令指令 功能功能 字節(jié)數(shù)

27、字節(jié)數(shù) 執(zhí)行周期執(zhí)行周期A (Ri)A (DPTR) (Ri) (A ) (DPTR) (A ) 4.3.3. 程序存儲(chǔ)器向累加器程序存儲(chǔ)器向累加器A傳送數(shù)據(jù)指令傳送數(shù)據(jù)指令 這是唯一的這是唯一的2條讀片內(nèi)或片外條讀片內(nèi)或片外ROM的指令的指令,適合查閱,適合查閱ROM中已建立的數(shù)據(jù)表格,所以中已建立的數(shù)據(jù)表格,所以也稱為查表指令也稱為查表指令。 功能:以數(shù)據(jù)指針寄存器功能:以數(shù)據(jù)指針寄存器DPTR的內(nèi)容或程序計(jì)數(shù)器的內(nèi)容或程序計(jì)數(shù)器PC的當(dāng)前的當(dāng)前值作為值作為基地址基地址,以累加器,以累加器A的內(nèi)容為的內(nèi)容為偏移量偏移量,兩者相加形成,兩者相加形成16位位地址,將該地址,將該16位地址所指的

28、程序存儲(chǔ)器的內(nèi)容送入累加器位地址所指的程序存儲(chǔ)器的內(nèi)容送入累加器A中。中。指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 執(zhí)行周期執(zhí)行周期 例例 這是兩條很有用的查表指令這是兩條很有用的查表指令, 可用來查找存放在外部程序可用來查找存放在外部程序存儲(chǔ)器中的常數(shù)表格。存儲(chǔ)器中的常數(shù)表格。注意以下兩點(diǎn)。注意以下兩點(diǎn)。 1) 第第1條指令是以條指令是以DPTR作為基址寄存器作為基址寄存器, 累加器累加器A的內(nèi)容作為的內(nèi)容作為無符號(hào)數(shù)與無符號(hào)數(shù)與DPTR內(nèi)容相加內(nèi)容相加, 得到一個(gè)得到一個(gè) 16 位的地址位的地址, 并把該地址并把該地址指出的程序存儲(chǔ)器單元的內(nèi)容送到累加器指出的程序存儲(chǔ)器單元的內(nèi)容送到累加器A。這條

29、指令的執(zhí)行。這條指令的執(zhí)行結(jié)果只與指針結(jié)果只與指針DPTR及累加器及累加器A的內(nèi)容有關(guān)的內(nèi)容有關(guān), 與該指令存放的地與該指令存放的地址無關(guān)址無關(guān), 因此因此, 表格的大小和位置可以在表格的大小和位置可以在 64 KB程序存儲(chǔ)器程序存儲(chǔ)器中任中任意安排意安排, 并且一個(gè)表格可以為各個(gè)程序塊所共用。并且一個(gè)表格可以為各個(gè)程序塊所共用。 2)第第2條指令是以條指令是以PC作為基址寄存器作為基址寄存器, A的內(nèi)容作為無符號(hào)數(shù)的內(nèi)容作為無符號(hào)數(shù)和和 PC的內(nèi)容的內(nèi)容 ( 下一條指令的起始地址)相加后得到一個(gè)下一條指令的起始地址)相加后得到一個(gè) 16 位的地址位的地址, 并將該地址指出的程序存儲(chǔ)器單元的內(nèi)

30、容送到累加并將該地址指出的程序存儲(chǔ)器單元的內(nèi)容送到累加器器A。 這條指令的優(yōu)點(diǎn)是不改變特殊功能寄存器和這條指令的優(yōu)點(diǎn)是不改變特殊功能寄存器和PC的狀態(tài)的狀態(tài), 只要根據(jù)只要根據(jù)A的內(nèi)容就可以取出表格中的常數(shù)。的內(nèi)容就可以取出表格中的常數(shù)。缺點(diǎn)是表格只能缺點(diǎn)是表格只能放在該條查表指令后面的放在該條查表指令后面的 256 個(gè)單元之中個(gè)單元之中, 表格的大小受到限表格的大小受到限制制, 而且表格只能被一段程序所利用。而且表格只能被一段程序所利用。4.3.4 數(shù)據(jù)交換指令數(shù)據(jù)交換指令 MCS-51的數(shù)據(jù)交換指令有兩大類,分別是字節(jié)數(shù)據(jù)交換指的數(shù)據(jù)交換指令有兩大類,分別是字節(jié)數(shù)據(jù)交換指令和半字節(jié)數(shù)據(jù)交換

31、指令。令和半字節(jié)數(shù)據(jù)交換指令。 字節(jié)數(shù)據(jù)交換指令字節(jié)數(shù)據(jù)交換指令功能:功能:將源操作數(shù)的內(nèi)容和累加器將源操作數(shù)的內(nèi)容和累加器A中的內(nèi)容互換。中的內(nèi)容互換。指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 執(zhí)行周期執(zhí)行周期若若(R0)=30H,(A)=7FH,(30H)=40H,則執(zhí)行指令則執(zhí)行指令XCH A, R0則則(A)=40H, (30H)=7FH, (R0)=30H(A) (Rn)(A) (direct)(A) (Ri)2.半字節(jié)數(shù)據(jù)交換指令半字節(jié)數(shù)據(jù)交換指令功能:功能:將將Ri間接尋址的片內(nèi)間接尋址的片內(nèi)RAM單元的低單元的低4位和累加器位和累加器A中的中的低低4位互換。位互換。指令指令 功能功能

32、字節(jié)數(shù)字節(jié)數(shù) 振蕩周期振蕩周期 若若(A)=5DH,(R1)=70H,(70H)=80H,則執(zhí)行指令則執(zhí)行指令XCHD A, R1則則(A)=50H,(70H)=8DH,(R1)=70H(A) 30 (Ri)303. 累加器累加器A中高中高4位與低位與低4位交換指令位交換指令功能:功能:將累加器將累加器A中的高中的高4位和低位和低4位互換,結(jié)果仍存于累加器位互換,結(jié)果仍存于累加器A。指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 振蕩周期振蕩周期 若若(A)=0C2H=1100 0010B,則執(zhí)行指令則執(zhí)行指令SWAP A則則(A)=2CH=0010 1100B4.3.5. 堆棧操作指令堆棧操作指令 第一條

33、為入棧指令第一條為入棧指令:先將:先將SP的內(nèi)容加的內(nèi)容加1,然后將直接地址,然后將直接地址direct單元中的數(shù)據(jù)送入單元中的數(shù)據(jù)送入SP所指向的單元中。所指向的單元中。 第二條為出棧指令第二條為出棧指令:先將堆棧指針:先將堆棧指針SP所指向的棧頂單元中所指向的棧頂單元中的內(nèi)容彈出,送到直接地址單元的內(nèi)容彈出,送到直接地址單元direct,然后將,然后將SP的內(nèi)容減的內(nèi)容減1,指向新的棧頂單元。指向新的棧頂單元。 常用在保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場的程序中。常用在保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場的程序中。例:例: PUSH A PUSH A POP PSW POP B POP A POP PSW POP B POP

34、 A指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 振蕩周期振蕩周期 在在MCS-51 MCS-51 單片機(jī)的指令系統(tǒng)中,算術(shù)運(yùn)算指令單片機(jī)的指令系統(tǒng)中,算術(shù)運(yùn)算指令主要完成加、減、乘、除四則運(yùn)算,加主要完成加、減、乘、除四則運(yùn)算,加1 1、減一和二、減一和二/ /十進(jìn)制調(diào)整操作,這些運(yùn)算大多與累加器十進(jìn)制調(diào)整操作,這些運(yùn)算大多與累加器A A有關(guān),且運(yùn)有關(guān),且運(yùn)算結(jié)果算結(jié)果將影響將影響程序狀態(tài)字程序狀態(tài)字PSWPSW的進(jìn)的進(jìn)( (或借或借) )位標(biāo)志位標(biāo)志CYCY、輔、輔助進(jìn)助進(jìn)( (或借或借) )位標(biāo)志位標(biāo)志ACAC、溢出標(biāo)志、溢出標(biāo)志OVOV和奇偶標(biāo)志位和奇偶標(biāo)志位P P。4.3.4 算術(shù)運(yùn)算指令算術(shù)運(yùn)

35、算指令4.4.1、 加減運(yùn)算指令加減運(yùn)算指令 加減運(yùn)算指令包括加法指令加減運(yùn)算指令包括加法指令(ADD)、帶進(jìn)位的加法指令、帶進(jìn)位的加法指令(ADDC)和帶借位的減法指令和帶借位的減法指令(SUBB)三種。三種。4.4.1、 加法指令加法指令 這這4條指令對(duì)條指令對(duì)PSW中標(biāo)志中標(biāo)志CY、AC、OV和和P的影響如下:的影響如下:(1)對(duì)進(jìn)位標(biāo)志對(duì)進(jìn)位標(biāo)志CY: 相加過程中若和的位相加過程中若和的位7有進(jìn)位,有進(jìn)位,CY=1.(2)對(duì)輔助進(jìn)位標(biāo)志對(duì)輔助進(jìn)位標(biāo)志AC:相加過程中若和的位相加過程中若和的位3向位向位4有進(jìn)位,有進(jìn)位,AC=1(3)對(duì)溢出標(biāo)志對(duì)溢出標(biāo)志OV:相加過程中若和的位相加過程中

36、若和的位7和位和位6同時(shí)有進(jìn)位或同時(shí)同時(shí)有進(jìn)位或同時(shí)無進(jìn)位,無進(jìn)位,OV=0. 位位7、位、位6兩位進(jìn)位狀態(tài)兩位進(jìn)位狀態(tài) 邏輯異或邏輯異或(4)對(duì)奇偶標(biāo)志位對(duì)奇偶標(biāo)志位P: 當(dāng)當(dāng)A中中1的個(gè)數(shù)為奇數(shù)的個(gè)數(shù)為奇數(shù)P=1. 例例 1C6 1AC0C7執(zhí)行結(jié)果:執(zhí)行結(jié)果:A=85H+0AFH=34H,PSW=0C5H 1 1 0 0 0 1 0 1 CY AC F0 RS1 RS0 OV - P結(jié)果結(jié)果 2、 帶進(jìn)位的加法指令帶進(jìn)位的加法指令 帶進(jìn)位的加法指令與加法指令的區(qū)別:帶進(jìn)位的加法指令與加法指令的區(qū)別:將源操作數(shù)所指將源操作數(shù)所指示的內(nèi)容和示的內(nèi)容和A中的內(nèi)容相加后,還要加上進(jìn)位標(biāo)志中的內(nèi)容

37、相加后,還要加上進(jìn)位標(biāo)志CY的的值,結(jié)果仍存與值,結(jié)果仍存與A中。中。注意:注意:進(jìn)位標(biāo)志進(jìn)位標(biāo)志CY的值是指在該指令執(zhí)行之前已存在的值是指在該指令執(zhí)行之前已存在的進(jìn)位標(biāo)志值,而非指令執(zhí)行過程中產(chǎn)生的進(jìn)位標(biāo)志值。的進(jìn)位標(biāo)志值,而非指令執(zhí)行過程中產(chǎn)生的進(jìn)位標(biāo)志值。指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 振蕩周期振蕩周期3、帶借位的減法指令、帶借位的減法指令 在在MCS-51指令系統(tǒng)中沒有不帶借位的減法指令,但可用此組指令系統(tǒng)中沒有不帶借位的減法指令,但可用此組指令來完成不帶借位的減法。只要將進(jìn)位標(biāo)志指令來完成不帶借位的減法。只要將進(jìn)位標(biāo)志CY清零即可。清零即可。 在減法指令中,在減法指令中,CY=1表

38、示有借位,表示有借位,CY=0表示無借位表示無借位.OV位由位由第第6、第、第7位兩位借位狀態(tài)經(jīng)過邏輯異或得到的。位兩位借位狀態(tài)經(jīng)過邏輯異或得到的。指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 振蕩周期振蕩周期已知已知:(A)=0C9H,(R2)=54H,CY=1執(zhí)行指令后執(zhí)行指令后,SUBB A,R2 結(jié)果結(jié)果: (A)=74H,(R2)=54H,C=0,AC=0,OV=1.例例 4.4.2 乘除運(yùn)算指令乘除運(yùn)算指令 這條指令的功能是這條指令的功能是: 將累加器將累加器A的內(nèi)容與寄存器的內(nèi)容與寄存器B的內(nèi)容的內(nèi)容相乘相乘, 乘積的乘積的低低 8 位位存放在累加器存放在累加器A中中, 高高 8 位位存放于

39、寄存器存放于寄存器B中。如果乘積超過中。如果乘積超過255(0FFH), 則溢出標(biāo)志則溢出標(biāo)志OV置置“1”, 否否則清則清“0”。 進(jìn)位標(biāo)志進(jìn)位標(biāo)志CY總是被清總是被清“0”。 指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 振蕩周期振蕩周期 若若(A)=67H(103), (B)=0ADH(173),則執(zhí)行指令則執(zhí)行指令MUL AB則則(A)=9BH, (B)=45H OV=1,CY=0 這條指令的功能是這條指令的功能是: 將累加器將累加器A的的8位無符號(hào)數(shù)除以寄存位無符號(hào)數(shù)除以寄存器器B的的8位無符號(hào)數(shù)位無符號(hào)數(shù), 所得的所得的商商放在累加器放在累加器A中中, 余數(shù)余數(shù)存放于存放于寄存器寄存器B中。中

40、。進(jìn)位進(jìn)位CY和溢出標(biāo)志和溢出標(biāo)志OV均清零。均清零。如果寄存器如果寄存器B中除數(shù)位中除數(shù)位0,則結(jié)果為不定值,并使溢出標(biāo)志,則結(jié)果為不定值,并使溢出標(biāo)志OV置置“1”, 。 進(jìn)位標(biāo)志進(jìn)位標(biāo)志CY總是被清總是被清“0”。 指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 振蕩周期振蕩周期DIV AB 累加器累加器A除以寄存器除以寄存器B 1 48 若若(A)=9AH, (B)=23H ,則執(zhí)行指令則執(zhí)行指令 DIV AB則則(A)=04H, (B)=0EH OV=0,CY=04.4.3 加1、減1指令指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 振蕩周期振蕩周期這組指令的功能是:這組指令的功能是:將源操作數(shù)指定的內(nèi)容加將

41、源操作數(shù)指定的內(nèi)容加1。計(jì)算結(jié)。計(jì)算結(jié)果仍送回到原地址單元。果仍送回到原地址單元。 若原來的內(nèi)容為若原來的內(nèi)容為 0FFH, 則加則加 1 后將產(chǎn)生溢出后將產(chǎn)生溢出, 使操使操作數(shù)的內(nèi)容變成作數(shù)的內(nèi)容變成 00H。最后一條指令是對(duì)。最后一條指令是對(duì)16 位的數(shù)據(jù)位的數(shù)據(jù)指針寄存器指針寄存器DPTR執(zhí)行加執(zhí)行加 1 操作操作, 指令執(zhí)行時(shí)指令執(zhí)行時(shí), 先對(duì)低先對(duì)低 8 位指針位指針 DPL的內(nèi)容加的內(nèi)容加 1, 當(dāng)產(chǎn)生溢出時(shí)就對(duì)高當(dāng)產(chǎn)生溢出時(shí)就對(duì)高 8 位指針位指針DPH加加 1, 但不影響任何標(biāo)志。但不影響任何標(biāo)志。 INCA ;A40H+1H MOVCA,APC ;(41H)29H+1H 計(jì)

42、算結(jié)果計(jì)算結(jié)果:(A)=41H,(41H)=2AH。這組指令的功能是:這組指令的功能是:將源操作數(shù)指定的內(nèi)容減將源操作數(shù)指定的內(nèi)容減1。計(jì)算結(jié)果。計(jì)算結(jié)果仍送回到原地址單元。仍送回到原地址單元。 若原來的內(nèi)容為若原來的內(nèi)容為 00H, 則減則減 1 后變成后變成FFH。減。減1指令指令除除”DEC A “影響影響P標(biāo)志外,其余指令不影響標(biāo)志外,其余指令不影響PSW的各標(biāo)志的各標(biāo)志位。位。指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 振蕩周期振蕩周期 (A)=0EH, R7=10H, (40H)=00H, R1=30H, (30H)=0FFH,則執(zhí)行指令則執(zhí)行指令DEC A ;(A)=0DHDEC R7 ;

43、(R7)=0FHDEC 40H ;(40H)=0FFHDEC R1 ;(30H)=0FEH 功能:功能:進(jìn)行進(jìn)行BCD碼加法運(yùn)算時(shí),用來對(duì)碼加法運(yùn)算時(shí),用來對(duì)BCD碼的碼的加法運(yùn)算結(jié)果自動(dòng)進(jìn)行修正,使之成為一個(gè)正確的兩加法運(yùn)算結(jié)果自動(dòng)進(jìn)行修正,使之成為一個(gè)正確的兩位位BCD數(shù)數(shù),以完成十進(jìn)制加法功能以完成十進(jìn)制加法功能(進(jìn)行十進(jìn)制加法操進(jìn)行十進(jìn)制加法操作時(shí),要把十進(jìn)制數(shù)轉(zhuǎn)化成作時(shí),要把十進(jìn)制數(shù)轉(zhuǎn)化成BCD碼來進(jìn)行。碼來進(jìn)行。)3.4.4 指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 振蕩周期振蕩周期 計(jì)算機(jī)在進(jìn)行運(yùn)算時(shí)是按計(jì)算機(jī)在進(jìn)行運(yùn)算時(shí)是按二進(jìn)制規(guī)則二進(jìn)制規(guī)則進(jìn)行進(jìn)行的,十進(jìn)制數(shù)字的,十進(jìn)制數(shù)字09可

44、用可用4位二進(jìn)制來表示,位二進(jìn)制來表示, 4位位二進(jìn)制有二進(jìn)制有16中狀態(tài)中狀態(tài)對(duì)應(yīng)對(duì)應(yīng)16個(gè)數(shù)字,而個(gè)數(shù)字,而十進(jìn)制十進(jìn)制只用其中的只用其中的10種種表示表示09.因此按二進(jìn)制的運(yùn)算因此按二進(jìn)制的運(yùn)算規(guī)則就可能導(dǎo)致錯(cuò)誤的結(jié)果。規(guī)則就可能導(dǎo)致錯(cuò)誤的結(jié)果。 0 1 1 1 B 7的的BCD碼碼 0 1 1 0 B 6的的BCD碼碼 76+ )1 0 0 1 1 B 1 1 0 1 B 非非BCD碼碼 13 0 1 1 0 +6調(diào)整調(diào)整+6調(diào)整后得到的調(diào)整后得到的BCD碼碼+ ) 可見第一次相加得到的結(jié)果不是可見第一次相加得到的結(jié)果不是BCD碼碼 ,在進(jìn)行加,在進(jìn)行加6調(diào)整后個(gè)位數(shù)為調(diào)整后個(gè)位數(shù)為

45、3并向高位產(chǎn)生進(jìn)位才能得到正確的并向高位產(chǎn)生進(jìn)位才能得到正確的BCD碼。碼。 由此可知,在兩個(gè)由此可知,在兩個(gè)BCD數(shù)之和在數(shù)之和在1015之間,必須對(duì)之間,必須對(duì)結(jié)果結(jié)果+6進(jìn)行修正才能得到正確的進(jìn)行修正才能得到正確的BCD數(shù)。數(shù)。 “DA A”指令正是為了完成此功能而設(shè)置的調(diào)整指令。指令正是為了完成此功能而設(shè)置的調(diào)整指令。調(diào)整的條件和方法為:調(diào)整的條件和方法為:1)若累加器)若累加器A中的中的低低4位位出現(xiàn)了出現(xiàn)了大于大于9(十進(jìn)制數(shù)十進(jìn)制數(shù))的的BCD碼碼(即即大于大于1001的二進(jìn)制數(shù)的二進(jìn)制數(shù))或者或者低低4位位產(chǎn)生進(jìn)位產(chǎn)生進(jìn)位(AC=1),則在,則在低低4位位加加06H進(jìn)行調(diào)整,以

46、保證低進(jìn)行調(diào)整,以保證低4位產(chǎn)生正確的位產(chǎn)生正確的BCD碼。碼。2)若累加器)若累加器A中的中的高高4位位出現(xiàn)了出現(xiàn)了大于大于9(十進(jìn)制數(shù)十進(jìn)制數(shù))的的BCD碼碼(即即大于大于1001的二進(jìn)制數(shù)的二進(jìn)制數(shù))或者或者高高4位位產(chǎn)生進(jìn)位產(chǎn)生進(jìn)位(AC=1),則在,則在高高4位位加加06H進(jìn)行調(diào)整,以保證高進(jìn)行調(diào)整,以保證高4位產(chǎn)生正確的位產(chǎn)生正確的BCD碼。碼。 3)若兩者同時(shí)發(fā)生或者高)若兩者同時(shí)發(fā)生或者高4位雖然等于位雖然等于9,但低,但低4位修正后向位修正后向高高4位產(chǎn)生進(jìn)位,則應(yīng)加位產(chǎn)生進(jìn)位,則應(yīng)加66H進(jìn)行修正。進(jìn)行修正。邏輯運(yùn)算指令包括與、或、異或、清邏輯運(yùn)算指令包括與、或、異或、清0

47、和取反操作,和取反操作,共有共有20條。執(zhí)行這類指令時(shí),條。執(zhí)行這類指令時(shí),除了標(biāo)志位除了標(biāo)志位P隨累加器隨累加器A變化外,對(duì)變化外,對(duì)PSW中其他標(biāo)志位均無影響。中其他標(biāo)志位均無影響。4.5 4.5.1 邏輯運(yùn)算指令邏輯運(yùn)算指令表表3-21 邏輯運(yùn)算指令邏輯運(yùn)算指令一、一、 邏輯與指令邏輯與指令 ANL A, Rn ANL A, direct ANL A, Ri ANL A, data ANL direct, A ANL direct, data 這組指令的功能是這組指令的功能是: 將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯與操將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯與操作作, 并將結(jié)果送回目的操作數(shù)的單元中。并

48、將結(jié)果送回目的操作數(shù)的單元中。二、二、 邏輯或指令邏輯或指令ORL A, RnORL A, directORL A, RiORL A, dataORL direct, AORL direct, data 這組指令的功能是這組指令的功能是: 將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯或操將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯或操作作, 并將結(jié)果送回目的操作數(shù)的單元中。并將結(jié)果送回目的操作數(shù)的單元中。 三、三、 邏輯異或指令邏輯異或指令 XRL A, Rn XRL A, direct XRL A, Ri XRL A, data XRL direct, A XRL direct, data 這組指令的功能是這組指令的功

49、能是: 將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯異將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯異或操作或操作, 并將結(jié)果送回到目的操作數(shù)的單元中。并將結(jié)果送回到目的操作數(shù)的單元中。 四、四、 簡單邏輯操作指令簡單邏輯操作指令 CLR A ; 對(duì)累加器對(duì)累加器A清清“0” CPL A; 對(duì)累加器對(duì)累加器A按位取反按位取反這兩條指令只能對(duì)累加器這兩條指令只能對(duì)累加器A進(jìn)行操作。進(jìn)行操作。 使用中除了可以對(duì)兩個(gè)數(shù)進(jìn)行邏輯運(yùn)算外,往往使用中除了可以對(duì)兩個(gè)數(shù)進(jìn)行邏輯運(yùn)算外,往往根據(jù)邏輯運(yùn)算的特點(diǎn),利用它進(jìn)行一些特殊的操作。根據(jù)邏輯運(yùn)算的特點(diǎn),利用它進(jìn)行一些特殊的操作。3.5 .2 循環(huán)循環(huán)指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 振蕩

50、周期振蕩周期帶進(jìn)位左循環(huán):帶進(jìn)位左循環(huán):RLC A 左循環(huán):左循環(huán):RL A 注:注:1)左移一位相當(dāng)于乘左移一位相當(dāng)于乘2;右移一位相當(dāng)于除;右移一位相當(dāng)于除2。 2)在使用移位指令時(shí),要求被移位的數(shù)據(jù)在累在使用移位指令時(shí),要求被移位的數(shù)據(jù)在累加器加器A中。中。右循環(huán):右循環(huán):RR A 帶進(jìn)位右循環(huán):帶進(jìn)位右循環(huán):RRC A 無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令控制程序計(jì)數(shù)器控制程序計(jì)數(shù)器PC從現(xiàn)行值轉(zhuǎn)移到目從現(xiàn)行值轉(zhuǎn)移到目的地址。根據(jù)轉(zhuǎn)移的距離和尋址方式的不同,又分為的地址。根據(jù)轉(zhuǎn)移的距離和尋址方式的不同,又分為(1) AJMP addr11 ;短轉(zhuǎn)移;短轉(zhuǎn)移(2) LJMP addr16 ;長轉(zhuǎn)

51、移;長轉(zhuǎn)移(3) SJMP rel ;相對(duì)轉(zhuǎn)移;相對(duì)轉(zhuǎn)移(4) JMP A+DPTR ;間接轉(zhuǎn)移;間接轉(zhuǎn)移 3.6.1、無條件轉(zhuǎn)移指令、無條件轉(zhuǎn)移指令作用:改變程序計(jì)數(shù)器作用:改變程序計(jì)數(shù)器PC的值,從而改變程序執(zhí)行方向。的值,從而改變程序執(zhí)行方向。主要包括:主要包括:無條件轉(zhuǎn)移指令;無條件轉(zhuǎn)移指令;條件轉(zhuǎn)移指令;條件轉(zhuǎn)移指令;子程序調(diào)用指令;子程序調(diào)用指令;返回指令以及返回指令以及空操作指令等空操作指令等。AJMP addr11 2KB字節(jié)絕對(duì)轉(zhuǎn)移字節(jié)絕對(duì)轉(zhuǎn)移 2 24 這是這是2KB范圍內(nèi)的無條件跳轉(zhuǎn)指令范圍內(nèi)的無條件跳轉(zhuǎn)指令, 執(zhí)行該指令時(shí)執(zhí)行該指令時(shí), 先將先將PC+2, 然后將然后將

52、addr11送入送入PC10PC0, 而而PC15PC11保持不變。保持不變。 這樣得到跳轉(zhuǎn)的目的地址。需要注意的是這樣得到跳轉(zhuǎn)的目的地址。需要注意的是, 目標(biāo)地址與目標(biāo)地址與AJMP后后面一條指令的第一個(gè)字節(jié)必須在同一個(gè)面一條指令的第一個(gè)字節(jié)必須在同一個(gè) 2 KB區(qū)域的存儲(chǔ)器區(qū)內(nèi)。區(qū)域的存儲(chǔ)器區(qū)內(nèi)。 指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 振蕩周期振蕩周期1. 短轉(zhuǎn)移指令短轉(zhuǎn)移指令LJMP addr16 64KB字節(jié)絕對(duì)轉(zhuǎn)移字節(jié)絕對(duì)轉(zhuǎn)移 3 24 執(zhí)行該指令時(shí)執(zhí)行該指令時(shí), 將將 16 位目標(biāo)地址位目標(biāo)地址addr16 裝入裝入PC, 程序無條件轉(zhuǎn)向指定的目標(biāo)地址。轉(zhuǎn)移的目標(biāo)地址可程序無條件轉(zhuǎn)向指

53、定的目標(biāo)地址。轉(zhuǎn)移的目標(biāo)地址可以在以在 64 KB程序存儲(chǔ)器地址空間的任何地方即程序存儲(chǔ)器地址空間的任何地方即(0000HFFFFH) ,不影響任何標(biāo)志。,不影響任何標(biāo)志。指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 振蕩周期振蕩周期2. 長轉(zhuǎn)移指令長轉(zhuǎn)移指令SJMP rel 相對(duì)短轉(zhuǎn)移相對(duì)短轉(zhuǎn)移 2 24 指令中的指令中的rel為相對(duì)地址的偏移量,它是一個(gè)為相對(duì)地址的偏移量,它是一個(gè)8位有位有符號(hào)數(shù)符號(hào)數(shù)(用補(bǔ)碼表示用補(bǔ)碼表示),能表示數(shù)的范圍為,能表示數(shù)的范圍為-128127. 執(zhí)行該指令時(shí)執(zhí)行該指令時(shí), 先將先將 PC+2, 再把指令中帶符號(hào)的再把指令中帶符號(hào)的偏移量加到偏移量加到PC上上, 得到跳

54、轉(zhuǎn)的目標(biāo)地址送入得到跳轉(zhuǎn)的目標(biāo)地址送入PC。指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 振蕩周期振蕩周期3. 相對(duì)移指令相對(duì)移指令 1. 2.求求SJMP $ 的偏移量的偏移量rel。注:注:SJMP $ 指令長用來實(shí)現(xiàn)動(dòng)態(tài)停機(jī)的操作,指令長用來實(shí)現(xiàn)動(dòng)態(tài)停機(jī)的操作,又稱為原地踏步指令。又稱為原地踏步指令。4. 間接轉(zhuǎn)移指令間接轉(zhuǎn)移指令JMP A+DPTR PC A+DPT 2 24 間接轉(zhuǎn)移指令間接轉(zhuǎn)移指令, 又稱為又稱為基址加變址間接轉(zhuǎn)移指令基址加變址間接轉(zhuǎn)移指令,或叫或叫散轉(zhuǎn)指令散轉(zhuǎn)指令,還可叫做,還可叫做多分支選擇轉(zhuǎn)移指令多分支選擇轉(zhuǎn)移指令。 執(zhí)行該指令時(shí)執(zhí)行該指令時(shí), 把累加器把累加器 A中的中

55、的 8 位無符號(hào)數(shù)與基址寄存位無符號(hào)數(shù)與基址寄存器器DPTR中的中的 16 位數(shù)相加位數(shù)相加, 結(jié)果裝入程序計(jì)數(shù)器結(jié)果裝入程序計(jì)數(shù)器PC作為轉(zhuǎn)移的作為轉(zhuǎn)移的目的地址。目的地址。 不改變累加器不改變累加器 A和數(shù)據(jù)指針和數(shù)據(jù)指針DPTR的內(nèi)容的內(nèi)容, 也不影也不影響標(biāo)志位。響標(biāo)志位。 利用這條指令能實(shí)現(xiàn)程序的散轉(zhuǎn)。利用這條指令能實(shí)現(xiàn)程序的散轉(zhuǎn)。指令指令 功能功能 字節(jié)數(shù)字節(jié)數(shù) 振蕩周期振蕩周期 該條指令轉(zhuǎn)移的目的地址不是匯編或編程時(shí)確定該條指令轉(zhuǎn)移的目的地址不是匯編或編程時(shí)確定的,而是在程序運(yùn)行時(shí)動(dòng)態(tài)決定的。的,而是在程序運(yùn)行時(shí)動(dòng)態(tài)決定的。 這樣可以在這樣可以在DPTR中裝入多分支轉(zhuǎn)移程序的首地

56、中裝入多分支轉(zhuǎn)移程序的首地址,由累加器址,由累加器A中的內(nèi)容來動(dòng)態(tài)選擇其中的某一個(gè)分中的內(nèi)容來動(dòng)態(tài)選擇其中的某一個(gè)分支程序予以轉(zhuǎn)移。支程序予以轉(zhuǎn)移。 MOV DPTR, #TABLE 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令是是指必須在滿足指令規(guī)定條件的情況下程序轉(zhuǎn)指必須在滿足指令規(guī)定條件的情況下程序轉(zhuǎn)移,否則程序順序執(zhí)行。移,否則程序順序執(zhí)行。JB rel; A=0 PC PC+2+rel A 0 PC PC+2JNB rel; A0 PC PC+2+rel A=0 PC PC+2累加器累加器A判零轉(zhuǎn)移判零轉(zhuǎn)移(2條條) CJNE A, #data, rel ;不相等轉(zhuǎn)移不相等轉(zhuǎn)移;#data=A, PC

57、PC+3, C 0 ;#dataA, PC PC+3+rel, C 1CJNE A, direct,rel;不相等轉(zhuǎn)移不相等轉(zhuǎn)移 ;若若A=(direct) ,則則PCPC+3,C00 ;若若A(direct) ,則則PCPC+3+rel, C00 ;若若Adata ,則則PCPC+3+rel, C00 ;若若Rndata ,則則PCPC+3+rel, C00 ;若若(Ri)data ,則則PCPC+3+rel, C11 轉(zhuǎn)移的目標(biāo)地址在以下一條指令的起始轉(zhuǎn)移的目標(biāo)地址在以下一條指令的起始地址為中心的地址為中心的 256 個(gè)字節(jié)范圍之內(nèi)個(gè)字節(jié)范圍之內(nèi)(128 +127)。)。 DJNZ direct, rel ;(direct) (direct)-1 ;若若(direct)0,則則PCPC+3+rel

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論