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

下載本文檔

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

文檔簡介

1、教學(xué)單位:云南大學(xué)軟件學(xué)院教學(xué)單位:云南大學(xué)軟件學(xué)院教師:王逍教師:王逍80X8680X86計(jì)算機(jī)組成與匯編語言計(jì)算機(jī)組成與匯編語言第三章第三章 80 x86cpu 指令系統(tǒng)指令系統(tǒng) 指令 或稱為語句,是源程序中最小的代碼單元,源程序就是由一條一條的語句構(gòu)成。全部指令的集合稱為指令系統(tǒng),其確定了cpu所能實(shí)現(xiàn)全部功能。 機(jī)器指令 由二進(jìn)制數(shù)組成,計(jì)算機(jī)硬件只能識(shí)別存儲(chǔ)和運(yùn)行機(jī)器指令。 助記符/符號(hào)指令/匯編指令 80X86匯編語言的指令助記符表示操作碼,用符號(hào)或符號(hào)地址表示操作數(shù)或操作數(shù)地址,它與機(jī)器指令基本上是一一對(duì)應(yīng)的。 指令的結(jié)構(gòu)指令的結(jié)構(gòu) 計(jì)算機(jī)的指令包括:操作碼 操作數(shù) 操作的性質(zhì)操

2、作的對(duì)象 (1或2個(gè)字節(jié))+ 存放在(位置不同) 寄存器、存儲(chǔ)器、I/O端口地址、立即數(shù)(由尋址方式?jīng)Q定) 機(jī)器指令由操作碼字段和操作數(shù)字段兩部分組成。字段:說明cpu完成何種操作。在機(jī)器指令中對(duì)每個(gè)操作碼對(duì)應(yīng)一個(gè)唯一的二進(jìn)制編碼。字段:也稱,說明參加操作的數(shù)據(jù)對(duì)象本身或保存數(shù)據(jù)對(duì)象的位置。操作數(shù)字段可以有一個(gè),二個(gè)或三個(gè)操作數(shù)或0個(gè)。 指令的分類指令的分類 根據(jù)操作數(shù)的個(gè)數(shù) 單操作數(shù)、雙操作數(shù)、無操作數(shù) 指令書寫格式 操作碼 操作數(shù)1,操作數(shù)2, 指令的編碼 80X86 CPU指令系統(tǒng)采用變長的指令格式。 一條指令可以由116個(gè)字節(jié)組成??赡苄枰加眠B續(xù)多個(gè)的存儲(chǔ)單元,存放指令的第一個(gè)存儲(chǔ)單

3、元地址稱為。 一條指令可能包含需要操作的對(duì)象即操作數(shù),也可能占用內(nèi)存的多個(gè)存儲(chǔ)單元。 一個(gè)操作數(shù)如果占用連續(xù)多個(gè)的存儲(chǔ)單元,也是進(jìn)行連續(xù)存放,其中,操作數(shù)的低位存放在低地址存儲(chǔ)單元中,高位存放在高地址部分。存放數(shù)據(jù)的第一個(gè)存儲(chǔ)單元地址稱為。 尋址方式尋址方式 尋址方式的定義 指令中說明操作數(shù)所在地址的方法。 尋址:操作數(shù)所在的位置 操作數(shù)所在的位置 1、 指令代碼中,這種操作數(shù)為立即數(shù)。 例:MOV AL , 08H 2、cpu內(nèi)部的通用寄存器或段寄存器中,這種操作數(shù)為寄存器操作數(shù)。 例:INC CX 3、存儲(chǔ)單元中,這種操作數(shù)為內(nèi)存操作數(shù)。 內(nèi)存操作數(shù)占用一個(gè)或者連續(xù)多個(gè)存儲(chǔ)單元中。機(jī)器指令

4、中操作數(shù)字段包含著此操作數(shù)所在的第一個(gè)存儲(chǔ)單元的邏輯地址。 4、輸入/輸出端口中,這種操作數(shù)為端口操作數(shù)。 尋址方式分類尋址方式分類 1、隱含尋址方式 2、數(shù)據(jù)型操作數(shù)尋址方式 3、目標(biāo)尋址方式立即尋址方式寄存器直接尋址方式直接尋址方式寄存器間接尋址方式寄存器相對(duì)尋址方式基址變址尋址相對(duì)基址變址尋址*比例尋址*串操作尋址* I/O端口尋址相對(duì)程序?qū)ぶ分苯映绦驅(qū)ぶ烽g接程序?qū)ぶ?數(shù)據(jù)型操作數(shù)尋址方式數(shù)據(jù)型操作數(shù)尋址方式一、立即尋址方式 (Immediate Addressing) 1 1含義:操作數(shù)是立即數(shù)(即8位,16位或32位的常數(shù)),直接包含在指令中。 2 2特點(diǎn):翻譯成機(jī)器碼時(shí),立即數(shù)是指

5、令的一部分,緊跟在操作碼之后存放在代碼段內(nèi)。在取出指令的同時(shí)也就取出了操作數(shù),立即有操作數(shù)可用,所以稱之為立即尋址。如果立即數(shù)是l6/32l6/32位數(shù):高字節(jié)高地址單元,低字節(jié)低地址單元 3 3作用: 常用于給寄存器賦初值 4、注意:立即數(shù)可以送到寄存器、一個(gè)存儲(chǔ)單元(8位)、兩個(gè)連續(xù)的存儲(chǔ)單元(16位)中去;立即數(shù)只能作源操作數(shù),不能作目的操作數(shù);以AF打頭的數(shù)字出現(xiàn)在指令中時(shí),前面必須加數(shù)字0。以免與其它符號(hào)相混淆(如:MOV AX 0FF00H)。例:MOV CX,2A50H;指令的編碼格式如圖 MOV CX, 2A50H 例: 立即數(shù)尋址 MOV AL,01010101B MOV A

6、X,-120 MOV AX,A0H ;思考:指令是否正確? MOV EAX,12345678H MOV DL,;A為立即數(shù)尋址 MOV CX,3*5 MOV BX,1234H MOV BX,34H ;思考:指令是否正確? MOV BL,1234H ;思考:指令是否正確? MOV CL,4 MOV CL,300 ;思考:指令是否正確? ;對(duì)比:C語言中,char c=300是否正確?二、寄存器(直接)尋址方式 (Register Addressing) 1 1含義:操作數(shù)包含在寄存器中,寄存器的名稱由指令指定。 2 2特點(diǎn):3232位操作數(shù)寄存器可以是EAXEAX、EBXEBX、ECXECX、E

7、DXEDX、ESIESI、EDIEDI、ESPESP、EBPEBP等;1616位操作數(shù)寄存器可以是AXAX、BXBX、CXCX、DXDX、SISI、DIDI、SPSP和BPBP等。8 8位操作數(shù):寄存器AHAH、ALAL、BHBH、BLBL、CHCH、CLCL、DHDH和DLDL。 3 3作用:寄存器之間傳遞數(shù)據(jù)。 4 4注意:源操作數(shù)的長度必須與目的操作數(shù)致。MOV BL,BX不允許段寄存器間直接傳輸。MOV ES,DS不允許代碼段寄存器作為目標(biāo)操作數(shù)。 MOV ,AX內(nèi)存操作數(shù)的尋址方式 (Register Addressing) 絕大多數(shù)操作數(shù)存放在一個(gè)或連續(xù)多個(gè)代碼段以外的中。 CPU

8、執(zhí)行指令時(shí)根據(jù)程序中的邏輯地址自動(dòng)轉(zhuǎn)換得到物理地址后尋址某個(gè)存儲(chǔ)單元,最后取出其中的信息。 任何一個(gè)內(nèi)存單元的地址()實(shí)際上由兩部分組成: 1、段的基地址:該存儲(chǔ)單元所在段的基地址,即該段的第一個(gè)存儲(chǔ)單元的地址(如果是尋找操作數(shù),在大多數(shù)情況下,數(shù)據(jù)存放在數(shù)據(jù)段寄存器DS中); 2、段內(nèi)偏移量:該存儲(chǔ)單元相對(duì)于所在段的段基址的距離/偏移量。稱為偏移地址或者有效地址( EA, Effective Address) 。 段基址和偏移地址合稱為邏輯地址。CPU在尋找某個(gè)存儲(chǔ)單元時(shí)根據(jù)邏輯地址的段基址和偏移地址就能形成(由CPU的地址生成部分自動(dòng)完成)最終的物理地址,從而找到相應(yīng)的存儲(chǔ)單元。在存儲(chǔ)器操

9、作數(shù)尋址方式中,一個(gè)存儲(chǔ)單元完整的邏輯地址表達(dá)式為: 段R:基址R變址R *比例因子位移量冒號(hào)之前稱為段超越前綴助記符(簡稱段超越前綴),用于通知CPU在生成物理地址時(shí)應(yīng)該使用那個(gè)段寄存器的內(nèi)容以獲取邏輯段的段基址。冒號(hào)之后的部分稱為有效/偏移地址表達(dá)式。用來通知CPU在生成物理地址時(shí)在一個(gè)邏輯段中的某個(gè)存儲(chǔ)單元,相對(duì)于段基址的偏移/有效地址。 表示括號(hào)中的內(nèi)容是存儲(chǔ)單元的偏移/有效地址、而不是操作數(shù)本身。有效地址(EA):在一個(gè)邏輯段中,某存儲(chǔ)存儲(chǔ)單元相對(duì)于段首址的地址位移量。有效地址(EA)的組成部分: 基址:存放在基址寄存器 變址:存放在變址寄存器 比例因子:386及其后繼機(jī)型新增加的術(shù)

10、語。其值可為1,2,4,或8,可用變址寄存器的內(nèi)容乘以比例因子來取得變址值 位移量:存放在指令中的一個(gè)8/16/32位的數(shù),但它不是一個(gè)立即數(shù),而是一個(gè)位移量(偏移地址的一部分)。表表 16/32位尋址時(shí)偏移地址的構(gòu)成位尋址時(shí)偏移地址的構(gòu)成16位尋址32位尋址基址寄存器任何32位的通用寄存器變址寄存器除ESP以外的32位通用寄存器比例因子無1,2,4,8位移量字長0,8,160,8,3280 x86指令系統(tǒng)提供了多種存儲(chǔ)器尋址方式。 直接尋址; 寄存器間接尋址; 基址尋址; 變址尋址; 基址加變址。三、直接尋址方式(Direct Addressing) 1 1含義:存儲(chǔ)單元的有效地址EAEA(

11、即:操作數(shù)的偏移地址)由指令的操作數(shù)字段中直接給出。 即:EA操作數(shù) 操作數(shù)可以是8位,16位,32位(僅在保護(hù)模式中)。 2 2特點(diǎn):機(jī)器碼中,有效地址有效地址存放在代碼段中指令的操作碼之后,而該地址單元中的數(shù)據(jù)數(shù)據(jù)總是存放中中。須先先求出操作數(shù)的物理地址,再再從存儲(chǔ)器中取得操作數(shù)。操作數(shù)的物理地址物理地址16 EA 3 3作用: 實(shí)現(xiàn)對(duì)存儲(chǔ)單元的讀/寫操作。 4. 段超越前綴:可以使用段超越前綴指定段地址,省略時(shí)默認(rèn)為DS。 例 MOV AX,ES:100 Debug中應(yīng)該寫位 es:mov ax,100 物理地址= 1616100100 6.6.符號(hào)地址匯編語言中一般用符號(hào)地址代替直接數(shù)

12、值地址,由編譯器來計(jì)算操作數(shù)的有效直接地址,防止人工計(jì)算地址出錯(cuò)。例:AREA1 DW 0867HMOV AX, AREA1MOV AX, AREA1MOV AX, ES:AREA1區(qū)分:MOV AL,78HMOV AL,78HMOV AX,DS:78HMOV AL,ES:78H例 MOV AX,2000H解: 設(shè)DS = 3000H,由指令得:EA = 2000H (16位邏輯地址) 物理地址=163000H2000H= 32000H (20位,20根地址線) 設(shè)32000H地址單元的內(nèi)容為1234H,即(32000H)= 1234H 則: AX = 1234H 指令執(zhí)行過程如圖所示。(注:

13、如用AL替代AX,則AL=34H)四、寄存器間接尋址方式(Register Indirect Addressing)(Register Indirect Addressing) 1 1含義: 操作數(shù)的有效地址EAEA放在寄存器中,寄存器在中括號(hào)中 ,寄存器稱為間接寄存器。 EA=間接寄存器 寄存器的內(nèi)容并不是操作數(shù),而是操作數(shù)所在的內(nèi)存中某個(gè)存儲(chǔ)單元的偏移地址。 2 21616位尋址可以使用的寄存器有可以使用的寄存器有:基址寄存器BX、 BP,變址寄存器SI、DI 。如果使用BX、SI、DI寄存器,則默認(rèn)操作數(shù)在數(shù)據(jù)段DS中如果使用BP寄存器,則默認(rèn)操作數(shù)在堆棧段SS中操作數(shù)的物理地址操作數(shù)的

14、物理地址 16DS BX/SI/DI 或 16SS BP 四、寄存器間接尋址方式(Register Indirect Addressing)(Register Indirect Addressing) 3 33232位尋址可以使用的寄存器有可以使用的寄存器有: EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP 。如果使用EBP,ESP寄存器,則默認(rèn)操作數(shù)在堆棧段SS中;使用其他寄存器,則默認(rèn)操作數(shù)在數(shù)據(jù)段DS中操作數(shù)的物理地址操作數(shù)的物理地址 16DS EAX/EBX/ECX/EDX/ESI/EDI 或 16SS EBP/ESP 4 4作用: 實(shí)現(xiàn)對(duì)存儲(chǔ)單元的讀/寫操作。 例 M

15、OV BX,SI 解:設(shè):DS1000H,SI2000H,(12000H)318BH 則:物理地址 16DS SI 10000H 2000H 12000H 指令執(zhí)行后,BX318BH,指令執(zhí)行過程如圖所示。 4 4注意: 寄存器名稱外必須加方括號(hào)方括號(hào),以區(qū)別寄存器直接尋址方式; 不允許使用8位寄存器; 可以使用段超越前綴段超越前綴來從默認(rèn)段段中取得數(shù)據(jù); 例: MOV BX,ES:SI; MOV FS:EBP, DL;Debug與debug32的不同:debug中輸入es:mov bx,sidebug32中輸入mov dl,fs:ebp區(qū)分:MOV AL,BX ; MOV AL,BX五、寄存

16、器相對(duì)尋址方式(Register Relative (Register Relative Addressing)Addressing) 1 11616位尋址含義:操作數(shù)的有效地址是基址寄存器BX,BPBX,BP變址寄存器SI,DISI,DI的內(nèi)容與8位或16位位移量(Displacement)之和。即 BX / BP EA = SI / DI 2 2 1616位尋址特點(diǎn): 可以使用寄存器:BX、BP、SI、DI 。 操作數(shù)的物理地址 16DS BX/SI/DI 或 16SS BP 五、寄存器相對(duì)尋址方式(Register Relative (Register Relative Addressi

17、ng)Addressing) 3 33232位尋址含義:操作數(shù)的有效地址是EBPEBP、ESPESP、EAXEAX、EDXEDX、ESIESI、EDIEDI、EBPEBP、ESPESP的內(nèi)容與8位或16位或32位位移量(Displacement)之和。即 EAX /EBX / ECX/ EDX EA = ESI / EDI/ EBP/ ESP 4 4 3232位尋址特點(diǎn): 操作數(shù)的物理地址 16DS EAX/EBX/ECX/EDX/ESI/EDI 或 16SS EBP/ESP 例 MOV BX,COUNT SI ;或:MOV BX,COUNTSI解:設(shè):DS3000H,SI2000H,位移量C

18、OUNT4000H, (36000H)=318BH 則:物理地址 16DS SI COUNT 30000H 2000H 4000H 36000H指令執(zhí)行后,BX318BH403000六、基址變址尋址方式(Register Relative Register Relative Addressing)Addressing) 1 1 1616位尋址含義:操作數(shù)的有效地址是一個(gè)基址寄存器( (BX、BP)的內(nèi)容一個(gè)變址寄存器(SI、DI)的內(nèi)容之和。 2 2 1616位尋址特點(diǎn):使用的寄存器:基址寄存器BX、BP,變址寄存器SI、DI 操作數(shù)的物理地址 16DS BX SI /DI 或 16SS BP

19、 SI /DI3 3注意: 寄存器SI和DI、BP和BX不能同時(shí)出現(xiàn)在 中。六、基址變址尋址方式(Register Relative Register Relative Addressing)Addressing) 3 3 3232位尋址含義:操作數(shù)的有效地址是一個(gè)基址寄存器( (EAX、EBX、 ECX、 EDX、 ESI、EDI 、EBP 、ESP )的內(nèi)容一個(gè)變址寄存器( EAX、EBX、 ECX、 EDX、 ESI、EDI 、EBP )的內(nèi)容之和。 4 4 3232位尋址特點(diǎn):使用的寄存器:基址寄存器EAX、EBX、 ECX、 EDX、ESI、EDI、EBP 、ESP ,變址寄存器EA

20、X、EBX、 ECX、 EDX、ESI、EDI、EBP 操作數(shù)的物理地址 16DS EAX/EBX/ECX/EDX ESI /EDI 或 16SS EBP/ESP ESI /EDI例 MOV AX, BX SI;或:MOV BX,BXSI解:設(shè):DS3000H,SI0500H,BX1200H, (31700H)=0ABCDH 則:物理地址 16DS SI BX 30000H 0500H 1200H 31700H指令執(zhí)行后:AX0ABCDH七、相對(duì)基址變址尋址方式(Relative Based Indexed Addressing) 1 1 1616位尋址含義: 操作數(shù)的有效地址是一個(gè)基址寄存器

21、(BX、BP)和一個(gè)變址寄存器(SI、DI)的內(nèi)容,即 BX SI EA= + BP DI 2 2 1616位尋址特點(diǎn): 使用的寄存器:基址寄存器BX、BP,變址寄存器SI、DI 。 操作數(shù)的物理地址 16DS BX SI /DI 8/16位位移量 或 16SS BP SI /DI 8/16位位移量3 3注意:寄存器SI和DI、BP和BX不能同時(shí)出現(xiàn)在 中。七、相對(duì)基址變址尋址方式(Relative Based Indexed Addressing) 3 3 3232位尋址含義: 操作數(shù)的有效地址是一個(gè)基址寄存器( EAX、EBX、 ECX、 EDX、 ESI、EDI 、EBP 、ESP )和

22、一個(gè)變址寄存器( EAX、EBX、 ECX、 EDX、 ESI、EDI 、EBP )的內(nèi)容,即EAX /EBX /ECX /EDX/ EBP/ ESP EA= + +ESI EDI 3 3 3232位尋址特點(diǎn):使用的寄存器:基址寄存器EAX、EBX、 ECX、 EDX、ESI、EDI、EBP 、ESP ,變址寄存器EAX、EBX、 ECX、 EDX、ESI、EDI、EBP操作數(shù)的物理地址 16DS EAX/EBX/ECX/EDX ESI /EDI 8/16/32位位移量 或 16SS EBP/ESP ESI /EDI 8/16/32位位移量29例 MOV AX, MASKBX SI;或:MOV

23、 BX,MASKBXSI解:設(shè):DS3000H,SI0300H,BX1500H,MASK=0200H, (21A00H)=26BFH 則:物理地址 16DS SI BX + MASK 20000H 0300H 1500H + 0200H 21A00H指令執(zhí)行后AX26BFH*八、比例變址尋址方式(Scaled Indexed Addressing) 1 1含義: 操作數(shù)的有效地址是一個(gè)32位基址寄存器+一個(gè)32位變址寄存器的內(nèi)容乘以比例因子,再加上8位或16位或32位位移量之和。 2 2特點(diǎn):使用的寄存器:基址寄存器EAX、EBX、 ECX、 EDX、ESI、EDI、EBP 、ESP ,變址寄

24、存器EAX、EBX、 ECX、 EDX、ESI、EDI、EBP 比例因子 1:字節(jié)、2:字、4:雙字、8:尋4字*八、比例變址尋址方式(Scaled Indexed Addressing) 3 3注意: 由于32位尋址方式能使用所有的通用寄存器,所以,和該有效地址相組合的段寄存器也就有新的規(guī)定。具體規(guī)定如下: 1、地址中寄存器的書寫順序決定該寄存器是基址寄存器,還是變址寄存器; 如:EBX+EBP中的EBX是基址寄存器,EBP是變址寄存器,而EBP+EBX中的EBP是基址寄存器,EBX是變址寄存器;2、默認(rèn)段寄存器的選用取決于基址寄存器;3、基址寄存器是EBP或ESP時(shí),默認(rèn)的段寄存器是SS,

25、否則,默認(rèn)的段寄存器是DS;4、在指令中,如果使用段前綴的方式,那么,顯式段寄存器優(yōu)先。*八、比例變址尋址方式(Scaled Indexed Addressing) *八、比例變址尋址方式(Scaled Indexed Addressing) *九、串操作尋址方式(Operation Way Of Addressing) 1 1含義: 用于串的傳遞,采用隱含規(guī)定的變址寄存器SI和DI,DS為源操作數(shù)的缺省段基值 2 2特點(diǎn):SI、DI獲得源操作碼地址指針和目的操作碼地址指針對(duì)SI、DI進(jìn)行自動(dòng)修改,修改方向由標(biāo)志寄存器FR中的DF方向決定,DF=1:SIDI自動(dòng)減1或2; DF=0:SIDI自

26、動(dòng)增1或2;3 3注意:字節(jié)操作時(shí)指針增減量為1,字操作時(shí)指針增減量為2。例: MOSB; MOVSW十、其它1隱含尋址: 指令中不指明操作數(shù)不指明操作數(shù),但有隱含規(guī)定隱含規(guī)定的尋址方式。 如:指令DAA 對(duì)寄存器AL中的數(shù)據(jù)中的數(shù)據(jù)進(jìn)行十進(jìn)制數(shù)調(diào)整十進(jìn)制數(shù)調(diào)整,結(jié)果仍保留在AL中。2I/O端口尋址: 8086有直接端口和間接端口兩種尋址方式兩種尋址方式。 直接端口尋址方式直接端口尋址方式:指令直接提供端口地址8位立即數(shù)位立即數(shù)??稍L問端口00FFH,即256個(gè)端口。 例如, IN AL,63H ;表示將瑞口63H中的內(nèi)容送進(jìn)AL寄存器 間接端口尋址方式間接端口尋址方式:端口地址由寄存器DX提

27、供,端口號(hào)為0000FFFFH。例如:例如: MOV DX,213H;DX=口地址號(hào)213H IN AL,DX ;AL端口213H中的內(nèi)容 3.2.4目標(biāo)地址尋址方式這種尋址方式用來確定轉(zhuǎn)移指令及CALL指令的轉(zhuǎn)向地址。一、直接程序?qū)ぶ贩绞?(Immediate Addressing) 1 1含義:直接給出指令中所需要的目標(biāo)地址信息。 2 2舉例:JMP 1000H:A000HJMP 1000H:A000H 3 3注意: 轉(zhuǎn)移的目標(biāo)地址表示 JMP LP CALL SUB1 3.2.4目標(biāo)地址尋址方式二、相對(duì)程序?qū)ぶ贩绞?(Immediate Addressing) 1 1含義:目標(biāo)地址相對(duì)于

28、當(dāng)前指令指針(取出指令后的IP值)的位置位移量disp=目標(biāo)地址IP-當(dāng)前IP值。 2 2舉例:JMP 0004H IP=JMP 0004H IP=IPIP( (當(dāng)前:0000H)+2=00020000H)+2=0002位移:0004H-0002H=20004H-0002H=2 3.2.4目標(biāo)地址尋址方式三、間接程序?qū)ぶ贩绞?(Immediate Addressing) 1 1含義:目標(biāo)地址在寄存器中或是在存儲(chǔ)器中 2 2舉例:JMP AXJMP AXJMP DI+2JMP DI+2=JMP DS:DI+2=JMP DS:DI+2 將:DSDS* *16+DI+216+DI+2地址中內(nèi)容視為目

29、標(biāo)地址: 3.3 80 x86的指令系統(tǒng)注:注:數(shù)據(jù)傳送指令共18條;除SAHF和POPF指令外,對(duì)標(biāo)志位均沒有影響。MOVMOVSXMOVZX PUSHPOPPUSHA/PUSHADPOPA/POPAD XCHGXLAT字節(jié)或字或雙字的傳送帶符號(hào)擴(kuò)展傳送 帶零擴(kuò)展傳送 入棧指令出棧指令所有寄存器進(jìn)棧 所有寄存器出棧 交換雙字或字或字節(jié)表轉(zhuǎn)換INOUT輸入輸出LEALDSLES裝入有效地址裝入數(shù)據(jù)段寄存器裝入堆棧段寄存器LAHFSAHFPUSHF/ PUSHFDPOPF/ POPFD標(biāo)志寄存器低字節(jié)裝入AHAH內(nèi)容裝入標(biāo)志寄存器低字節(jié)標(biāo)志寄存器入棧指令出棧,并送入標(biāo)志寄存器3.3.1 傳送類指

30、令: 1通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令(General Purpose Data Tranfer) MOV傳送指令(Move) 指令格式:指令格式:MOV 目的(dest),源(src);dest src 指令功能:指令功能:實(shí)現(xiàn)CPU的內(nèi)部寄存器內(nèi)部寄存器間間或或寄存器寄存器與與存儲(chǔ)器存儲(chǔ)器間間的數(shù)據(jù)傳送。注意:注意:指令中至少要有項(xiàng)明確說明傳送的是字節(jié)還是字還是雙字;IP/EIP寄存器不能用作源操作數(shù)或目的操作數(shù);立即數(shù)和CS寄存器不能用作目的操作數(shù);MOV指令不能在,也不能在。立即數(shù)立即數(shù)段寄存器段寄存器CS DS ES SS CS DS ES SS FS GSFS GS通用寄存器通用

31、寄存器(E)AX (E)BX (E)CX (E)AX (E)BX (E)CX (E)DX (E)SP (E)BP (E)DX (E)SP (E)BP (E)DI (E)SI(E)DI (E)SI存存儲(chǔ)儲(chǔ)器器 1通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令(General Purpose Data Tranfer) MOVSX/ MOVZX傳送 指令格式:指令格式:MOVSX/MOVZX 目的(dest),源(src); 指令功能:指令功能:將源操作數(shù)擴(kuò)展傳送到目的操作數(shù), 80386及以上使用 MOVSX的源操作數(shù)應(yīng)為帶符號(hào)整數(shù),帶符號(hào)擴(kuò)展指令; MOVZX的源操作數(shù)應(yīng)為無符號(hào)整數(shù),所以做零擴(kuò)展。 源操作

32、數(shù)可以是8位或16位的寄存器或存儲(chǔ)器單元的內(nèi)容,而目的操作數(shù)必須是16位或是32位的寄存器。MOVSX/ MOVZX不影響標(biāo)志位。例 MOVSX EAX,CL 把CL寄存器中的8位數(shù),符號(hào)擴(kuò)展為32位數(shù),送到EAX寄存器中。例MOVSX EDX,EDI 把DS段中由EDI內(nèi)容指定地址的16位數(shù)符號(hào)擴(kuò)展為32位數(shù),送到EDX寄存器中。例MOVZX DX,AL 把AL寄存器中的8位數(shù),零擴(kuò)展成16位數(shù),送到DX寄存器中。例MOVZX EAX,DATA 把DATA單元中的16位數(shù),零擴(kuò)展為32位數(shù),送到EAX寄存器中。(2) XCHG 交換指令(Exchange) 指令格式:指令格式:XCHG de

33、st, src ; dest src 指令功能:指令功能:源操作數(shù)、目的操作數(shù)數(shù)據(jù)交換。允許字或字節(jié)操作,386及其后繼機(jī)型還允許雙字操作。 操作數(shù)要求:操作數(shù)要求:交換可以在寄存器之間、寄存器與存儲(chǔ)器之間進(jìn)行; 。 例 設(shè)AX=2000H,DS=3000H,BX=1800 (3lA00H)=1995H。 則執(zhí)行指令XCHG AX,BX+200H后,結(jié)果如何? 解:把內(nèi)存中的一個(gè)字與AX中的內(nèi)容進(jìn)行交換。 源操作數(shù)的物理地址3000H10H十1800H十200H31A00H, 指令執(zhí)行后:AX1995H,(3lA00H)2000H 指令格式:指令格式:XLAT 轉(zhuǎn)換表(內(nèi)存標(biāo)號(hào))ORP 或:X

34、LAT 指令功能:指令功能: AL = DS:BX/EBX + unsigned AL 使累加器(AL)中的一個(gè)值變換為內(nèi)存表格中的某一個(gè)值,一般用來實(shí)現(xiàn)編碼制的轉(zhuǎn)換,即查表功能。XLATXLAT指令使用步驟:指令使用步驟:l使用之前之前必須先建立建立一個(gè)表格表格,表格中的內(nèi)容是所需要轉(zhuǎn)換的代碼;l執(zhí)行XLAT指令后,根據(jù)位移量從表中查到轉(zhuǎn)換后的代碼值A(chǔ)L寄存器中。(3)XLAT 表轉(zhuǎn)換指令(Table LookupTranslation)例 若十進(jìn)制數(shù)字09的LED七段碼對(duì)照表如下表所示,試用XLAT指令 求數(shù)字5的七段碼值。 解:程序如下:解:程序如下: TABLE DB 40HTABLE

35、 DB 40H,79H79H,24H24H,30H30H,19H19H ;建表;建表, ,表格起始地址為表格起始地址為TABLETABLE DB 12H DB 12H,02H02H,78H78H,00H00H,18H18H ;七段碼存于對(duì);七段碼存于對(duì)TABLETABLE的的 ;位移量為;位移量為 0 09 9的單元位移的單元位移 MOV MOV AL AL,5 5 ;ALAL數(shù)字?jǐn)?shù)字5 5的位移量的位移量 MOVMOV BX BX,OFFSET TABLEOFFSET TABLE ;BXBX表格首地址表格首地址 XLAT TABLEXLAT TABLE ;查表得:;查表得:AL=12HAL=

36、12H十進(jìn)制數(shù)字七段顯示碼十進(jìn)制數(shù)字七段顯示碼040H512H179H602H224H778H330H800H419H918H (4.1)PUSH進(jìn)棧指令 指令格式:PUSH SRC 指令功能:數(shù)據(jù)入堆棧 SPSP-2;(SP+1,SP)SRC 源操作數(shù)要求:可以是16位通用寄存器、段寄存器、存儲(chǔ)器中的數(shù)據(jù)字,但不能是立即數(shù)。 ESPESP-4;(ESP+3, ESP+2,ESP+1,ESP)SRCESP+3, ESP+2,ESP+1,ESP)SRC 源操作數(shù)要求:可以是32位通用寄存器、存儲(chǔ)器中的數(shù)據(jù)雙字,可以是立即數(shù)(使用ptr說明)。注意:實(shí)模式中。ESP的高16位被清零,只是用ESP的

37、低16位,即SP。 最后一項(xiàng)高地址棧底(SP/ESP)壓入彈出棧頂(SS)SP/ESP總是指向偶地址單元段址 (4.2)POP出棧指令 指令格式:POP DEST 指令功能:數(shù)據(jù)出堆棧 DEST (SP+1,SP) ; SPSP2; 目的操作數(shù)要求:目的操作數(shù)要求:可以是16位通用寄存器、段寄存器、存儲(chǔ)單元,但CS不能作目的操作數(shù)。不能作目的操作數(shù)。 DEST (ESP+3,ESP+2,ESP+1,ESP) ; ESPESP4; 目的操作數(shù)要求:目的操作數(shù)要求:可以是32位通用寄存器、存儲(chǔ)單元。 見PUSH的注意。 最后一項(xiàng)高地址棧底(SP/ESP)壓入彈出棧頂(SS)SP/ESP總是指向偶地

38、址單元段址例:MOV AX,DAYAMOVDS,AXLEABX,DA1MOVAX,STACK1MOVSS,AXLEASP,STAPUSHBXPUSHBX+2POPBXPOPBX+276HA0H1BH82HXXHXXHXXHXXHXXHBX-DA1SS-STACK1SP=SP-2SP=SP-2SP-STADS-DATA說明: PUSH指令: 先使堆棧指針SP(ESP)減2(4),然后把一個(gè)字(雙字)操作數(shù)存入堆棧頂部。 POP指令: 把棧頂?shù)囊粋€(gè)字(雙字)傳送至指定的目的操作數(shù),然后堆棧指針SP(ESP)加2(4)。 區(qū)分: PUSH SP指令入棧的是該指令已修改了的SP新值; PUSH ESP

39、指令入棧的卻是ESP在執(zhí)行該指令之前的舊值。 (4.3)PUSHA/PUSHAD 指令格式指令格式:PUSHA/PUSHAD 指令功能指令功能:所有寄存器進(jìn)棧, 80386及以上使用 PUSHAPUSHA執(zhí)行操作執(zhí)行操作: 16位通用寄存器依次進(jìn)棧,進(jìn)棧次序?yàn)椋篈X,CX,DX,BX,指,指令執(zhí)行前的令執(zhí)行前的SP,BP,SI,DI。指令執(zhí)行后(SP)(SP)16仍指向棧頂。PUSHADPUSHAD執(zhí)行操作執(zhí)行操作: 32位通用寄存器依次進(jìn)棧,進(jìn)棧次序?yàn)椋篍AX,ECX,EDX,EBX,指令執(zhí)行前的指令執(zhí)行前的ESP,EBP,ESI和和EDI。指令執(zhí)行后(ESP)(ESP)32。實(shí)模式中是SP

40、32 (4.4)POPA/POPAD 指令格式指令格式:POPA/POPAD 指令功能指令功能:所有寄存器出棧, 80386及以上使用 POPAPOPA執(zhí)行操作執(zhí)行操作: 16位通用寄存器依次出棧,出棧次序?yàn)椋?DI,SI,BP,SP,BX,DX,CX,AX 。指令執(zhí)行后(SP)(SP)16仍指向棧頂。SP的出棧只是修改了指針使其后的BX能順利出棧,而堆棧中原先由PUSHA指令存入的SP的原始內(nèi)容被丟棄,并未真正送到SP寄存器中去。POPADPOPAD執(zhí)行操作執(zhí)行操作: 32位通用寄存器依次出棧,出棧次序?yàn)椋?EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX 。指令執(zhí)行后(ESP

41、)(ESP)32。與POPA相同,堆棧中存放的原ESP的內(nèi)容被丟棄而不裝入ESP寄存器。 LAHF (5、3、1為任意值)標(biāo)志寄存器低標(biāo)志寄存器低8位位 AHSAHF標(biāo)志寄存器低標(biāo)志寄存器低8位位 AHPUSHF/ PUSHFDPOPF/ POPFD15 11 10 9 8 7 6 5 4 3 2 1 0 AHD7 D6D4D2D0(1)LAHF 標(biāo)志送到AH指令(Load AH from Flag) 指令格式:指令格式: LAHF 指令功能:指令功能: 標(biāo)志寄存器SF、ZF、AF、PF和CF AH寄存器的位7、6、4、2和0。 位5、3、1的內(nèi)容未定義未定義,(一般1位是1,3、5位是0)。

42、 執(zhí)行這條指令后,標(biāo)志位本身標(biāo)志位本身并不受影響。15 11 10 9 8 7 6 5 4 3 2 1 0 AHD7 D6D4D2D0 SAHF AH送標(biāo)志寄存器(Store AH into Flags) 指令格式:指令格式:SAHF 指令功能:指令功能: AH內(nèi)容 標(biāo)志寄存器。 位5、3、1的內(nèi)容未定義,(一般1位是1,3、5位是0)。 執(zhí)行這條指令后,高位標(biāo)志并不受影響。 15 11 10 9 8 7 6 5 4 3 2 1 0 AHD7 D6D4D2D0PUSHF/ PUSHFD標(biāo)志入棧指令(Push Flag onto Stack) 指令格式:指令格式:PUSHF/PUSHFDPUSH

43、F/PUSHFD 指令功能:指令功能:整個(gè)標(biāo)志寄存器的內(nèi)容 堆棧; 修改堆棧指針, PUSHF,16位標(biāo)志寄存器入棧,SPSP2; PUSHFD,32位標(biāo)志寄存器入棧,SPSP4; 指令執(zhí)行后對(duì)標(biāo)志位無影響。POPF/POPFD標(biāo)志出棧指令(Pop Flag off Stack) 指令格式:指令格式:POPF/POPFDPOPF/POPFD 指令功能:指令功能:堆棧指針SPSP所指的一個(gè)字/雙字 標(biāo)志寄存器PSWPSW; 修改堆棧指針, POPF,16位標(biāo)志寄存器出棧,SPSP2; POPFD,32位標(biāo)志寄存器出棧, SPSP4; 目標(biāo)地址傳送指令可以擁有傳送操作數(shù)的段地址和偏移地址。 LEA

44、 取有效地址指令(Load Effective Address) 指令格式:指令格式:LEA 目的,源 指令功能:指令功能:源操作數(shù)地址的目的操作數(shù)所在寄存器 要求:要求: 源操作數(shù):源操作數(shù):必須是存儲(chǔ)單元; 目的操作數(shù):目的操作數(shù):必須是一個(gè)除的16位/32位寄存器。 注意:注意:與MOV指令的區(qū)別。 例例 假設(shè)假設(shè)SISI1000H1000H,DSDS5000H5000H,(51000H)(51000H)1234H1234HLEA BX,SI ;執(zhí)行完該指令后,BXl000HMOV BX,SI ;執(zhí)行完該指令后,BX1234H例例 LEA BX,TABLE ;可用MOV指令代替LEA指令

45、 MOV BX,OFFSET TABLE;兩條指令等價(jià)。 例例 某數(shù)組含20個(gè)元素,每個(gè)元素占一個(gè)字節(jié),符號(hào)為:019。設(shè)DI指向數(shù)組開頭處,把序號(hào)為6的元素的偏移地址送到BX中,用什么指令來實(shí)現(xiàn)? 解: LEA BX,6DI ;只能用LEA實(shí)現(xiàn),不能用MOV LDS/LES/LFS/LGS/LSS 將雙字指針?biāo)偷郊拇嫫骱虳S/ES/FS/GS/SS指令(Load Pointer using DS)指令格式:指令格式:LDS/LES/LFS/LGS/LSS目的,源指令功能:指令功能:前兩個(gè)字節(jié)(偏移地址) 指定的目的寄存器; 后兩個(gè)字節(jié)(段地址) DS/ES/FS/GS/SS寄存器。操作數(shù)要求

46、:操作數(shù)要求: 源操作數(shù):必須是存儲(chǔ)單元存儲(chǔ)單元(該單元開始的連續(xù)4個(gè)/6個(gè)字節(jié)存放一個(gè)變量的地址指針); 目的操作數(shù):必須是16/32位寄存器位寄存器,但不能用不能用段寄存器。 執(zhí)行的操作:1616位指令位指令:(REG)(MEM) (SREG)(MEM2)3232位指令位指令:(REG)(MEM) (SREG)(MEM4) LFS、LGS和LSS只能用于386及其后繼機(jī)型中。例 設(shè):DS0100H, BX0020H, (01020H)0300H, (01022H)0500H。執(zhí)行指令LES DI,BX 后,結(jié)果如何?解:DI0300H,ES0500H例例 設(shè):DS1200H,(12450H

47、)0F346H,(12452H)0A90H。 執(zhí)行指令LDS SI,DS:450H 后,結(jié)果如何?解:SI0F346H,DS0A90HININ指令:指令:指定端口中的數(shù)據(jù)累加器OUTOUT指令:指令:累加器中的數(shù)據(jù)指定端口 IN輸入指令(Input) 指令格式:指令格式: 直接尋址直接尋址:長格式長格式,端口地址(00FFH)直接包含在IN指令里,共允許尋址256個(gè)端口。 IN AL,端口地址,端口地址 或或 IN AX,端口地址,端口地址 或或 IN EAX,端口地址,端口地址 間接尋址間接尋址:短格式短格式,端口地址0FFH 時(shí),先將端口號(hào)送DX寄存器,再執(zhí)行輸入操作。共允許尋址64K個(gè)端

48、口IN AL,DX 或或 IN AX,DX 或或 IN EAX,DX指令功能:指令功能: 。16/3216/32位端口位端口由2/42/4個(gè)個(gè)地址連續(xù)的8 8位端口組成位端口組成。 OUT輸出指令輸出指令(Output)指令格式:指令格式: 直接尋址直接尋址:長格式長格式,端口地址(00FFH)直接包含在OUT指令里,共允許尋址256個(gè)端口。OUT 端口地址端口地址,AL ,AL 或或 OUT 端口地址端口地址,AX,AX 或或 OUT 端口地址端口地址,EAX 間接尋址間接尋址:短格式短格式,端口地址0FFH 時(shí),先將端口號(hào)送DX寄存器,再執(zhí)行輸入操作。共允許尋址64K個(gè)端口OUT DX,A

49、L 或或 OUT DX,AXOUT DX,AX 或或 OUT DX,EAX 指令功能:指令功能:將將將將將將 。16/3216/32位端口位端口由2/42/4個(gè)個(gè)地址連續(xù)的8 8位端口組成位端口組成。1)每個(gè)端口可以保存一個(gè)字節(jié)的外設(shè)數(shù)據(jù)。每個(gè)端口可以保存一個(gè)字節(jié)的外設(shè)數(shù)據(jù)。2)端口號(hào)或端口號(hào)或DX的內(nèi)容均為地址,而傳送的是端口中的信息,而且在的內(nèi)容均為地址,而傳送的是端口中的信息,而且在用短格式時(shí)用短格式時(shí)DX內(nèi)容就是端口號(hào)本身,不需要由任何段寄存器來修內(nèi)容就是端口號(hào)本身,不需要由任何段寄存器來修改它的值。改它的值。例例 IN AL IN AL,0F1H0F1H;AL從從 F1H 端口讀入一

50、個(gè)字節(jié)端口讀入一個(gè)字節(jié) IN AXIN AX,80H80H;ALAL80H 80H 口的內(nèi)容,口的內(nèi)容,AHAH81H 81H 口的內(nèi)容口的內(nèi)容 MOV DXMOV DX,310H310H;端口地址;端口地址 310H 310H 先送入先送入DXDX中中 IN ALIN AL,DXDX;ALAL310H 310H 端口的內(nèi)容端口的內(nèi)容例例 OUT 85H OUT 85H,ALAL;85H 85H 端口端口ALAL內(nèi)容內(nèi)容 MOV DXMOV DX,0FF4H0FF4H ;端口地址;端口地址DX = 0FF4HDX = 0FF4H OUT DX OUT DX,AL AL ;0FF4H 0FF4H

51、 端口端口ALAL內(nèi)容內(nèi)容 MOV DXMOV DX,300H300H;DXDX指向指向300H300H OUT DX OUT DX,AXAX;300H 300H 端口端口 ALAL內(nèi)容,內(nèi)容,301H301H端口端口AHAH內(nèi)容內(nèi)容3.3.2、算術(shù)運(yùn)算指令、算術(shù)運(yùn)算指令l算術(shù)運(yùn)算指令可處理4種類型的數(shù) 無符號(hào)二進(jìn)制整數(shù) 帶符號(hào)二進(jìn)制整數(shù) 無符號(hào)壓縮十進(jìn)制整數(shù)(Packed Decimal) 無符號(hào)非壓縮十進(jìn)制整數(shù)(Unpacked Decimal) 一個(gè)8位二進(jìn)制數(shù)可看成4種不同類型的數(shù)不同類型的數(shù),所表示的數(shù)值亦不同數(shù)值亦不同。66二進(jìn)制碼(B)十六進(jìn)制(H)無符號(hào)二進(jìn)制(D)帶符號(hào)二進(jìn)制

52、(D)非壓縮十進(jìn)制壓縮十進(jìn)制0000 0111077+77071000 100189137-119無效891100 0101C5197-59無效無效l數(shù)的表示:數(shù)的表示: 二進(jìn)制數(shù)二進(jìn)制數(shù):可以是8位或16位或32位,若是帶符號(hào)數(shù),則用補(bǔ)碼表示。壓縮十進(jìn)制數(shù)壓縮十進(jìn)制數(shù):一個(gè)字節(jié)中存放兩個(gè)BCD碼十進(jìn)制數(shù)。非壓縮十進(jìn)制數(shù)非壓縮十進(jìn)制數(shù):個(gè)字節(jié)的低半字節(jié)存放十進(jìn)制數(shù),高半字節(jié)為全零。例如,對(duì)十進(jìn)制數(shù)字例如,對(duì)十進(jìn)制數(shù)字5858:壓縮十進(jìn)制數(shù)壓縮十進(jìn)制數(shù)表示:只需一個(gè)字節(jié),即 0101 1000B0101 1000B;非壓縮十進(jìn)制數(shù)表示:需兩個(gè)字節(jié),即 0000 0101B 0000 0101B

53、和 0000 1000B0000 1000B。(Addition) ADD ADD加法指令加法指令(Addition)(Addition) 指令格式:指令格式:ADD 目的, 源 指令功能:指令功能:目的 源 十 目的 ADCADC帶進(jìn)位的加法指令帶進(jìn)位的加法指令(Addition with Carry)(Addition with Carry) 指令格式:指令格式:ADC 目的, 源 指令功能:指令功能:目的 源 十 目的 十 CF操作數(shù)的要求:操作數(shù)的要求:( (包括上兩條指令包括上兩條指令) ) 源操作數(shù):可以是寄存器、存儲(chǔ)器、立即數(shù); 目的操作數(shù):只能用寄存器、存儲(chǔ)單元。注意:注意:

54、源、目的操作數(shù)不能不能同時(shí)為存儲(chǔ)器,且類型類型必須一致,即都是字節(jié)或字或雙字,目的目的操作數(shù)不可以不可以是立即數(shù)立即數(shù); 這兩條指令影響影響的標(biāo)志位標(biāo)志位為:CF、OF、PF、SF、ZF和AF。 例 兩種加法指令的實(shí)例 ADD AL,18H;ALAL十18H ADC BL,CL;BLBL十CL十CF ADC AX,DX ;AXAX十DX十CF ADD AL,COSTBX ;AL內(nèi)容和地址DS:(COST+BX)的;存儲(chǔ)字節(jié)相加, 結(jié)果送AL ADD COSTBX,BL ;將BL與物理地址DS: (COST十BX)的;存儲(chǔ)字節(jié)相加,結(jié)果留在該存儲(chǔ)單元中 例 用加法指令對(duì)兩個(gè)8位16進(jìn)制數(shù)5EH和

55、3CH求和,并分析加法運(yùn)算指令執(zhí)行后對(duì)標(biāo)志位的影響。 解:MOV AL,5EH ;AL5EH(94) MOV BL,3CH ;BL3CH(60) ADD AL, BL;結(jié)果AL9AH69討論:MOV AL,5EH MOV BL,3CH ADD AL, BL ADD對(duì)標(biāo)志位的影響標(biāo)志位的影響兩個(gè)數(shù)的相加過程:相加過程: 0101 1110 5EH = 94 + 0011 1100 即: + 3CH = 60 1001 1010 9AH = 154運(yùn)算后標(biāo)志位:ZF0,AF1,CF0,SFl,PF1,OF1。對(duì)標(biāo)志的解釋:標(biāo)志的解釋:人為決定兩個(gè)加數(shù)都看成無符號(hào)數(shù)時(shí),運(yùn)算結(jié)果為9AH,即十進(jìn)制數(shù)1

56、54。在這種情況下,SF和和OF都沒有意義沒有意義,我們只關(guān)心ZF和CF標(biāo)志,在在BCD碼運(yùn)算碼運(yùn)算或奇偶校驗(yàn)奇偶校驗(yàn)時(shí)才考慮AF或PF標(biāo)志。兩個(gè)加數(shù)都當(dāng)成帶符號(hào)數(shù)時(shí),符號(hào)標(biāo)志SF和溢出標(biāo)志OF很重要,而進(jìn)位標(biāo)志CF沒有意義沒有意義。帶符號(hào)數(shù)能表示的范圍-128+127,而本例中,兩個(gè)正數(shù)94和60相加,其和為154,由于154超過了范圍,即產(chǎn)生了溢出,OF1 INC增量指令(Increment) 指令格式:指令格式:INC 目的 指令功能:指令功能:目的 目的 十1操作數(shù)的要求:操作數(shù)的要求:通用寄存器、內(nèi)存。注意:注意:這條指令主要用在循環(huán)程序中,對(duì)地址指針和循環(huán)計(jì)數(shù)計(jì)數(shù)器等進(jìn)行修改;指令

57、執(zhí)行后影響影響AF、OF、PF、SF和ZF,但不影響進(jìn)位標(biāo)志CF該指令只有一個(gè)操作數(shù)時(shí),如果要使內(nèi)存單元的內(nèi)容增增1 1,程序中必須說明該存儲(chǔ)單元是雙字還是字還是字節(jié)雙字還是字還是字節(jié)。INC指令的兩個(gè)應(yīng)用例子: 例 INC BL ;BL寄存器中內(nèi)容增1 INC CX ;CX寄存器中內(nèi)容增1 例 INC BYTE PRRBX ;內(nèi)存字節(jié)單元內(nèi)容增1 INC WORD PTRBX ;內(nèi)存字單元內(nèi)容增1其中:PTR為類型說明符,前面加BYTE說明操作數(shù)類型為字節(jié),加WORD則說明操作數(shù)類型為字。加DWORD則說明操作數(shù)類型為雙字。 XADD XADD 交換并相加指令交換并相加指令(exchange

58、 and add)(exchange and add) 指令格式:指令格式:XADD 目的,源 指令功能:指令功能:把目的操作數(shù)裝入源,并把源和目的操作數(shù)之和送目的操作數(shù)。 使用前提:使用前提:該指令只能用于486及其后繼機(jī)型。 例例XADD BL , DL 如指令執(zhí)行前:(BL)=12H,(DL)=02H, 則指令執(zhí)行后:(BL)=14H,(DL)=12H。(Subtraction) SUBSUB減法指令減法指令(Subtraction) 指令格式:指令格式: SUB 目的,源指令功能:指令功能: 目的 目的源 例 SUB AX,BX ;AX AXBX SUB DX,1850H ;DX DX

59、1850H SBB SBB帶借位的減法指令帶借位的減法指令(Subtract with Borrow)(Subtract with Borrow) 指令格式:指令格式:SBB 目的,源 指令功能:指令功能:目的 目的源CF (SBB主要用于多字節(jié)減法中) 例 SBB AL,CL;AL ALCLCF DEC DEC減量指令減量指令(Decrement) 指令格式:指令格式:DEC 目的 指令功能;指令功能;目的 目的一l 例 DEC BX ;BX BX1 DEC WORD PTRBP ;堆棧段中位于BP偏置處的字減1 NEG取負(fù)指令取負(fù)指令(Negate)(求相反數(shù)求相反數(shù)) 指令格式:指令格式

60、:NEG 目的 指令功能:指令功能:目的 0目的,即:對(duì)目的操作數(shù)取負(fù) 例例NEG AX;將AX中的數(shù)取負(fù) NEG BYTE PTRBX;對(duì)數(shù)據(jù)段中位于BX 處的字節(jié)取負(fù) CMP比較指令比較指令(Compare) 指令格式:指令格式:CMP 目的,源 指令功能:指令功能:目的與源比較 注意:結(jié)果注意:結(jié)果不回送到目的操作數(shù)中,僅反映在標(biāo)志位上僅反映在標(biāo)志位上。 用途:用途:用在比較兩個(gè)數(shù)大小又不破壞原操作數(shù)不破壞原操作數(shù)的場合。(6)CMPXCHG交換并比較指令 (Compare and exchange) 指令格式:指令格式:CMPXCHG 目的,源 指令功能:指令功能:累加器累加器AC與與

溫馨提示

  • 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)論