匯編_第5章 80X86的指令系統(tǒng)_第1頁
匯編_第5章 80X86的指令系統(tǒng)_第2頁
匯編_第5章 80X86的指令系統(tǒng)_第3頁
匯編_第5章 80X86的指令系統(tǒng)_第4頁
匯編_第5章 80X86的指令系統(tǒng)_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第5 5章章 80 x8680 x86的指令系統(tǒng)的指令系統(tǒng)l 數(shù)據(jù)傳送指令l 算術(shù)指令l 邏輯指令l 串處理指令l 控制轉(zhuǎn)移指令l 處理機(jī)控制與雜項操作指令8086的指令系統(tǒng)重點關(guān)注:l指令的基本功能l指令支持的尋址方式l指令的執(zhí)行對標(biāo)志位的影響l指令的特殊要求l 指令系統(tǒng)的格式 一組指令的集合 操作碼 操作數(shù) . 操作數(shù)指令例:MOV 指令格式:MOV DST,SRC功能:源操作數(shù)的內(nèi)容傳送到目標(biāo)操作數(shù);源操作數(shù)中的內(nèi)容不變。數(shù)據(jù)傳送指令:l通用數(shù)據(jù)傳送指令 MOV、PUSH、POP、XCHG l累加器專用傳送指令 IN、OUT、XLAT l地址傳送指令 LEA、LDS、LES l標(biāo)志寄存

2、器傳送指令 LAHF、SAHF、PUSHF、POPF l類型轉(zhuǎn)換指令 CBW、CWD 傳送指令: MOV DST, SRC執(zhí)行操作: (DST) (SRC)l 通用數(shù)據(jù)傳送指令注意: * DST、SRC 不能同時為段寄存器 MOV DS, ES * 立即數(shù)不能直接送段寄存器 MOV DS, 2000H * DST 不能是立即數(shù)和CS* DST、SRC 不能同時為存儲器尋址* 不影響標(biāo)志位(對所有的數(shù)據(jù)傳送指令而言) 進(jìn)棧指令: PUSH SRC 執(zhí)行操作: (SP) (SP) 2 ( (SP)+1, (SP) ) (SRC) 出棧指令: POP DST 執(zhí)行操作: (DST) ( (SP)+1

3、, (SP) ) (SP) (SP) + 2堆棧:先進(jìn)后出的存儲區(qū),段地址存放在SS中, SP在任何時候都指向棧頂,進(jìn)出棧后自動修改SP。注意: * 堆棧操作必須以字為單位 * 不影響標(biāo)志位 * 不能用立即尋址方式 PUSH 1234H * DST不能是CS POP CS 例:假設(shè) (AX) = 2107 H , 執(zhí)行 PUSH AX* * * * *(SP)PUSH AX 執(zhí)行前(SS)(SP)* * * * *07H21H低地址 高地址PUSH AX 執(zhí)行后進(jìn)棧方向(SS)例: POP BX(SP)* * * * *07H21HPOP BX 執(zhí)行前(SS)(SP)* * * * *07H2

4、1H低地址 高地址 POP BX 執(zhí)行后 (BX) = 2107H出棧方向(SS)例:PUSH DS SUB AX, AX PUSH AX RET例:PUSH AX PUSH BX PUSH CX ;其間用到AX、BX、CX POP CX ; 后進(jìn)先出 POP BX POP AX 交換指令: XCHG OPR1, OPR2 執(zhí)行操作: (OPR1) (OPR2)注意: * 不影響標(biāo)志位 * 不允許使用段寄存器,兩個操作數(shù)必須有一個在寄存器中(內(nèi)存之間不能相互傳送數(shù)據(jù)) 例:XCHG BX,BP+SI (BX)=6F30H,(BP)=0200H,(SI)=0046H, (SS)=2F00H,(2

5、F246H)=4154H 例:XCHG AL,BHl 累加器專用傳送指令(只限使用AX或AL) 輸入指令 IN (I/O CPU) 長格式: IN AL, PORT (字節(jié)) IN AX, PORT (字) 執(zhí)行操作: (AL) ( PORT ) (字節(jié)) (AX) ( PORT+1,PORT )(字) 短格式: IN AL, DX (字節(jié)) IN AX, DX (字) 執(zhí)行操作: (AL) ( (DX) ) (字節(jié)) (AX) ( (DX)+1,(DX) )(字) 輸出指令 OUT (CPU I/O)長格式: OUT PORT, AL (字節(jié)) OUT PORT, AX (字)執(zhí)行操作:(

6、PORT ) (AL) (字節(jié)) ( PORT+1, PORT ) (AX)(字)短格式: OUT DX, AL (字節(jié)) OUT DX, AX (字)執(zhí)行操作:( (DX) ) (AL) (字節(jié)) ( (DX)+1, (DX) ) (AX)(字)注意: * 不影響標(biāo)志位* 前256個端口號00HFFH可直接在指令中指定(長格式)* 如果端口號 256,端口號 DX(短格式)例: IN AX, 28H MOV DATA_WORD, AX例: MOV DX, 3FCH IN AX, DX例: OUT 5, AL例:測試某狀態(tài)寄存器(端口號27H)的第2位是否為1 IN AL, 27H TEST

7、AL, 00000100B JNZ ERROR ;若第2位為1,轉(zhuǎn)ERROR處理例:Sound程序 mov dx, 100 in al, 61h and al,11111100bsound: xor al, 2 ; 1 0 1 out 61h, al ;ON OFF ON mov cx, 140h ;脈寬Wait1:loop wait1 dec dx jne sound 設(shè)備控制寄存器端口61H1 / 0 0 控制其它外部設(shè)備放大器2號定時器門控1 0與門(BX) 30 H F004031 H F0041 (AL) = 3 32 H F0042 33 H F0043TABLE(DS)=F000

8、H換碼指令:XLAT 或XLAT OPR執(zhí)行操作:(AL) ( (BX) + (AL) )例: MOV BX, OFFSET TABLE ; (BX)=0040H MOV AL, 3 XLAT TABLE 指令執(zhí)行后 (AL)=33H注意: * 不影響標(biāo)志位* 字節(jié)表格(長度不超過256) 首地址 (BX)* 需轉(zhuǎn)換的代碼位移量 (AL)l 地址傳送指令有效地址送寄存器指令:LEA REG, SRC執(zhí)行操作: (REG) SRCSCR:不能是立即尋址,寄存器尋址指針?biāo)图拇嫫骱虳S指令:LDS REG, SRC執(zhí)行操作: (REG) (SRC)只能是存儲器尋址 (DS) (SRC+2) 相繼二字

9、 寄存器、DS指針?biāo)图拇嫫骱虴S指令:LES REG, SRC執(zhí)行操作: (REG) (SRC) (ES) (SRC+2) 相繼二字 寄存器、ES 例:下列兩種指令的功能相同LEA BX, TABLE MOV BX,OFFSET TABLE 40 H00 H00 H30 H TABLE(DS):1000HMOV BX, TABLE ; (BX)=0040HMOV BX, OFFSET TABLE ; (BX)=1000HLEA BX, TABLE ; (BX)=1000HLDS BX, TABLE ; (BX)=0040H ; (DS)=3000HLES BX, TABLE ; (BX)=00

10、40H ; (ES)=3000H注意: * 不影響標(biāo)志位 * REG 不能是段寄存器 * SRC 必須為存儲器尋址方式l 標(biāo)志寄存器傳送指令 標(biāo)志送AH指令: LAHF 執(zhí)行操作: (AH) (FLAGS的低字節(jié)) AH送標(biāo)志寄存器指令:SAHF 執(zhí)行操作: (FLAGS的低字節(jié)) (AH) 標(biāo)志進(jìn)棧指令: PUSHF 執(zhí)行操作: (SP) (SP) - 2 ( (SP)+1, (SP) ) (FLAGS) 標(biāo)志出棧指令: POPF 執(zhí)行操作: (FLAGS) ( (SP)+1, (SP) ) (SP) (SP) + 2* 影響標(biāo)志位LAHF指令 該指令功能是把標(biāo)志寄存器中的SF、ZF、AF、

11、PF、CF五個標(biāo)志傳至AH的第7、6、4、2、0位,第5、3、1位未定義。SF ZFAFPFCFTFIFDFOFFLAGAH算術(shù)指令:l 加法指令 ADD、ADC、INCl 減法指令 SUB、SBB、DEC、NEG、CMPl 乘法指令 MUL、IMUL l 除法指令 DIV、IDIVl 十進(jìn)制調(diào)整指令 DAA、DAS、 AAA、AAS、AAM、AADl 加法指令 加法指令: ADD DST, SRC 執(zhí)行操作: (DST) (SRC) + (DST) 帶進(jìn)位加法指令:ADC DST, SRC 執(zhí)行操作: (DST) (SRC) + (DST) + CF 加1指令: INC OPR 執(zhí)行操作:

12、(OPR) (OPR) + 1注意: * 除INC指令不影響CF標(biāo)志外,均對條件標(biāo)志位有影響。加法指令對條件標(biāo)志位的影響* CF 位表示無符號數(shù)相加的溢出* OF 位表示帶符號數(shù)相加的溢出1 結(jié)果為負(fù)0 否則SF=1 結(jié)果為00 否則ZF=1 和的最高有效位有向高位的進(jìn)位0 否則CF=1 兩個操作數(shù)符號相同,而結(jié)果符號與之相反0 否則OF=舉例: n=8 bit 帶符號數(shù)(-128127), 無符號數(shù)(0255) 0 0 0 0 0 1 0 0 + 0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1帶:(+4)+(+11)=+15 OF=0無:4+11=15 CF=0帶符號數(shù)和無符

13、號數(shù)都不溢出 0 0 0 0 1 0 0 1 + 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 帶: (+9)+(+124)=-123 OF=1 無: 9+124=133 CF=0帶符號數(shù)溢出無符號數(shù)溢出 0 0 0 0 0 1 1 1 + 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 1 0帶:(+7)+(-5)=+2 OF=0無:7+251=2 CF=1帶符號數(shù)和無符號數(shù)都溢出 1 0 0 0 0 1 1 1 + 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0帶:(-121)+(-11)=+124 OF=1無:135+245=124 CF

14、=1例:雙精度數(shù)的加法 (DX) = 0002H (AX) = 0F365H (BX) = 0005H (CX) = 8100H 指令序列 ADD AX, CX ; (1) ADC DX, BX ; (2) (1) 執(zhí)行后,(AX) = 7465H CF=1 OF=1 SF=0 ZF=0 (2) 執(zhí)行后,(DX) = 0008H CF=0 OF=0 SF=0 ZF=0l 減法指令減法指令: SUB DST, SRC 執(zhí)行操作: (DST) (DST) - (SRC)帶借位減法指令:SBB DST, SRC 執(zhí)行操作: (DST) (DST) - (SRC) - CF減1指令: DEC OPR

15、執(zhí)行操作: (OPR) (OPR) - 1求補(bǔ)指令: NEG OPR 執(zhí)行操作: (OPR) - (OPR)比較指令: CMP OPR1, OPR2 執(zhí)行操作: (OPR1) - (OPR2)注意: * 除DEC指令不影響 CF標(biāo)志外,均對條 件標(biāo)志位有影響。減法指令對條件標(biāo)志位(CF/OF/ZF/SF)的影響:CF 位表示無符號數(shù)減法的溢出。OF 位表示帶符號數(shù)減法的溢出。1 被減數(shù)的最高有效位有向高位的借位0 否則CF=1 兩個操作數(shù)符號相反,而結(jié)果的符號與減數(shù)相同0 否則OF=l NEG 求補(bǔ)指令指令格式:NEG OPR執(zhí)行操作(OPR) -(OPR)即將操作數(shù)按位求反后末位加1,因而執(zhí)

16、行的操作也可以表示為: (OPR)0FFFFH -(OPR)+ 1l CMP 比較指令指令格式:CMP OPR1,OPR2執(zhí)行操作 (OPR1)-(OPR2) 該指令與SUB指令一樣執(zhí)行減法操作,但它并不保存結(jié)果,只是根據(jù)結(jié)果設(shè)置條件標(biāo)志位。 CMP指令后往往跟一條條件轉(zhuǎn)移指令,根據(jù)比較結(jié)果產(chǎn)生不同的程序分支。操作數(shù)類型 CF ZF SF OF兩操作數(shù)的關(guān)系帶符號的二進(jìn)制 0 1 0 0 - 0 1 0 - 0 0 1 - 0 0 0 - 0 1 1 等于 小于目的操作數(shù) 小于 源操作數(shù) 大于 大于不帶符號的二進(jìn)制 0 1 0 0 1 0 - - 0 0 - - 等于目的操作數(shù) 低于 源操作數(shù)

17、 高于CMP指令執(zhí)行后對標(biāo)志位的影響l 乘法指令 無符號數(shù)乘法指令:MUL SRC 帶符號數(shù)乘法指令:IMUL SRC執(zhí)行操作: 字節(jié)操作數(shù) (AX) (AL) * (SRC) 字操作數(shù) (DX, AX) (AX) * (SRC)注意: * AL (AX) 為隱含的乘數(shù)寄存器。* AX (DX,AX) 為隱含的乘積寄存器。* SRC不能為立即數(shù)。* 除CF和OF外,對條件標(biāo)志位無定義。乘法指令對 CF/OF 的影響:例:(AX) = 16A5H,(BX) = 0611H (1) IMUL BL ; (AX) (AL) * (BL) ; (AX) = 0F9F5H CF=OF=1 (2) MUL

18、 BX ; (DX, AX) (AX) * (BX) ; (DX)=0089H (AX)=5EF5H CF=OF=100 乘積的高一半為零11 否則MUL指令: CF,OF =00 乘積的高一半是低一半的符號擴(kuò)展11 否則IMUL指令: CF,OF =邏輯指令:l 邏輯運(yùn)算指令 AND、OR、NOT、XOR、TEST l 移位指令 SHL、SHR、SAL、SAR、 ROL、ROR、RCL、RCR邏輯非指令:NOT OPR * OPR不能為立即數(shù)執(zhí)行操作: (OPR) (OPR) * 不影響標(biāo)志位 邏輯與指令:AND DST, SRC執(zhí)行操作: (DST) (DST) (SRC)邏輯或指令:OR

19、 DST, SRC執(zhí)行操作: (DST) (DST) (SRC)異或指令: XOR DST, SRC執(zhí)行操作: (DST) (DST) (SRC)測試指令: TEST OPR1, OPR2執(zhí)行操作: (OPR1) (OPR2)CF OF SF ZF PF AF 0 0 * * * 無定義 根據(jù)運(yùn)算結(jié)果設(shè)置l 邏輯運(yùn)算指令例:屏蔽AL的第0、1兩位 AND AL, 0FCH例:置AL的第5位為1 OR AL, 20H 例:使AL的第0、1位變反 XOR AL, 3例:測試某些位是0是1 TEST AL, 1 JZ EVEN * * * * * * * * OR 0 0 1 0 0 0 0 0 *

20、 * 1 * * * * * * * * * * * 0 1 XOR 0 0 0 0 0 0 1 1 * * * * * * 1 0 * * * * * * * * AND 1 1 1 1 1 1 0 0 * * * * * * 0 0 * * * * * * * * AND 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 *AL中的數(shù)邏輯左移 SHL OPR, CNT ;(CNT=1,移1位;CNT1,放在CL)邏輯右移 SHR OPR, CNT算術(shù)左移 SAL OPR, CNT(同邏輯左移)算術(shù)右移 SAR OPR, CNT CF 0 0 CFCFl 移位指令循環(huán)左移 ROL

21、OPR, CNT循環(huán)右移 ROR OPR, CNT帶進(jìn)位循環(huán)左移 RCL OPR, CNT帶進(jìn)位循環(huán)右移 RCR OPR, CNTCF CFCFCF注意: * OPR可用除立即數(shù)以外的任何尋址方式 * CNT=1,SHL OPR, 1 CNT1,MOV CL, CNT SHL OPR, CL ; 以SHL為例* 條件標(biāo)志位: CF = 移入的數(shù)值 1 CNT=1時,最高有效位的值發(fā)生變 0 CNT=1時,最高有效位的值不變 移位指令: SF、ZF、PF 根據(jù)移位結(jié)果設(shè)置,AF無定義 循環(huán)移位指令: 不影響 SF、ZF、PF、AFOF =例:(AX)= 0012H,(BX)= 0034H,把它們

22、裝配成(AX)= 1234H 例:(BX) = 84F0H (1) (BX) 為無符號數(shù),求 (BX) / 2 SHR BX, 1 ; (BX) = 4278H (2) (BX) 為帶符號數(shù),求 (BX) 2 SAL BX, 1 ; (BX) = 09E0H, OF=1 (3) (BX) 為帶符號數(shù),求 (BX) / 4 MOV CL, 2 SAR BX, CL ; (BX) = 0E13CHMOV CL, 8ROL AX, CLADD AX, BX 控制轉(zhuǎn)移指令:l 無條件轉(zhuǎn)移指令 JMPl 條件轉(zhuǎn)移指令 JZ / JNZ 、 JE / JNE、 JS / JNS、 JO / JNO、 JP

23、 / JNP、 JB / JNB、 JL / JNL、 JBE / JNBE、 JLE / JNLE、 JCXZ l 循環(huán)指令 LOOP、LOOPZ / LOOPE、LOOPNZ / LOOPNE l 子程序調(diào)用和返回指令 CALL、RETl 中斷與中斷返回指令 INT、INTO、IRET無條件轉(zhuǎn)移指令:段內(nèi)直接短轉(zhuǎn)移:JMP SHORT OPR 執(zhí)行操作:(IP) (IP) + 8位位移量段內(nèi)直接近轉(zhuǎn)移:JMP NEAR PTR OPR 執(zhí)行操作:(IP) (IP) + 16位位移量段內(nèi)間接轉(zhuǎn)移: JMP WORD PTR OPR 執(zhí)行操作: (IP) (EA)條件轉(zhuǎn)移指令:注意:只能使用段

24、內(nèi)直接尋址的8 位位移量(1) 根據(jù)單個條件標(biāo)志的設(shè)置情況轉(zhuǎn)移 格式 測試條件JZ(JE) OPR ZF = 1JNZ(JNE) OPR ZF = 0JS OPR SF = 1JNS OPR SF = 0JO OPR OF = 1JNO OPR OF = 0JP OPR PF = 1JNP OPR PF = 0JC OPR CF = 1JNC OPR CF = 0(2) 比較兩個無符號數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移 格式 測試條件 JB (JNAE,JC) OPR CF = 1 JNB (JAE,JNC) OPR CF = 0 JBE (JNA) OPR CFZF = 1 JNBE (JA) OPR

25、CFZF = 0* 適用于地址或雙精度數(shù)低位字的比較(3) 比較兩個帶符號數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移 格式 測試條件 JL (JNGE) OPR SFOF = 1 JNL (JGE) OPR SFOF = 0 JLE (JNG) OPR (SFOF)ZF = 1 JNLE (JG) OPR (SFOF)ZF = 0* 適用于帶符號數(shù)的比較(4) 測試 CX 的值為 0 則轉(zhuǎn)移 格式 測試條件 JCXZ OPR (CX)=0循環(huán)指令:注意:* CX 中存放循環(huán)次數(shù)* 只能使用段內(nèi)直接尋址的8 位位移量LOOPLOOPZ / LOOPELOOPNZ / LOOPNE LOOP指令的執(zhí)行步驟: (1)

26、(CX) (CX) - 1 (2) 檢查是否滿足測試條件,如滿足則 (IP) (IP) + 8位位移量,實行循環(huán); 不滿足則 IP 不變,退出循環(huán)。循環(huán)指令:LOOP OPR測試條件:(CX) 0為零或相等時循環(huán)指令:LOOPZ(LOOPE) OPR測試條件:ZF=1 且 (CX) 0不為零或不相等時循環(huán)指令:LOOPNZ(LOOPNE) OPR測試條件:ZF=0 且 (CX) 0LOOP AGAIN DEC CX JNZ AGAIN例:在多重循環(huán)的程序結(jié)構(gòu)中,CX 計數(shù)器的保存和恢復(fù) MOV CX, MAGAIN: PUSH CX MOV CX, NNEXT: LOOP NEXT POP C

27、X LOOP AGAIN MOV DI, MAGAIN: MOV CX, NNEXT: LOOP NEXT DEC DI JNZ AGAIN子程序調(diào)用和返回指令:code1 segmentmain proc far call far ptr subp retmain endpcode1 endscode2 segmentsubp proc far retsubp endpcode2 ends 段間調(diào)用和返回code segmentmain proc far call subp retmain endpsubp proc near retsubp endpcode ends 段內(nèi)調(diào)用和返回 CALL 調(diào)用指令段內(nèi)直接近調(diào)用:CALL DST執(zhí)行操作:(SP) (SP) - 2 ( (SP)+1,(SP) ) (IP) (IP) (IP) + 16位位移量段內(nèi)間接近調(diào)用:CALL DST執(zhí)行操作:(SP) (SP) - 2 ( (SP)+1,(SP) ) (IP) (

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論