版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第3章章 指令系統(tǒng)指令系統(tǒng)第第3章章 指令系統(tǒng)指令系統(tǒng)3.1 80C51單片機(jī)匯編語(yǔ)言與指令格式單片機(jī)匯編語(yǔ)言與指令格式3.2 尋址方式尋址方式3.3 80C51單片機(jī)指令系統(tǒng)單片機(jī)指令系統(tǒng)第第3章章 指令系統(tǒng)指令系統(tǒng)3.1 MCS513.1 MCS51單片機(jī)匯編語(yǔ)言與指令格式單片機(jī)匯編語(yǔ)言與指令格式 3.1.1 單片機(jī)的匯編語(yǔ)言 由構(gòu)成計(jì)算機(jī)的電子器件特性所決定, 計(jì)算機(jī)只能識(shí)別二進(jìn)制代碼。這種以二進(jìn)制代碼來(lái)描述指令功能的語(yǔ)言, 稱之為機(jī)器語(yǔ)言機(jī)器語(yǔ)言, 用機(jī)器語(yǔ)言組成的程序, 稱為目標(biāo)程序目標(biāo)程序。計(jì)算機(jī)就是按照機(jī)器語(yǔ)言的指令來(lái)完成各種功能操作的, 它具有程序簡(jiǎn)捷、占用存儲(chǔ)空間小、執(zhí)行速
2、度快、控制功能強(qiáng)等特點(diǎn)。匯編語(yǔ)言匯編語(yǔ)言:機(jī)器語(yǔ)言的助記符。在51單片機(jī)指令系統(tǒng)中機(jī)器語(yǔ)言表示為:75H,90H、0D5H;匯編語(yǔ)言表示為:MOV P1,#0D5H。在運(yùn)行前需要將匯編語(yǔ)言源程序匯編語(yǔ)言源程序翻譯成機(jī)器語(yǔ)言單片機(jī)才能運(yùn)行。將匯編語(yǔ)言源程序翻譯成機(jī)器語(yǔ)言的程序稱為匯編程序(編譯程序)。第第3章章 指令系統(tǒng)指令系統(tǒng) 3.1.2 指令格式 51系列單片機(jī)匯編語(yǔ)言指令的標(biāo)準(zhǔn)格式如下: 標(biāo)號(hào)標(biāo)號(hào): :操作碼目的操作數(shù)操作碼目的操作數(shù), ,源操作數(shù)源操作數(shù); ; 注注釋釋 例如: LABEL: ADD A,10H ; (A)(A)+10H (1) 方括號(hào) 表示該項(xiàng)是可選項(xiàng), 可有可無(wú)。 (
3、2) 標(biāo)號(hào)是用戶設(shè)定的符號(hào), 它實(shí)際代表該指令所在的地址。標(biāo)號(hào)必須以字母開(kāi)頭, 其后跟18個(gè)字母或數(shù)字, 并以“:”結(jié)尾。使用標(biāo)號(hào)主要便于編程和查詢。 (3) 操作碼是用英文縮寫(xiě)的指令功能助記符。它確定了本條指令完成什么樣的操作功能。如:ADD表示加法操作。任何一條指令都必須有該助記符項(xiàng), 不得省略。第第3章章 指令系統(tǒng)指令系統(tǒng) (4) 目的操作數(shù)提供操作的對(duì)象, 并指出一個(gè)目標(biāo)地址, 表示操作結(jié)果存放單元的地址, 它與操作碼之間必須以一個(gè)或幾個(gè)空格分隔。 如上例中A表示操作對(duì)象是累加器A的內(nèi)容, 并指出操作結(jié)果又回送A存放。 (5) 源操作數(shù)指出的是一個(gè)源地址(或立即數(shù)), 表示操作的對(duì)象或
4、操作數(shù)來(lái)自何處。它與目的操作數(shù)之間要用“,”號(hào)隔開(kāi)。 (6) 注釋部分是在編寫(xiě)程序時(shí),為了增加程序的可讀性, 由用戶擬寫(xiě)對(duì)該條指令或該段程序功能的說(shuō)明。它以分號(hào)“;”開(kāi)頭, 可以用中文、英文或某些符號(hào)來(lái)表示, 顯然它不存入單片機(jī), 只出現(xiàn)在源程序中。第第3章章 指令系統(tǒng)指令系統(tǒng) 3.1.3 指令中常用符號(hào) 在分類介紹各類指令之前, 先對(duì)描述指令的一些符號(hào)意義進(jìn)行一些簡(jiǎn)單約定: (1) Ri和Rn: R表示當(dāng)前工作寄存器組中的工作寄存器, i表示0或1, 即R0和R1。 n表示07,即R0R7, 當(dāng)前工作寄存器的選定是由PSW的RS1和RS0位決定的。 (2) data: 表示立即數(shù), data
5、為8位常數(shù)。data是指包含在指令中的8位立即數(shù)。 第第3章章 指令系統(tǒng)指令系統(tǒng) (3) data16: 包含在指令中的16位立即數(shù)。 (4) rel:相對(duì)地址,以補(bǔ)碼形式表示的地址偏移量, 范圍為-128+127, 主要用于無(wú)條件相對(duì)短轉(zhuǎn)移指令SJMP和所有的條件轉(zhuǎn)移指令中。 (5) addr16: 16位的目的地址。目的地址可在全部程序存儲(chǔ)器的64 KB空間范圍內(nèi), 主要用于無(wú)條件長(zhǎng)轉(zhuǎn)移指令LJMP和子程序長(zhǎng)調(diào)用指令LCALL中。 (6) addr11: 11位目的地址。目的地址應(yīng)與下條指令處于相同的2KB程序存儲(chǔ)器地址空間范圍內(nèi), 主要用于絕對(duì)轉(zhuǎn)移指令A(yù)JMP和子程序絕對(duì)調(diào)用指令A(yù)CAL
6、L指令中。 第第3章章 指令系統(tǒng)指令系統(tǒng) (7) direct: 表示直接尋址的地址, 即8位內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM的單元地址(0127/255), 或特殊功能寄存器SFR的地址。 對(duì)于SFR可直接用其名稱來(lái)代替其直接地址。 (8) bit: 內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM和特殊功能寄存器SFR中的可直接尋址位地址。 (9) : 間接尋址寄存器或基地址寄存器的前綴, 如Ri, DPTR, 表示寄存器間接尋址。 第第3章章 指令系統(tǒng)指令系統(tǒng) (10) (X): 表示X中的內(nèi)容。 (11) (X): 表示由X尋址的單元中的內(nèi)容, 即(X)作地址, 該地址的內(nèi)容用(X)表示。 (12) / / 和符號(hào): / /
7、表示對(duì)該位操作數(shù)取反, 但不影響該位的原值。 表示指令操作流程, 將箭頭一方的內(nèi)容, 送入箭頭另一方的單元中去。 第第3章章 指令系統(tǒng)指令系統(tǒng) 尋址方式通俗一點(diǎn)說(shuō)就是尋找“東西”的方式。 “東西”就是要找的操作數(shù)。如何找“東西”就是尋址方式。首先還是讓我們回到日常生活中看一看。 某先生對(duì)張三說(shuō):“你到404去借本資料!”這里的“404”是直接地址,直接到404就可以拿到需要的東西。3.2 3.2 尋址方式尋址方式第第3章章 指令系統(tǒng)指令系統(tǒng) 3.2.1寄存器尋址 選定某寄存器,自該寄存器中讀取或存放操作數(shù), 以完成指令規(guī)定的操作, 稱為寄存器尋址。 例如: MOV A, R0 ; (A)(R0
8、) 該指令的功能是把工作寄存器R0中的內(nèi)容傳送到累加器A中, 如: R0內(nèi)容為FFH, 則執(zhí)該指令后A的內(nèi)容也為FFH。 在該條指令中, 源操作數(shù)和目的操作數(shù)是由尋址R0和A寄存器得到的, 故屬于寄存器尋址。該指令為單字節(jié)指令, 機(jī)器代碼為E8H。 寄存器尋址對(duì)所選的工作寄存器組中R0R7、累加器A、數(shù)據(jù)指針DPTR等進(jìn)行操作。第第3章章 指令系統(tǒng)指令系統(tǒng) 3.2.2 立即尋址 操作數(shù)直接出現(xiàn)在指令中, 它緊跟在操作碼的后面, 作為指令的一部分與操作碼一起存放在程序存儲(chǔ)器內(nèi),可以立即得到并執(zhí)行, 不需要另去寄存器或存儲(chǔ)器等處尋找和取數(shù), 故稱為立即尋址。 該操作數(shù)稱為立即數(shù), 并在其前冠以“”
9、號(hào)作前綴, 以表示并非地址。立即數(shù)可以是8位或16位, 用十六進(jìn)制數(shù)表示。 MOV A ,#3AHACC(3AH)PCPC+10111010000111010第第3章章 指令系統(tǒng)指令系統(tǒng) 例如: MOV A, 3AH ; (A)3AH 該指令的功能是將立即數(shù)3AH傳送到累加器A中, 對(duì)應(yīng)的機(jī)器碼為74H。 它隱含了寄存器尋址累加器A方式, 長(zhǎng)度一個(gè)字節(jié), 占用一個(gè)存儲(chǔ)單元; 立即數(shù)3AH緊跟在操作碼之后, 成為指令代碼的一部分, 長(zhǎng)度也是一個(gè)字節(jié), 占用緊跟在后面的另一個(gè)存儲(chǔ)單元。故該指令為雙字節(jié)指令, 其機(jī)器碼為74H 3AH。 第第3章章 指令系統(tǒng)指令系統(tǒng) 3.2.3寄存器間接尋址 由指令
10、指出某一個(gè)寄存器的內(nèi)容作為操作數(shù)地址的尋址方法, 稱為寄存器間接尋址方法,簡(jiǎn)稱寄存器間址。 這里要強(qiáng)調(diào)的是: 寄存器的內(nèi)容不是操作數(shù)本身, 而是操作數(shù)地址。 寄存器間接尋址使用所選定寄存器組中的R0和R1作為地址指針(對(duì)堆棧操作時(shí),使用堆棧指針SP),來(lái)尋址片內(nèi)數(shù)據(jù)存儲(chǔ)器RAM(00FFH)的256個(gè)單元, 但它不能訪問(wèn)特殊功能寄存器SFR。寄存器間接尋址也適用于訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,此時(shí),用R0、R1或DPTR作為地址指針。寄存器間接尋址用符號(hào)“”指明。 如指令 MOV A,R1 ;可表示為: (A)(R1)第第3章章 指令系統(tǒng)指令系統(tǒng)圖圖31 寄存器間接尋址示意圖寄存器間接尋址示意圖 第第3
11、章章 指令系統(tǒng)指令系統(tǒng) 3.2.4 直接尋址 指令中直接給出操作數(shù)所在的存儲(chǔ)器地址, 以供尋址取數(shù)或存數(shù)的尋址方式稱為直接尋址。 例如: MOV A, 40H ; (A)(40H) 該指令的功能是把內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM 40H單元內(nèi)的內(nèi)容送到累加器A。 指令直接給出了源操作數(shù)的地址40H。 該指令的機(jī)器碼為E5H 40H。 第第3章章 指令系統(tǒng)指令系統(tǒng) 3.2.5 變址尋址 基址寄存器加變址寄存器間接尋址, 簡(jiǎn)稱變址尋址。 它以數(shù)據(jù)指針DPTR或程序計(jì)數(shù)器PC作為基址寄存器, 累加器A作為變址寄存器, 兩者的內(nèi)容相加形成16位程序存儲(chǔ)器地址, 該地址就是操作數(shù)所在地址。 例如: MOVC A,
12、 A+DPTR; (A)(A)+(DPTR) 該指令尋址及操作功能如圖32所示, 該指令為單字節(jié)指令, 機(jī)器代碼為93H。 這種尋址方式常用于訪問(wèn)程序存儲(chǔ)器中的常數(shù)表。稱查表。第第3章章 指令系統(tǒng)指令系統(tǒng)圖圖32 32 變址尋址示意圖變址尋址示意圖 第第3章章 指令系統(tǒng)指令系統(tǒng) 3.2.6 相對(duì)尋址 相對(duì)尋址是以當(dāng)前程序計(jì)數(shù)器PC值加上指令規(guī)定的偏移量rel , 而構(gòu)成實(shí)際操作數(shù)地址的尋址方法。它用于訪問(wèn)程序存儲(chǔ)器, 常出現(xiàn)在相對(duì)轉(zhuǎn)移指令中。 在使用相對(duì)尋址時(shí)要注意以下兩點(diǎn): 第一, 當(dāng)前當(dāng)前PCPC值值是指相對(duì)轉(zhuǎn)移指令所在地址加上該轉(zhuǎn)移指令的字節(jié)數(shù)。 即: 當(dāng)前PC值 = 轉(zhuǎn)移指令所在地址
13、+ 轉(zhuǎn)移指令的字節(jié)數(shù)。 例如: JZ rel 是一條累加器A為零就轉(zhuǎn)移的雙字節(jié)指令。 若該指令地址為2050H, 則執(zhí)行該指令時(shí)的當(dāng)前PC值即為2052H。 第第3章章 指令系統(tǒng)指令系統(tǒng) 第二, 偏移量rel是有符號(hào)的單字節(jié)數(shù),以補(bǔ)碼表示,其相對(duì)值的范圍是-128+127(即00HFFH), 負(fù)數(shù)表示從當(dāng)前地址向上轉(zhuǎn)移, 正數(shù)表示從當(dāng)前地址向下轉(zhuǎn)移。 所以, 相對(duì)轉(zhuǎn)移指令滿足條件后, 轉(zhuǎn)移的地址(一般稱為目的地址)應(yīng)為: 目的地址 = 當(dāng)前PC值 + rel =轉(zhuǎn)移指令所在地址 + 轉(zhuǎn)移指令字節(jié)數(shù) + rel;例如: 指令JZ 08H 和 JZ 0F4H 表示累加器A為零條件滿足后, 從源地址
14、(2050H)分別向下、 向上轉(zhuǎn)移10個(gè)單元。 其相對(duì)尋址示意如圖33(a)、 (b)所示。 這兩條指令均為雙字節(jié)指令, 機(jī)器代碼分別為: 60H 08H和60H F4H。 第第3章章 指令系統(tǒng)指令系統(tǒng) 圖圖33 相對(duì)尋址示意圖相對(duì)尋址示意圖(a)指令指令JZ 08H尋址示意圖;尋址示意圖; (b)指令指令JZ F4H尋址示意圖尋址示意圖 第第3章章 指令系統(tǒng)指令系統(tǒng) 3.2.7 位尋址 51系列單片機(jī)具有位尋址的功能, 即指令中直接給出位地址, 可以對(duì)內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM中的128位和特殊寄存器SFR中的83位進(jìn)行尋址, 并且位操作指令可對(duì)地址空間的每一位進(jìn)行傳送及邏輯操作。 例如: SET
15、B PSW.3 ; (PSW.3)1 該指令的功能是給程序狀態(tài)字PSW中的RS0置1。 該指令為雙字節(jié)指令, 機(jī)器代碼為D2H D3H, 指令的第二字節(jié)直接給出位地址D3H(PSW.3的位地址)。第第3章章 指令系統(tǒng)指令系統(tǒng)綜上所述, 在51系列單片機(jī)的存儲(chǔ)空間中, 指令究竟對(duì)哪個(gè)存儲(chǔ)器空間進(jìn)行操作是由指令操作碼和尋址方式確定的。 7種尋址方式如表31所示。 表31 7 種尋址方式及使用空間 第第3章章 指令系統(tǒng)指令系統(tǒng)3.3 MCS513.3 MCS51單片機(jī)指令系統(tǒng)單片機(jī)指令系統(tǒng) 51單片機(jī)指令系統(tǒng)分為5大類:數(shù)據(jù)傳送類指令 29條算術(shù)運(yùn)算類指令 24條邏輯運(yùn)算及移位類指令 24條控制轉(zhuǎn)移
16、類指令 17 條位操作(布爾操作)指令 17 條 共計(jì)111條指令。現(xiàn)按其分類分別介紹各條指令的格式、功能、對(duì)狀態(tài)標(biāo)志的影響對(duì)狀態(tài)標(biāo)志的影響以及應(yīng)用。 第第3章章 指令系統(tǒng)指令系統(tǒng) 3.3.1 數(shù)據(jù)傳送類指令 數(shù)據(jù)傳送類指令共29條, 它是指令系統(tǒng)中最活躍、 使用最多的一類指令。 一般的操作是把源操作數(shù)傳送到目的操作數(shù), 即指令執(zhí)行后目的操作數(shù)改為源操作數(shù), 而源操作數(shù)保持不變。若要求在進(jìn)行數(shù)據(jù)傳送時(shí), 不丟失目的操作數(shù), 則可以用交換型傳送指令。 數(shù)據(jù)傳送類指令不影響不影響進(jìn)位標(biāo)志CY、半進(jìn)位標(biāo)志AC和溢出標(biāo)志OV, 但當(dāng)傳送或交換數(shù)據(jù)后影響累加器A的值時(shí), 奇偶標(biāo)志P的值則按A的值重新設(shè)定
17、,Z標(biāo)志也會(huì)影響。 第第3章章 指令系統(tǒng)指令系統(tǒng)按數(shù)據(jù)傳送類指令的操作方式, 又可分為3種類型: 數(shù)據(jù)傳送 MOV、 MOVX、 MOVC數(shù)據(jù)交換 XCH、 XCHD、 SWAP堆棧操作 PUSH、POP 使用8種助記符 表32給出了各種數(shù)據(jù)傳送指令的操作碼助記符和對(duì)應(yīng)的操作數(shù)。 第第3章章 指令系統(tǒng)指令系統(tǒng)表32 數(shù)據(jù)傳送類指令助記符與操作 第第3章章 指令系統(tǒng)指令系統(tǒng)1. 內(nèi)部數(shù)據(jù)存儲(chǔ)器間數(shù)據(jù)傳送指令 內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM區(qū)是數(shù)據(jù)傳送最活躍的區(qū)域, 可用的指令數(shù)也最多, 共有16條指令, 指令操作碼助記符為MOV。 內(nèi)部RAM之間源操作數(shù)傳遞關(guān)系如圖34所示。為了便于理解指令功能, 我們按
18、源操作數(shù)的尋址方式源操作數(shù)的尋址方式逐一介紹各條指令。 (1) 立即尋址。 在該尋址方式下, 內(nèi)部RAM區(qū)數(shù)據(jù)傳送指令有如下5條指令。 第第3章章 指令系統(tǒng)指令系統(tǒng)圖34 內(nèi)部RAM間數(shù)據(jù)傳遞關(guān)系 第第3章章 指令系統(tǒng)指令系統(tǒng)操作碼助記符操作碼助記符 目的操作數(shù)目的操作數(shù) 源操作數(shù)源操作數(shù) 功能注釋功能注釋 機(jī)器代碼機(jī)器代碼 MOV A, MOV A, datadata ; (A) data , 74 data MOV direct,MOV direct,datadata ;(direct)data ,75direct data MOV Ri, MOV Ri,datadata ; (Ri) d
19、ata , 7677 data MOV Rn, MOV Rn, datadata ; (Rn) data , 787F data MOV DPTR,MOV DPTR,data16data16 ;(DPTR) data16 ,90 data158 data70第第3章章 指令系統(tǒng)指令系統(tǒng) 這組指令表明, 8位立即數(shù)可以直接傳送到內(nèi)部數(shù)據(jù)區(qū)RAM的各個(gè)位置, 并且可把16位立即數(shù)直接裝入數(shù)據(jù)指針DPTR。 把立即數(shù)送入累加器A的傳送指令在3.2.2節(jié)中已作了介紹, 其它指令的功能及應(yīng)用舉例如下: MOV direct, MOV direct,data data ; (direct); (direc
20、t)data , 75 direct datadata , 75 direct data 該指令的功能是把立即數(shù)傳送到內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM的00H7FH, 以及特殊功能寄存器SFR的各單元中去, 它為三字節(jié)指令。例如把立即數(shù)40H傳送到RAM的30H單元和P1口(口地址為90H), 可采用如下指令: MOV 30H,40H ; (30H) 40H, 75 30 40 MOV P1,40H ; (90H) 40H, 75 90 40第第3章章 指令系統(tǒng)指令系統(tǒng) MOV Ri, MOV Ri, data data ; (Ri) ; (Ri) data, 76data, 7677 data77 da
21、ta 該指令的功能是把立即數(shù)傳送到由R0和R1寄存器的內(nèi)容指出(為地址)的片內(nèi)數(shù)據(jù)存儲(chǔ)器RAM的單元中去(51子系列為00H7FH, 52子系列為00HFFH)。 MOV R0, 30H ; (R0) 30H , 76 30 MOV R1, 40H ; (R0) 40H , 77 40 假設(shè)(R0)=40H,(R1)=90H,則: 結(jié)果(40H)=30H,(90H)=40H這是什么地址?這是什么地址?第第3章章 指令系統(tǒng)指令系統(tǒng) MOV Rn, MOV Rn,datadata ;(Rn) ;(Rn)data ,78data ,787F data7F data 該指令的功能是把立即數(shù)傳送到內(nèi)部寄
22、存器R0R7中去,該指令為雙字節(jié)指令, 機(jī)器代碼為:0 1 1 1 1 r r rdata例如MOV R7,#40H結(jié)果(R7)=40H 機(jī)器碼7F ,40 第第3章章 指令系統(tǒng)指令系統(tǒng) MOV DPTR, MOV DPTR,data16data16;(DPTR)(DPTR)data16,data16,9090datadata15158 8 data data 7 70 0 該指令的功能是把16位立即數(shù)裝入數(shù)據(jù)指針DPTR中去。 它是51系列單片機(jī)指令系統(tǒng)中唯一的一條16位數(shù)據(jù)傳送指令。該指令為三字節(jié)指令, 第一字節(jié)為90H, 第二字節(jié)為高8位立即數(shù), 第三字節(jié)為低8位立即數(shù)。 例如: MOV
23、 DPTR, 1234H指令執(zhí)行后, DPTR寄存器的高8位寄存器DPH的內(nèi)容為12H, 低8位寄存器DPL內(nèi)容為34H。該指令的機(jī)器代碼為90H 12H 34H。 第第3章章 指令系統(tǒng)指令系統(tǒng) (2) (2) 寄存器尋址。寄存器尋址。 在該尋址方式下, 內(nèi)部RAM區(qū)數(shù)據(jù)傳送指令有以下5條: MOV direct,A;(direct)(A) , F5 directMOV Ri,A ; (Ri) (A) , F6F7MOV Rn,A ; (Rn) (A) , F8FFMOV A,Rn ; (A) (Rn) , E8EFMOV direct,Rn;(direct)(Rn),888F direct第
24、第3章章 指令系統(tǒng)指令系統(tǒng) 這組指令的功能是把累加器A的內(nèi)容傳送到內(nèi)部數(shù)據(jù)區(qū)RAM的各個(gè)單元,或者把指定工作寄存器R0R7中的內(nèi)容傳送到累加器A或direct所指定的片內(nèi)RAM的00H7FH單元或特殊功能寄存器SFR中去。但不能用這類指令在工作寄存器之間直接傳送。 例如:不存在MOV R1,R2這樣的指令。 第第3章章 指令系統(tǒng)指令系統(tǒng)(3) (3) 直接尋址。直接尋址。 在該尋址方式下, 內(nèi)部RAM區(qū)數(shù)據(jù)傳送指令有如下4條指令: MOV A,direct; (A) (direct) , E5 direct MOV Rn,direct;(Rn)(direct), A8AF direct MOV
25、 Ri,direct;(Ri)(direct),A6A7 direct MOV direct2,direct1 ;(direct2)(direct1),85 direct1 direct2第第3章章 指令系統(tǒng)指令系統(tǒng)這組指令將直接地址所規(guī)定的內(nèi)部RAM單元(片內(nèi)RAM的00H7FH, SFR的80HFFH單元)內(nèi)容傳送到累加器A ,寄存器Rn, 并能實(shí)現(xiàn)內(nèi)部數(shù)據(jù)寄存器RAM之間、特殊功能寄存器SFR之間或SFR與內(nèi)部RAM之間的直接數(shù)據(jù)傳遞。直接傳遞不需要通過(guò)累加器A或者工作寄存器來(lái)間接傳送,從而提高了數(shù)據(jù)傳送的效率。例如: MOV P2,P1 ; (P2) (P1) , 85 90 A0 該
26、指令的功能是不通過(guò)其它寄存器,直接把P1口(口地址90H)的內(nèi)容傳送到P2口(口地址A0H)輸出,提高了效率。該指令為三字節(jié)指令, 機(jī)器代碼為85H 90H A0H。 第第3章章 指令系統(tǒng)指令系統(tǒng)(4) (4) 寄存器間接尋址。寄存器間接尋址。在該尋址方式下,內(nèi)部RAM區(qū)數(shù)據(jù)傳送指令有以下兩條: MOV A,Ri ; (A) (Ri) , E6E7 MOV direct,Ri ;(direct)(Ri),8687 direct 這組指令把以Ri的內(nèi)容作為地址進(jìn)行尋址所得到單元的內(nèi)容,傳送到累加器A或direct指定的片內(nèi)RAM區(qū)單元。第第3章章 指令系統(tǒng)指令系統(tǒng)例如:設(shè)內(nèi)部RAM(30H)=4
27、0H,(40H)=10H,(10H)=00H,端口(P1)=0CAH,分析以下程序執(zhí)行后各單元及寄存器、P2口的內(nèi)容。 MOV R0, 30H ; (R0) 30H , (R0)=30H MOV A, R0 ; (A) (R0) ,(A)=40H MOV R1, A ; (R1) (A) , (R1)=40H MOV B, R1 ; (B) (R1) , (B)=10H MOV R1, P1 ; (R1) (P1) , (40H)=0CAH MOV P2, P1 ; (P2) (P1) , (P2)=0CAH MOV 10H, 20H ; (10H) 20H , (10H)=20H第第3章章
28、指令系統(tǒng)指令系統(tǒng)2. 外部數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送指令 51單片機(jī)CPU對(duì)片外擴(kuò)展的數(shù)據(jù)存儲(chǔ)器RAM或I/O口進(jìn)行數(shù)據(jù)傳送時(shí), 必須采用寄存器間接尋址的方法, 通過(guò)累加器A來(lái)完成。一般數(shù)據(jù)的傳送是通過(guò)P0口和P2口完成的, 即片外RAM地址總線低8位由P0口送出, 高8位由P2口送出, 數(shù)據(jù)總線(8位)也由P0口傳送(雙向), 但與低8位地址總線是分時(shí)傳送的。 這類數(shù)據(jù)傳送指令共有以下4條單字節(jié)指令, 指令操作碼助記符標(biāo)志為MOVX。MOVX A, DPTR ; (A) (DPTR) , E0MOVX A, Ri ; (A) (Ri) , E2E3MOVX DPTR, A ; (DPTR) (A)
29、, F0MOVX Ri, A ; (Ri) (A) , F2F3 第第3章章 指令系統(tǒng)指令系統(tǒng) 例如: 設(shè)外部RAM (0203H)=FFH, 分析以下指令執(zhí)行后的結(jié)果。 MOV DPTR, 0203H ; (DPTR) 0203H , 90 02 03 MOVX A, DPTR ; (A) (DPTR) , E0 MOV 30H, A ; (30H) (A) , F5 30 MOV A, 0FH ; (A) 0FH , 74 0F MOVX DPTR, A ; (DPTR) (A) , F0 執(zhí)行結(jié)果為: (DPTR)=0203H, (30H)=FFH, (0203H)=(A)=0FH。 第
30、第3章章 指令系統(tǒng)指令系統(tǒng)3. 3. 程序存儲(chǔ)器向累加器程序存儲(chǔ)器向累加器A A傳送數(shù)據(jù)指令傳送數(shù)據(jù)指令 程序存儲(chǔ)器向累加器A傳送數(shù)據(jù)指令, 又稱查表指令。 它采用變址尋址方式, 把程序存儲(chǔ)器(ROM或EPROM)中存放的表格數(shù)據(jù)讀出, 傳送到累加器A。它共有如下兩條單字節(jié)指令, 指令操作碼助記符為MOVC。 MOVC A, A+DPTR ; (A)(A)+(DPTR) , 93,遠(yuǎn)程查表。遠(yuǎn)程查表。 MOVC A, A+PC ; (PC)(PC)+1, (A)(A)+(PC),83,近程查表。近程查表。第第3章章 指令系統(tǒng)指令系統(tǒng)例1: 在外部ROM/EPROM中, 從2000H單元開(kāi)始依次
31、存放09的平方值: 0、 1、 4、 9、 、 81, 要求依據(jù)累加器A中的值(09)來(lái)查找所對(duì)應(yīng)的平方值, 分析下述程序的結(jié)果。 MOV DPTR, 2000H ; (DPTR) 2000H MOV A, 09H ; (A) 09H MOVC A, A+DPTR ; (A) (A)+(DPTR) 執(zhí)行結(jié)果: (DPTR)=2000H (A)=51H(81的十六進(jìn)制數(shù))。 第第3章章 指令系統(tǒng)指令系統(tǒng) 例2:以例1外部ROM/EPROM 2000H單元開(kāi)始存放09的平方值, 以PC作為基址寄存器進(jìn)行查表。 解: 設(shè)MOVC指令所在地址(PC)=1FF0H, 則 偏移量 = 2000H(1FF0
32、H+1) = 0FH 相應(yīng)的程序如下: MOV A, 09H ; (A) 09H , 74 09 ADD A, 0FH ; 地址調(diào)整, 24 0F MOVC A, A+PC ; (A) (A)+(PC)+1) , 83 執(zhí)行結(jié)果為: (PC)=1FF1H, (A)=51H。 第第3章章 指令系統(tǒng)指令系統(tǒng)4. 4. 數(shù)據(jù)交換指令數(shù)據(jù)交換指令 數(shù)據(jù)傳送類指令一般都用來(lái)將操作數(shù)從源地址傳送到目的地址, 指令執(zhí)行后, 源地址的操作數(shù)不變, 目的地址的操作數(shù)則修改為源地址的操作數(shù)。而數(shù)據(jù)交換指令其數(shù)據(jù)作雙向傳送, 涉及傳送的雙方互為源地址、目的地址, 指令執(zhí)行后各方的操作數(shù)都修改為另一方的操作數(shù)。因此,
33、 兩操作數(shù)均未沖掉、丟失。 數(shù)據(jù)交換類指令共有如下5條指令: 第第3章章 指令系統(tǒng)指令系統(tǒng)字節(jié)交換字節(jié)交換 XCH A, direct ; (A) (direct) , C5 direct XCH A, Ri ; (A) (Ri) , C6C7 XCH A, Rn ; (A) (Rn) , C8CF低低4位交換:位交換: XCHD A, Ri ; (A30) (Ri)30 , D6D7累加器高累加器高4位與低位與低4位交換:位交換: SWAP A ; (A74) (A30) , C4第第3章章 指令系統(tǒng)指令系統(tǒng) 例3: 設(shè)(R0)=30H, (30H)=4AH, (A)=28H, 則: 執(zhí)行
34、XCH A, R0 ; 結(jié)果為 : (A)=4AH, (30H)=28H 執(zhí)行 XCHD A, R0 ; 結(jié)果為 : (A)=2AH, (30H)=48H 執(zhí)行 SWAP A ; 結(jié)果為 : (A)=82H第第3章章 指令系統(tǒng)指令系統(tǒng)5. 堆棧操作類指令 堆棧操作有進(jìn)棧和出棧操作, 即壓入和彈出數(shù)據(jù), 常用于保存或恢復(fù)現(xiàn)場(chǎng)。 該類指令共有如下兩條指令: (SP)(SP)+1 (SP)(direct) (direct)(SP) (SP)(SP)-1 C0 direct PUSH directPOP direct D0 direct 第第3章章 指令系統(tǒng)指令系統(tǒng)例4: 若在外部ROM/EPROM中
35、2000H單元開(kāi)始依次存放09的平方值, 數(shù)據(jù)指針(DPTR)=3A00H, 用查表指令取出2003H單元的數(shù)據(jù)后, 要求保持DPTR中的內(nèi)容不變。完成以上功能的程序如下: MOV A, 03H ; (A) 03H , 74 03PUSH DPH ; 保護(hù)DPTR高8位入棧 , C0 83PUSH DPL ; 保護(hù)DPTR低8位入棧, C0 82MOV DPTR , 2000H ; (DPTR) 2000H, 90 20 00MOVC A, A+DPTR ; (A) (2000H+03H) , 93POP DPL ; 彈出DPTR低8位 , D0 82POP DPH ; 彈出DPTR高8位,
36、(先進(jìn)后出) , 83第第3章章 指令系統(tǒng)指令系統(tǒng)作業(yè):1、對(duì)片內(nèi)地址為00H7FH、80H-0FFH RAM,SFR和片外RAM各可用什么尋址方式訪問(wèn)?各舉一條指令為例。2、page62 6第第3章章 指令系統(tǒng)指令系統(tǒng)3.3.2 3.3.2 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令 算術(shù)運(yùn)算類指令共有24條,可分為加法,帶進(jìn)位加法,帶借位減法,加1、減1,乘、除及十進(jìn)制調(diào)整指令共6組。 它主要完成加、減、乘、除四則運(yùn)算,以及增量、減量和二十進(jìn)制調(diào)整操作,對(duì)8位無(wú)符號(hào)無(wú)符號(hào)數(shù)數(shù)可進(jìn)行直接運(yùn)算;借助溢出標(biāo)志OV,可對(duì)帶符帶符號(hào)數(shù)號(hào)數(shù)進(jìn)行補(bǔ)碼運(yùn)算;借助進(jìn)位標(biāo)志CY,可進(jìn)行多字節(jié)加減運(yùn)算,也可以對(duì)壓縮BCD碼(
37、即單字節(jié)中存放兩位BCD碼)進(jìn)行運(yùn)算。第第3章章 指令系統(tǒng)指令系統(tǒng) 1. 1. 加法指令加法指令 加法指令共有如下4條指令,操作數(shù)助記符為ADD。 ADD A,data; (A)(A)+data , 24 data ADD A,direct ; (A)(A)+(direct) , 25 direct ADD A,Ri ; (A)(A)+(Ri) , 2627 ADD A,Rn ; (A)(A)+(Rn) , 282F第第3章章 指令系統(tǒng)指令系統(tǒng) 這4條指令使得累加器A可以和內(nèi)部RAM的任何一個(gè)單元的內(nèi)容進(jìn)行相加, 也可以和一個(gè)8位立即數(shù)相加, 相加結(jié)果存放在A中。無(wú)論是哪一條加法指令, 參加運(yùn)
38、算的都是兩個(gè)8位二進(jìn)制數(shù)。 對(duì)用戶來(lái)說(shuō),這些8位數(shù)可當(dāng)作無(wú)符號(hào)數(shù)無(wú)符號(hào)數(shù)(0255);也可以當(dāng)作帶符號(hào)數(shù)帶符號(hào)數(shù)(-128+127), 即補(bǔ)碼數(shù)。 例如: 對(duì)于二進(jìn)制數(shù)11010011, 用戶可認(rèn)為它是無(wú)符號(hào)數(shù), 即為十進(jìn)制數(shù)211, 也可以認(rèn)為它是帶符號(hào)數(shù), 即為十進(jìn)制負(fù)數(shù)-45。但計(jì)算機(jī)在作加法運(yùn)算時(shí), 總按以下規(guī)定進(jìn)行: 第第3章章 指令系統(tǒng)指令系統(tǒng) (1) 在求和時(shí),總是把操作數(shù)直接相加,而無(wú)須任何變換。例如,若(A)=11010011B,(R1)=11101000B, 執(zhí)行指令 ADD A,R1時(shí), 其算式表達(dá)為: 11010011 (211D) (-45D) + 11101000
39、(232D) (-24D) 1 10111011 (187) (-69D) 相加后(A)=10111011B。若認(rèn)為是無(wú)符號(hào)相加, 則A的值代表十進(jìn)制數(shù)187;若認(rèn)為是帶符號(hào)補(bǔ)碼數(shù)相加,則A的值為十進(jìn)制負(fù)數(shù)-69。第第3章章 指令系統(tǒng)指令系統(tǒng) (2)在確定相加后進(jìn)位標(biāo)志CY的值時(shí),總是把兩個(gè)操作數(shù)作為無(wú)符號(hào)數(shù)直接相加而得出進(jìn)位CY值。如上例中, 相加后CY=1。若為無(wú)符號(hào)數(shù)相加CY代表十進(jìn)制數(shù)256,但若是兩個(gè)帶符號(hào)數(shù)相加, CY沒(méi)有意義。 (3) 在確定相加后溢出標(biāo)志OV的值時(shí),計(jì)算機(jī)總是把操作數(shù)當(dāng)作帶符號(hào)數(shù)來(lái)對(duì)待。在作加法運(yùn)算時(shí),一個(gè)正數(shù)和一個(gè)負(fù)數(shù)相加是不可能產(chǎn)生溢出的,只有兩個(gè)同符號(hào)數(shù)相
40、加才有可能產(chǎn)生溢出,表示運(yùn)算結(jié)果出錯(cuò)。 第第3章章 指令系統(tǒng)指令系統(tǒng) (4) 加法指令還會(huì)影響半進(jìn)位標(biāo)志半進(jìn)位標(biāo)志ACAC和奇偶標(biāo)志P。在上述例子中, 由于D3相加對(duì)D4沒(méi)有進(jìn)位,所以AC=0, 而由于運(yùn)算結(jié)果A中1的數(shù)目為偶數(shù), 故P=0。 例如: 設(shè)(A)=49H, (R0)=6BH, 執(zhí)行指令: ADD A, R0 ; (A) (A)+(R0) , 28 結(jié)果為:(A)=B4H, OV=1, CY=0, AC=1, P=0第第3章章 指令系統(tǒng)指令系統(tǒng)2. 帶進(jìn)位加法指令帶進(jìn)位加法指令 帶進(jìn)位加法指令有如下4條指令, 其助記符為ADDC。 ADDC A, data ; (A)(A)+(CY
41、)+data , 34 dataADDC A, direct; (A)(A)+(CY)+(direct), 35 directADDC A, Ri ; (A)(A)+(CY)+(Ri) , 3637ADDC A, Rn ; (A)(A)+(CY)+(Rn) , 383F第第3章章 指令系統(tǒng)指令系統(tǒng)例如:設(shè)(A)=0C3H, 數(shù)據(jù)指針低位(DPL)=ABH, CY=1執(zhí)行指令:ADDC A,DPL;(A)(A)+(CY)+(DPL)結(jié)果為:(A)=6EH, CY=1, OV=1, AC=0, P=1。 1100 0011B + 1010 1011B 1 0110 1110B第第3章章 指令系統(tǒng)指
42、令系統(tǒng)例1:雙字節(jié)無(wú)符號(hào)數(shù)加法(R0 R1)+(R2 R3)(R4 R5) R0、R2、R4存放16位數(shù)的高字節(jié), R1、R3、R5存放低字節(jié)。由于沒(méi)有16位數(shù)加法指令,所以只能先加低8位,后加高8位,而在加高8位時(shí)要連低8位相加時(shí)產(chǎn)生的進(jìn)位一起相加。假設(shè)其和不超過(guò)16位, 其編程如下: MOV A, R1 ; 取被加數(shù)低字節(jié)取被加數(shù)低字節(jié)ADD A, R3 ; 低字節(jié)相加低字節(jié)相加MOV R5, A ; 保存和低字節(jié)保存和低字節(jié)MOV A, R0 ; 取高字節(jié)被加數(shù)取高字節(jié)被加數(shù)ADDC A, R2 ; 兩高字節(jié)之和加低位進(jìn)位兩高字節(jié)之和加低位進(jìn)位MOV R4, A ; 保存和高字節(jié)保存和高
43、字節(jié)第第3章章 指令系統(tǒng)指令系統(tǒng)3. 帶借位減法帶借位減法 帶借位減法指令有如下4條指令, 其助記符為SUBB。 SUBB A,data ; (A)(A)(CY)dataSUBB A,direct ; (A) (A)(CY)(direct)SUBB A,Ri ; (A) (A)(CY)(Ri)SUBB A,Rn ; (A) (A)(CY)(Rn)第第3章章 指令系統(tǒng)指令系統(tǒng) 由于減法指令只有帶借位減法指令, 因此, 若要進(jìn)行不帶借位位的減法操作, 需先清借位位, 即置CY=0。清CY有專門(mén)的指令,它屬于位操作類指令,指令為: CLR C ; (CY) 0 , C3例如: 設(shè)(A)=52H, (
44、R0)=B4H 執(zhí)行指令: CLR C ; (CY)0 SUBB A, R0 ; (A) (A)(CY)(R0) 結(jié)果為: (A)=9EH, CY=1, AC=1, OV=1, P=1。 沒(méi)有這條指令會(huì)怎么樣?第第3章章 指令系統(tǒng)指令系統(tǒng)例2: 雙字節(jié)無(wú)符號(hào)數(shù)相減(R0 R1)(R2 R3) (R4 R5)。R0、R2、R4存放16位數(shù)的高字節(jié), R1、R3、R5存放低字節(jié),先減低8位,后減高8位和低位減借位。由于低位開(kāi)始減時(shí)沒(méi)有借位, 所以要先清零。其編程如下: MOV A, R1 ; 取被減數(shù)低字節(jié) CLR C ; 清借位位 SUBB A, R3 ; 低字節(jié)相減 MOV R5, A ; 保
45、存差低字節(jié) MOV A, R0 ; 取被減數(shù)高字節(jié) SUBB A, R2 ; 兩高字節(jié)差減低位借位 MOV R4, A ; 保存差高字節(jié)第第3章章 指令系統(tǒng)指令系統(tǒng)4. 加1, 減1指令加1指令共有如下5條指令, 助記符為INC。 INC A ; (A) (A)+1INC direct ; (direct) (direct)+1INC Ri ; (Ri) (Ri)+1INC Rn ; (Rn) (Rn)+1INC DPTR ; (DPTR) (DPTR)+1 加加1 1指令指令不影響各標(biāo)志位指令指令不影響各標(biāo)志位! !第第3章章 指令系統(tǒng)指令系統(tǒng)減1指令有如下4條指令, 助記符為DEC。 DE
46、C A ; (A) (A)1DEC direct ; (direct) (direct)1DEC Ri ; (Ri) (Ri)1DEC Rn ; (Rn) (Rn)1 減減1 1指令指令不影響各標(biāo)志位指令指令不影響各標(biāo)志位! !第第3章章 指令系統(tǒng)指令系統(tǒng) 例如: 設(shè)(R0)=7EH, (7EH)=FFH, (7FH)=38H, (DPTR)=10FEH, 分析逐條執(zhí)行下列指令后各單元的內(nèi)容。 INC R0 ; 使7EH單元內(nèi)容由FFH變?yōu)?0HINC R0 ; 使R0的內(nèi)容由7EH變?yōu)?FHINC R0 ; 使7FH單元內(nèi)容由38H變?yōu)?9HINC DPTR ; 使DPL為FFH, DPH不
47、變INC DPTR ; 使DPL為00H, DPH為11H(INC DPL)INC DPTR ; 使DPL為01H, DPH不變 第第3章章 指令系統(tǒng)指令系統(tǒng)5. 乘、 除法指令 乘、除法指令為單字節(jié)4周期指令, 在指令執(zhí)行周期中是最長(zhǎng)的兩條指令。 (1) 乘法指令MUL AB (B)(A)(B)158, (A)(A)(B)70 (CY)0 A4第第3章章 指令系統(tǒng)指令系統(tǒng) 乘法指令的功能是把累加器A和寄存器B中的兩個(gè)8位無(wú)符號(hào)數(shù)相乘位無(wú)符號(hào)數(shù)相乘, 將乘積16位數(shù)中的低8位存放在A中, 高8位存放在B中。若乘積大于FFH(255), 則溢出標(biāo)志OV置1, 否則OV清0。乘法指令執(zhí)行后進(jìn)位標(biāo)志
48、CY總是清零, 即CY=0。 另外, 乘法指令本身只能進(jìn)行兩個(gè)8位數(shù)的乘法運(yùn)算, 要進(jìn)行多字節(jié)乘法還需編寫(xiě)相應(yīng)的程序。 例如: 若(A)=4EH(78), (B)=5DH(93) 執(zhí)行指令: MUL AB 結(jié)果為: 積為(BA)=1C56H(7254) FFH(255), (A)=56H, (B)=1CH, OV=1, CY=0, P=0。 第第3章章 指令系統(tǒng)指令系統(tǒng)例3: 利用單字節(jié)乘法指令進(jìn)行雙字節(jié)數(shù)乘以單字節(jié)數(shù)運(yùn)算。若被乘數(shù)為16位無(wú)符號(hào)數(shù), 地址為M1和M1+1(低位先、高位后), 乘數(shù)為8位無(wú)符號(hào)數(shù), 地址為M2, 積存入R2、 R3和R4三個(gè)寄存器中。 R2 R3 R4 R3 R
49、4 (M1+1) (M1) (M2) B A第第3章章 指令系統(tǒng)指令系統(tǒng)參考程序如下: MOV R0, M1 ; 被乘數(shù)地址存于R0 MOV A, R0 ; 取16位數(shù)低8位 MOV B, M2 ; 取乘數(shù) MUL AB ; (M1)(M2) MOV R4, A ; 存積低8位 MOV R3, B ; 暫存(M1)(M2)高8位 INC R0 ; 指向16位數(shù)高8位 MOV A, R0 ; 取被乘數(shù)高8位 第第3章章 指令系統(tǒng)指令系統(tǒng) MOV B , M2 ; 取乘數(shù) MUL AB ; (M1+1)(M2) ADD A, R3 ; (A)+(R3)得(積)158 MOV R3, A ; (積)
50、158存R3 MOV A, B ; 積最高8位送A ADDC A, 00H ; 積最高8位+CY得(積)2316 MOV R2, A ; (積)2316存入R2若上述程序執(zhí)行前:(M1+1)=ABH,(M1)=CDH, (M2)=64H。 則執(zhí)行后: (R2)=43H, (R3)=1CH, (R4)=14H。 第第3章章 指令系統(tǒng)指令系統(tǒng) (2) 除法指令 DIV A B ; , 84 (A)(A)(B)之商,(B)(A)(B)之余數(shù) (CY)0, (OV)0 除法指令的功能是把累加器A中的8位無(wú)符號(hào)整數(shù)除以寄存器B中的8位無(wú)符號(hào)整數(shù), 所得商存于累加器A中, 余數(shù)存于寄存器B中, 進(jìn)位標(biāo)志C
51、Y和溢出標(biāo)志OV均被清零。若除數(shù)B中的內(nèi)容為0時(shí), 除法運(yùn)算沒(méi)有意義, 結(jié)果為不定值, 此時(shí)溢出標(biāo)志OV被置為1 , 即OV=1, 而CY仍為0。 第第3章章 指令系統(tǒng)指令系統(tǒng) 例4: 利用除法指令把累加器A中的8位二進(jìn)制數(shù)轉(zhuǎn)換為3位BCD數(shù),并以壓縮形式存放在地址M1、M2單元中。 解: 累加器A中的8位二進(jìn)制數(shù),先對(duì)其除以100(64H),商數(shù)即為十進(jìn)制的百位數(shù);余數(shù)部分再除以10 (0AH), 所得商數(shù)和余數(shù)分別為十進(jìn)制十位數(shù)和個(gè)位數(shù), 即得到3位BCD數(shù)。百位數(shù)放在M1中, 十位、個(gè)位數(shù)壓縮BCD數(shù)放在M2中, 十位與個(gè)位數(shù)的壓縮BCD數(shù)的存放是通過(guò)SWAP和ADD指令實(shí)現(xiàn)的。 參考程
52、序如下: 第第3章章 指令系統(tǒng)指令系統(tǒng)MOV B, 64H ; 除數(shù)100 送BDIV AB ; 得百位數(shù) MOV M1, A ; 百位數(shù)存于M1中MOV A, 0AH ; 取除數(shù)10 XCH A, B ; 上述余數(shù)與除數(shù)交換DIV AB ; 得十位數(shù)和個(gè)位數(shù)SWAP A ; 十位數(shù)存于A的高4位ADD A, B ; 組成壓縮BCD數(shù)MOV M2, A ; 十、 個(gè)位壓縮BCD數(shù)存M2 若上述程序執(zhí)行前: (A)=A8H (168), 則執(zhí)行后: (M1)=(01)BCD, (M2)=(68)BCD。 第第3章章 指令系統(tǒng)指令系統(tǒng)6. 十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令 十進(jìn)制調(diào)整指令是一條對(duì)二十進(jìn)
53、制的加法進(jìn)行調(diào)整的指令。 兩個(gè)壓縮BCD碼按二進(jìn)制相加, 必須經(jīng)過(guò)本條指令調(diào)整后才能得到正確的壓縮BCD碼和數(shù), 實(shí)現(xiàn)十進(jìn)制的加法運(yùn)算。 由于指令要利用AC、 CY等標(biāo)志才能起到正確的調(diào)整作用, 因此它必須跟在加法ADD、 ADDC指令后面方可使用。 , D4DA A若(A)309或(AC)=1, 則(A)70(A)70+06H 若(A)749或(CY)=1, 則(A)74(A)74+06H 第第3章章 指令系統(tǒng)指令系統(tǒng)例5: 對(duì)BCD碼加法65+58BDH, 進(jìn)行十進(jìn)制調(diào)整。 解:參考程序如下: MOV A, 65H ; (A) 65 ADD A, 58H ; (A) (A)+58 DA A
54、 ; 十進(jìn)制調(diào)整 執(zhí)行結(jié)果: (A)=(23)BCD , (CY)=1, 即: 65+58=123。 01100101 65 + 01011000 58 10111101 BD + 01100110 加66H調(diào)整 1 00100011 第第3章章 指令系統(tǒng)指令系統(tǒng)例6: 雙字節(jié)壓縮BCD碼加法。 解: 設(shè)R5(高)、 R4(低)為被加數(shù); R3(高)、 R2(低)為加數(shù), 相加和的結(jié)果存入: R6(萬(wàn))、R5(千、百)、R4(十、 個(gè))。參考程序如下: MOV A, R4 ; 被加數(shù)十位、 個(gè)位送入A ADD A, R2 ; 十位、 個(gè)位相加 DA A ; 和的十位、 個(gè)位調(diào)整 MOV R4,
55、 A ; 和的十位、 個(gè)位存入R4 MOV A , R5 ; 被加數(shù)千位、 百位送入A ADDC A, R3 ; 千位、 百位的和加低位進(jìn)位第第3章章 指令系統(tǒng)指令系統(tǒng) DA A ; 和的千位、 百位調(diào)整 MOV R5, A ; 和的千位、 百位存入R5 MOV A, 00H ; A清零 ADDCA, 00H ; 求和的萬(wàn)位值 MOV R6, A ; 和的萬(wàn)位存入R6 若程序執(zhí)行前: (R5)=(98)BCD, (R4)=(76) BCD , (R3)=(54)BCD , (R2)=(32)BCD , 則執(zhí)行后: (R6)=(01) BCD , (R5)=(53)BCD ,(R4)=(08)
56、BCD 。 第第3章章 指令系統(tǒng)指令系統(tǒng)例7: 利用十進(jìn)制加法調(diào)整指令DA作十進(jìn)制減法調(diào)整。 解: 由于DA指令不能直接對(duì)減法進(jìn)行十進(jìn)制調(diào)整, 為了進(jìn)行十進(jìn)制減法運(yùn)算, 只能用加減數(shù)的補(bǔ)數(shù)來(lái)進(jìn)行。兩位十進(jìn)制數(shù)是對(duì)100取補(bǔ)的, 如60-30=30, 也可改為補(bǔ)數(shù)相加: 60+(100-30)= 1 30 丟掉進(jìn)位(模)100后, 就得到正確的結(jié)果。 第第3章章 指令系統(tǒng)指令系統(tǒng) 在實(shí)際運(yùn)算時(shí), 由于CPU為8位, 不可能用9位二進(jìn)制數(shù)表示十進(jìn)制數(shù)100,但可用8位二進(jìn)制數(shù)10011010(9AH)代替, 因?yàn)檫@個(gè)二進(jìn)制數(shù)經(jīng)過(guò)十進(jìn)制調(diào)整后就是100000000。 這樣十進(jìn)制無(wú)符號(hào)數(shù)的減法運(yùn)算可按
57、以下步驟進(jìn)行: (1) 求減數(shù)的補(bǔ)數(shù)(9AH-減數(shù)); (2) 被減數(shù)與減數(shù)的補(bǔ)數(shù)相加; (3) 經(jīng)DA指令調(diào)整后就得到所求的十進(jìn)制減法運(yùn)算結(jié)果。 第第3章章 指令系統(tǒng)指令系統(tǒng) 這里用“補(bǔ)數(shù)”而不是“補(bǔ)碼”是為了和帶符號(hào)位的補(bǔ)碼加以區(qū)別。 由于現(xiàn)在操作數(shù)都是正數(shù), 沒(méi)有必要再加符號(hào)位, 故稱“補(bǔ)數(shù)”更為合適一些。 設(shè)M1、 M2、 M3 分別為被減數(shù)、減數(shù)和差的符號(hào)地址, 相應(yīng)的十進(jìn)制減法運(yùn)算程序如下: CLR C ; CY清0 MOV A, 9AH ; (A) 9AH SUBB A, M2 ; 求減數(shù)的補(bǔ)數(shù) ADD A, M1 ; 加補(bǔ)數(shù)完成減法 DA A ; 十進(jìn)制調(diào)整 MOV M3, A
58、 ; 差存入M3單元 若程序執(zhí)行前: (M1)=(91)BCD,(M2)=(36)BCD, 則程序執(zhí)行后: (M3)=(55)BCD。第第3章章 指令系統(tǒng)指令系統(tǒng)1. 4位壓縮的BCD碼在R0R1,R0高2位,R1低2位,請(qǐng)編寫(xiě)出其自加1的程序。2. 4位壓縮的BCD碼在R0R1,R0高2位,R1低2位,請(qǐng)編寫(xiě)出其自減1的程序。第第3章章 指令系統(tǒng)指令系統(tǒng)(1)XCH A,R0(2)SWAP A (3)ADDC A,30H(4)RLC A(5)SUBB A,#0AH(6)ANL A,#0FH(7)ORL A,R0(8)XRL A,#30H(9)INC A(10)CPL A思考題:已知(A)=1
59、AH,(R0)=30H,(30H)=17H,(PSW)=81H,問(wèn)單獨(dú)執(zhí)行以下各指令后A,PSW的結(jié)果。第第3章章 指令系統(tǒng)指令系統(tǒng)(A)= 30H ,(PSW)= 80H(A)= 0A1H ,(PSW)= 81H(A)= 31H ,(PSW)= 41H(A)= 30H ,(PSW)= 80H(A)= 30H ,(PSW)= 80H(A)= 30H ,(PSW)= 80H(A)= 30H ,(PSW)= 80H(A)= 30H ,(PSW)= 80H(A)= 30H ,(PSW)= 80H(A)= 30H ,(PSW)= 80H第第3章章 指令系統(tǒng)指令系統(tǒng)(A)= 30H ,(PSW)= 80
60、H(A)= 30H ,(PSW)= 80H(A)= 30H ,(PSW)= 80H(A)= 30H ,(PSW)= 80H(A)= 30H ,(PSW)= 80H(A)= 30H ,(PSW)= 80H(A)= 30H ,(PSW)= 80H第第3章章 指令系統(tǒng)指令系統(tǒng)已知:(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H。MOV A,40HMOV R0,AMOV P1,#0F0HMOV R0,30HMOV DPTR,#3848HMOV 40H,38HMOV R0,30HMOV 0D0H,R0MOV 18H,R0MOV P2,P1第第3章章 指令系統(tǒng)指令系統(tǒng) 3.
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年滬教版八年級(jí)物理下冊(cè)月考試卷含答案
- 2025年粵教滬科版選擇性必修3歷史下冊(cè)階段測(cè)試試卷含答案
- 2025年粵教新版八年級(jí)地理下冊(cè)階段測(cè)試試卷
- 2025年蘇教版七年級(jí)生物下冊(cè)月考試卷
- 遵義職業(yè)技術(shù)學(xué)院《中國(guó)古代文學(xué)與中學(xué)語(yǔ)文教育》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五版木工雕刻藝術(shù)創(chuàng)作授權(quán)合同4篇
- 2025年度農(nóng)用拖拉機(jī)租賃與農(nóng)產(chǎn)品溯源合同4篇
- 二零二五年度金融行業(yè)派遣勞務(wù)安全保障合同4篇
- 2025年度屋頂綠化租賃與節(jié)能減排合同4篇
- 二零二五年倉(cāng)儲(chǔ)設(shè)備采購(gòu)與運(yùn)輸合同3篇
- 2024年英語(yǔ)高考全國(guó)各地完形填空試題及解析
- 智能養(yǎng)老院視頻監(jiān)控技術(shù)方案
- 你比我猜題庫(kù)課件
- 體育概論(第二版)課件第三章體育目的
- 無(wú)人駕駛航空器安全操作理論復(fù)習(xí)測(cè)試附答案
- 建筑工地春節(jié)留守人員安全技術(shù)交底
- 默納克-NICE1000技術(shù)交流-V1.0
- 蝴蝶蘭的簡(jiǎn)介
- 老年人心理健康量表(含評(píng)分)
- 《小兒靜脈輸液速度》課件
- 營(yíng)銷人員薪酬標(biāo)準(zhǔn)及績(jī)效考核辦法
評(píng)論
0/150
提交評(píng)論