




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1第3章 Pentium的指令系統(tǒng)余華芳余華芳 辦公辦公 : 020-39352212020-39352212 Blog: :/hexuBlog: :/hexun/yhf100n/yhf100 公共郵箱:公共郵箱: yhf_stdnt163 yhf_stdnt163 QQ QQ: 460395918460395918 廣東藥學院信息工程學廣東藥學院信息工程學院院2本章重點本章重點 尋址方式;尋址方式; 傳送指令中的堆棧指令、交換指令、傳送指令中的堆棧指令、交換指令、換碼指令、輸入換碼指令、輸入/ /輸出指令;輸出指令; 算術運算指令中的比較指令;算術運算指令中的比較指令; 串操作指令;串操作指
2、令; 中斷調用示例;中斷調用示例; 規(guī)范程序;規(guī)范程序; 偽指令偽指令DBDB、DWDW、PTRPTR。33.1 Pentium的尋址方式 指令的兩個問題指令的兩個問題指出進行什么操作指出進行什么操作涉及的操作數和操作結果放在何涉及的操作數和操作結果放在何處處 兩種情況下涉及尋址方式兩種情況下涉及尋址方式操作數尋址操作數尋址轉移地址和調用地址進行尋址轉移地址和調用地址進行尋址43.1 Pentium的尋址方式 3.1.1 3.1.1 立即數尋址立即數尋址比如:比如: MOVMOVALAL,80H80H MOV MOVAXAX,1090H1090H MOV MOVEAXEAX,10002000H
3、10002000H 3.1.2 3.1.2 寄存器尋址寄存器尋址比如:比如:INCINCCXCXROLROLAHAH,1 1MOV MOV ECX ,EAXECX ,EAX53.1 Pentium的尋址方式 3.1.3 3.1.3 輸入輸入/ /輸出端口尋址輸出端口尋址I/OI/O直接尋址直接尋址比如:比如:ININALAL,82H 82H OUTOUT80H80H,AXAXININEAXEAX,80H80HI/OI/O間接尋址間接尋址ININALAL,DXDXOUTOUTDXDX,AXAXOUTOUTDXDX,EAXEAX63.1 Pentium的尋址方式 3.1.4 3.1.4 存儲器尋址
4、存儲器尋址EAEA基址變址基址變址比例因子位移量比例因子位移量73.1 Pentium的尋址方式1 1 直接尋址直接尋址比如:比如:MOVMOV AX AX,1070H1070HMOVMOV EAX EAX,ESES:1000H 1000H 2 2 寄存器間接尋址寄存器間接尋址MOVMOVAXAX,BXBX MOVMOV EAXEAX,EBX EBX 3 3 寄存器相對尋址寄存器相對尋址比如:比如:MOVMOVAXAX,SI+100HSI+100H4 4 基址加變址的尋址基址加變址的尋址MOVMOVAXAX,BX+SIBX+SI MOV MOV EDXEDX,EBX+ESIEBX+ESIMOV
5、MOV EDXEDX,EBX ESI EBX ESI 5 5 相對的基址加變址尋址相對的基址加變址尋址比如:比如:MOVMOV AX AX,BP+SI+0050BP+SI+005083.1 Pentium的尋址方式6 6 相對的帶比例因子的變址尋址相對的帶比例因子的變址尋址IMULIMULEBXEBX,ESIESI* *4 47 77 7 基址加比例因子的變址尋址基址加比例因子的變址尋址MOVMOVEAXEAX,EBXESIEBXESI* *44MOV MOV ECXECX,EDIEDI* *8 8EAXEAX8 8 相對的基址加比例因子的變址尋址相對的基址加比例因子的變址尋址MOV MOV
6、EAXEAX,EDIEDI* *4 4EBP+80EBP+8093.2 Pentium指令系統(tǒng) PentiumPentium的指令分為如下幾類:的指令分為如下幾類:傳送指令;傳送指令;串操作指令;串操作指令;算術運算指令;算術運算指令;邏輯運算和移位指令;邏輯運算和移位指令;轉移和調用指令;轉移和調用指令;標志操作和處理器指令;標志操作和處理器指令;控制指令;控制指令;條件測試和字節(jié)設置指令;條件測試和字節(jié)設置指令;系統(tǒng)管理指令;系統(tǒng)管理指令;支持高級語言的指令。支持高級語言的指令。指令格式指令格式大多數操作碼含大多數操作碼含3 3個特征位個特征位:W W位位D D位位S S位位含義:含義:
7、W W位是字操作標志位。位是字操作標志位。 D D位是對目的操作數進行寄存器尋址的位是對目的操作數進行寄存器尋址的標志標志 S S位是符號擴展位。位是符號擴展位。 11幾點注意:幾點注意: 一條指令中可以包含一個或多一條指令中可以包含一個或多個操作數個操作數 涉及一個操作數的指令稱為單涉及一個操作數的指令稱為單操作數指令操作數指令 如位移量或立即數如位移量或立即數為為1616位,那么低位在前,高位在后位,那么低位在前,高位在后123.2.1 傳送指令(1) 通用傳送指令通用傳送指令MOVMOV和和MOVZX/MOVSXMOVZX/MOVSX兩個操作數的數位相同的傳送指令兩個操作數的數位相同的傳
8、送指令MOVMOVMOVMOVALAL,BLBLMOVMOVESES,DXDX MOVMOVAXAX,BXBX MOVMOV DIDI,AXAX MOV MOV CXCX,10001000MOVMOVWORD PTR SIWORD PTR SI,6070H6070HMOVMOVDXDX,5040H 5040H MOVMOVEAXEAX,EBX+ECXEBX+ECX* *2+1000H2+1000HMOVMOV CRnCRn,EAXEAXMOVMOVDRnDRn,EAXEAX兩個操作數的數位不相同的傳送指令兩個操作數的數位不相同的傳送指令MOVZX/MOVSXMOVZX/MOVSXMOVZX E
9、AXMOVZX EAX,BLBLMOVSX EAXMOVSX EAX,BLBL幾點幾點注意注意 通用傳送指令可傳送通用傳送指令可傳送8 8位和位和1616位數據。位數據。 通用傳送指令中總是既含源操作數,又含通用傳送指令中總是既含源操作數,又含目的操作數。目的操作數。 不能在兩個內存單元之間直接傳送數據不能在兩個內存單元之間直接傳送數據 CS CS和和IPIP寄存器不能作為目的操作數寄存器不能作為目的操作數 用用BXBX、SISI、DIDI來間接尋址時,默認的段寄來間接尋址時,默認的段寄存器為存器為DSDS,而用,而用BPBP來間接尋址時,默認的段來間接尋址時,默認的段寄存器為寄存器為SSSS
10、。 執(zhí)行執(zhí)行SSSS寄存器賦值的傳送指令時,系統(tǒng)自寄存器賦值的傳送指令時,系統(tǒng)自動禁止外部中斷。動禁止外部中斷。 所有的通用傳送指令都不改變標志。所有的通用傳送指令都不改變標志。143.2.1 3.2.1 傳送指令(傳送指令(2 2) 堆棧操作指令堆棧操作指令PUSH/POPPUSH/POP、PUSHA/POPAPUSHA/POPA和和PUSHAD/POPADPUSHAD/POPAD普通堆棧操作指令普通堆棧操作指令PUSH/POPPUSH/POPPUSH PUSH EAXEAXPUSH PUSH CSCSPUSH BX+DIPUSH BX+DIPUSHPUSH 0870H0870HPUSHPU
11、SH DWORD PTR EBX+ESIDWORD PTR EBX+ESIPOP POP BXBXPOP POP ESESPOP POP EAXEAX153.2.1 3.2.1 傳送指令(傳送指令(3 3) 堆棧操作指令堆棧操作指令PUSH/POPPUSH/POP、PUSHA/POPAPUSHA/POPA和和PUSHAD/POPADPUSHAD/POPAD堆棧成組操作指令堆棧成組操作指令PUSHA/POPAPUSHA/POPA(8 8個個1616位位R R)和和PUSHAD/POPAD PUSHAD/POPAD (8 8個個3232位位R R)PUSHPUSH EAX EAXPUSH PUSH
12、 EBX EBXPUSH PUSH EDI EDIPUSH PUSH ESI ESI則子程序返回前,應如下恢復寄存器的值:則子程序返回前,應如下恢復寄存器的值:POPPOP ESI ESIPOPPOP EDI EDIPOPPOP EBX EBXPOP POP EAX EAX16幾點幾點注意注意: 堆棧操作堆棧操作總是總是按字雙字進行的。按字雙字進行的。 推入指令,推入指令,SPSP減減2 2或或4 4,低地址低,低地址低字節(jié),數據在棧頂。彈出指令正好字節(jié),數據在棧頂。彈出指令正好相反。相反。 允許允許PUSH CSPUSH CS,但不允許,但不允許POP CSPOP CS。 堆棧的后進先出。堆
13、棧的后進先出。173.2.1 3.2.1 傳送指令(傳送指令(4 4) 交換指令交換指令XCHG/BSWAPXCHG/BSWAP字節(jié)、字和雙字交換指令字節(jié)、字和雙字交換指令XCHGXCHGXCHGXCHGALAL,BL BL XCHGXCHGBXBX,CXCXXCHG XCHG 25302530,CXCXXCHGXCHG EAXEAX,EDIEDIXCHGXCHG ESIESI,EBXEBX3232位寄存器內部雙字交換指令位寄存器內部雙字交換指令BSWAPBSWAPEAXEAX=01234567H=01234567H,執(zhí)行指令,執(zhí)行指令BSWAP BSWAP EAXEAX,使,使EAXEAX=
14、 =67452301H67452301H思考思考P82P82: 為什么說一條為什么說一條XCHGXCHG指令相當于三指令相當于三條條MOVMOV指令?指令?交換指令注意點:交換指令注意點: 目的操作數和源操作數不能均為目的操作數和源操作數不能均為內存單元。內存單元。 段寄存器和段寄存器和IP、EIP不能作為交換不能作為交換指令的操作數。指令的操作數。 193.2.1 3.2.1 傳送指令(傳送指令(5 5) 累加器專用傳送指令累加器專用傳送指令IN/OUTIN/OUT和和XLAT/XLATB XLAT/XLATB 輸入輸入/ /輸出指令輸出指令IN/OUTIN/OUT 直接的直接的I/OI/O
15、指令指令比如:比如:IN IN ALAL,50H50HIN IN AXAX,70H70HIN IN EAXEAX,70H 70H OUT OUT 80H80H,AXAX間接的間接的I/OI/O指令指令IN IN ALAL,DXDXIN IN AXAX,DXDXIN IN EAXEAX,DXDXOUTOUT DXDX,AXAXOUTOUTDXDX,EAXEAX20輸入輸出指令輸入輸出指令注意點注意點: 只能只能用累加器作為執(zhí)行輸入輸出用累加器作為執(zhí)行輸入輸出的機構的機構 尋址范圍:尋址范圍:直接輸入輸出指令為直接輸入輸出指令為0255間接輸入輸出指令為間接輸入輸出指令為065 535。用間接用間
16、接I/OI/O指令時,指令時,只能用只能用DXDX213.2.1 3.2.1 傳送指令(傳送指令(6 6) 累加器專用傳送指令累加器專用傳送指令IN/OUTIN/OUT和和XLAT/XLATBXLAT/XLATB換碼指令換碼指令XLAT/XLATBXLAT/XLATB格雷碼編碼規(guī)則如下:格雷碼編碼規(guī)則如下:011000011000100011100011200101200101300110300110401001401001501010501010601100601100710001710001810010810010910100910100MOV BX,1000HMOV AL,5XLAT22
17、3.2.1 3.2.1 傳送指令(傳送指令(7 7)地址傳送指令地址傳送指令LEALEA和和LDS/LES/LSS/LFS/LGSLDS/LES/LSS/LFS/LGS比如:比如:LEALEAAXAX,27282728LEALEABXBX,BP+SIBP+SILEALEAESIESI,EBX+ECX+2530HEBX+ECX+2530HLEALEAEDIEDI,BX+1946HBX+1946H取段碼和偏移量的指令取段碼和偏移量的指令LDS/LES/LSS/LFS/LGSLDS/LES/LSS/LFS/LGS比如:比如:LDSLDSDIDI,2530H2530H ;將;將2531H2531H和和
18、2530H2530H中的內容中的內容(16(16位位) )送送DIDI, 2533H2533H和和2532H2532H中的內容送中的內容送DSDS。 LESLESEDIEDI,1000H1000HLSSLSSESPESP,EDXEDXLFSLFSEDXEDX,EDXEDXLGSLGSESIESI,EDXEDX源操作數總是源操作數總是來自存儲器來自存儲器233.2.1 傳送指令(8) 標志傳送指令標志傳送指令LAHF/SAHFLAHF/SAHF、PUSHF/POPFPUSHF/POPF和和PUSHFD/POPFDPUSHFD/POPFD讀取低讀取低8 8位標志和設置低位標志和設置低8 8位標位標
19、志指令志指令LAHF/SAHFLAHF/SAHF對標志寄存器的推入和彈出堆對標志寄存器的推入和彈出堆棧指令棧指令PUSHF/POPF(FRPUSHF/POPF(FR低低1616位值位值) )和和PUSHFD/POPFD (FR32PUSHFD/POPFD (FR32位值位值) )243.2.2 3.2.2 算術運算指令算術運算指令 無符號數和有符號數無符號數和有符號數采用同一套采用同一套加法指令加法指令及減法指令及減法指令有兩個條件有兩個條件:同為無符號數或有符號數同為無符號數或有符號數用不同的方法檢測無符號數或有符號數的運算結果是用不同的方法檢測無符號數或有符號數的運算結果是否溢出否溢出算術
20、運算指令涉及兩種類型的數據算術運算指令涉及兩種類型的數據無符號數無符號數8 8位無符號數的范圍為位無符號數的范圍為0 02552551616位無符號數的范圍為位無符號數的范圍為0 065 53565 535有符號數有符號數8 8位有符號數的范圍為位有符號數的范圍為-128-128+127+127 16 16位有符號數的范圍為位有符號數的范圍為-32 768-32 768+32 767+32 7672526所有算術運算指令均所有算術運算指令均影響狀態(tài)標志影響狀態(tài)標志。規(guī)則規(guī)則: 當無符號數運算產生溢出時,當無符號數運算產生溢出時,CFCF為為1 1; 當有符號數運算產生溢出時,當有符號數運算產生
21、溢出時,OFOF為為1 1; SFSF和和OFOF支持有符號數的運算;支持有符號數的運算; 如運算結果為如運算結果為0 0,則,則ZF=1ZF=1; 如運算結果為負數,則如運算結果為負數,則SF=1SF=1; 如如運算結果的低運算結果的低8 8位中位中有偶數個有偶數個1 1,則,則PF=1PF=1。273.2.2 算術運算指令(1) 加法類指令加法類指令ADD/ADC/XADD/INCADD/ADC/XADD/INC不帶進位位的加法指令不帶進位位的加法指令ADDADD ADDADDCXCX,1000H1000HADDADDDIDI,SISIADDADD BX+DIBX+DI,AXAXADDAD
22、DEAXEAX,BX+2000HBX+2000H帶進位位的加法指令帶進位位的加法指令ADC(ADC(用于多字節(jié)加用于多字節(jié)加) )ADCADCAXAX,SI SI ADCADCDXDX,SISIADCADCBXBX,3000H3000H283.2.2 算術運算指令(2) 加法類指令加法類指令ADD/ADC/XADD/INCADD/ADC/XADD/INC字交換加法指令字交換加法指令XADDXADD比如:比如:AXAX=1234H=1234H,BXBX=1111H=1111H,執(zhí)行指令,執(zhí)行指令XADD AXXADD AX,BX ; BX ; BXBX=1234H=1234H,AXAX=2345
23、H=2345H比如:比如:EAXEAX=20000002H=20000002H,而,而1000H1000H開始的內存單開始的內存單元中為元中為30000003H30000003H,執(zhí)行指令,執(zhí)行指令XADD XADD 1000H1000H,EAXEAX增量指令增量指令INCINC(任何位的操作數都是加(任何位的操作數都是加 1 1)比如:比如:INC INC ALAL INCINC ECXECX INCINC BYTE PTRBX+DI+500BYTE PTRBX+DI+500特別注意:特別注意:INC不影響不影響CF293.2.2 算術運算指令(3) 減法類指令SUB/SBB/DEC/NEG
24、和CMP/CMPXCHG/CMPXCHG8B 1) 1) 不考慮借位的減法指令不考慮借位的減法指令SUBSUB,比如:比如:SUBSUB EBX EBX,ECXECXSUB SUB BP+2BP+2,CLCLSUB SUB SISI,5010H5010HSUB SUB WORD PTR DIWORD PTR DI,1000H1000H2 2)考慮借位的減法指令)考慮借位的減法指令SBB (SBB (用于多用于多字節(jié)減法)字節(jié)減法)SBB SBB AXAX,2530H2530HSBB SBB WORD PTREDI+2WORD PTREDI+2,1000H1000H303.2.2 算術運算指令(
25、4) 減法類指令減法類指令SUB/SBB/DEC/NEGSUB/SBB/DEC/NEG和和CMP/CMPXCHG/CMPXCHG8BCMP/CMPXCHG/CMPXCHG8B3) 3) 減量指令減量指令DECDEC比如:比如:DECDEC EBX EBX DECDEC AX AXDECDECBYTE PTRBYTE PTRDI+2 DI+2 4) 4) 求補指令求補指令NEG NEG ( ( 相當于相當于0-0-操作數操作數 ) )比如比如:NEGNEG EAX EAX NEGNEG ECX ECX5)5)比較指令比較指令CMPCMP比如:比如:CMP CMP AXAX,2000H2000HC
26、MPCMPEAXEAX,EBX+EDI+100EBX+EDI+100CMPCMPEDXEDX,EDIEDI31CMPCMP指令的一些結論指令的一些結論 對于有符號數的比較,若對于有符號數的比較,若OFOF和和SFSF的值的值相同相同,則被減數,則被減數大大;若;若不同,則被減數不同,則被減數小小。 對于無符號數的比較,若對于無符號數的比較,若CF=1CF=1,被減數?。环駝t,被減數大。被減數小;否則,被減數大。323.2.2 3.2.2 算術運算指令(算術運算指令(5 5) 減法類指令減法類指令SUB/SBB/DEC/NEGSUB/SBB/DEC/NEG和和CMP/CMPXCHG/CMPXCH
27、G8BCMP/CMPXCHG/CMPXCHG8B6) 6) 比較并交換指令比較并交換指令CMPXCHGCMPXCHG 格式:格式:CMPXCHG r/m, r CMPXCHG r/m, r ;3232位比較指令位比較指令 將將目的目的寄存器或存儲器中數和寄存器或存儲器中數和累加器累加器中數中數比較比較,如等則如等則ZFZF為為1 1,源操作數,源操作數 目的操作數;否則目的操作數;否則ZFZF為為0 0,目的操作數,目的操作數 累加器。累加器。 比如:比如:ALAL=11H=11H,BLBL=24H=24H,1000H1000H=22H=22H,執(zhí)行指令執(zhí)行指令CMPXCHGCMPXCHG10
28、00H1000H,BLBL又如:又如:EBXEBX=76543210H,=76543210H,ECXECX=01234567H=01234567H,EAXEAX=01234567H=01234567H,則執(zhí)行指令,則執(zhí)行指令CMPXCHG ECXCMPXCHG ECX,EBXEBX只影響只影響ZF333.2.2 3.2.2 算術運算指令(算術運算指令(5 5)7) 87) 8字節(jié)比較指令字節(jié)比較指令CMPXCHG8BCMPXCHG8B將將EDXEAXEDXEAX中的中的8 8個字節(jié)與個字節(jié)與m m所指的存儲器所指的存儲器中的中的8 8個字節(jié)比較。個字節(jié)比較。 若若ZFZF為為1 1, ECXE
29、BXECXEBX 目的操作數;否目的操作數;否則則ZFZF為為0 0,目的操作數,目的操作數 EDXEAXEDXEAX 。比如比如: :EAXEAX=11111111H=11111111H,EBXEBX=22222222H=22222222H,ECXECX=33333333H=33333333H,EDXEDX=44444444H=44444444H,設,設DSDS段段1000H1000H所指單元所指單元開始的開始的8 8字節(jié)為字節(jié)為4444444411111111H4444444411111111H,執(zhí)行,執(zhí)行指令指令CMPXCHG8BCMPXCHG8B1000H1000H;存儲單元為目的操作
30、數存儲單元為目的操作數只影響只影響ZF343.2.2 3.2.2 算術運算指令(算術運算指令(6 6) 乘法指令乘法指令MUL/IMUL MUL/IMUL 無符號數的乘法指令無符號數的乘法指令MULMULMULMULCX CX ;AXAX中數和中數和CXCX中數相乘,結果在中數相乘,結果在DXDX和和AXAX中中MULMUL BYTE PTR DIBYTE PTR DIMUL MUL WORD PTR SIWORD PTR SI有符號數的乘法指令有符號數的乘法指令IMULIMULIMUL IMUL CLCLIMULIMULBXBX,100 ; BX100 ; BX* *100 100 BX B
31、XIMUL IMUL BYTE PTR BXBYTE PTR BXIMUL IMUL WORD PTR DI WORD PTR DI MUL和和IMUL執(zhí)行時,執(zhí)行時,會影響標志位會影響標志位CF和和OF,但,但,AF、PF、SF和和ZF無意義。無意義。353.2.2 算術運算指令(7) 有符號數乘法指令的擴充形式有符號數乘法指令的擴充形式第一組指令:第一組指令:IMULIMULBXBX,CX ; BX CX ; BX * * CX CX BX BXIMULIMULEDXEDX,ECXECXIMULIMULDIDI,MEM_WORDMEM_WORDIMULIMULEDXEDX,MEM_DWOR
32、DMEM_DWORD第二組指令:第二組指令:IMUL IMUL DXDX,BXBX,300300IMULIMULCXCX,2323IMULIMULEBPEBP,200200IMULIMULECXECX,EDXEDX,20002000IMULIMULBXBX,MEM_WORDMEM_WORD,300300IMULIMULEDXEDX,MEM_DWORDMEM_DWORD,202036除法指令除法指令注意注意當被除數為當被除數為1616位,除數為位,除數為8 8位時,位時,8 8位的商放在位的商放在ALAL,8 8位的余數放位的余數放在在AHAH當被除數為當被除數為3232位,除數為位,除數為16
33、16位,位,1616位的商放在位的商放在AXAX中,中,1616位的余位的余數放在數放在DXDX 。37除法指令幾點除法指令幾點注意:注意: 標志位標志位AFAF、CFCF、OFOF、PFPF、SFSF和和ZFZF無意義無意義 。 商范圍如下,超出了范圍則產生商范圍如下,超出了范圍則產生0 0號中斷:號中斷: 雙字除以字為雙字除以字為-32 768-32 768+32 767+32 767 字除以字節(jié)字除以字節(jié)-128-128+127+127 有符號數除法規(guī)定有符號數除法規(guī)定余數的符號和被除數的符余數的符號和被除數的符號相同號相同。 要求用要求用1616位數除以位數除以8 8位數,或者用位數,
34、或者用3232位數除位數除以以1616位數。位數。383.2.2 算術運算指令(8) 除法指令除法指令DIV/IDIV DIV/IDIV 無符號數的除法指令無符號數的除法指令DIVDIVDIVDIVCLCL ;AXAX中的數據除以中的數據除以CLCL中的數據,商在中的數據,商在ALAL中,余中,余數在數在AHAH中中 DIVDIVWORD PTR DIWORD PTR DI ;DXDX和和AXAX中的中的3232位數除以位數除以DIDI、DI+1DI+1所指的所指的1616位位數,商在數,商在AXAX中,余數在中,余數在DXDX中中有符號數的除法指令有符號數的除法指令IDIVIDIVIDIV
35、IDIV BXBXIDIV IDIV BYTE PTRDIBYTE PTRDI393.2.2 算術運算指令(9) 類型轉換指令類型轉換指令CBW/CWD/CWDE/CDQCBW/CWD/CWDE/CDQCBW CBW ; AL ; AL AH:AL;AH:AL;執(zhí)行時,不影響標志位。執(zhí)行時,不影響標志位。CWD ;AX CWD ;AX DX:AXDX:AXCWDE ; AX CWDE ; AX EAXEAXCDQ ; AX CDQ ; AX EDX:EAXEDX:EAX403.2.2 算術運算指令(10) 兩類兩類BCDBCD碼碼組合的組合的BCDBCD碼碼非組合的非組合的BCDBCD碼碼 B
36、CDBCD碼指令碼指令 AAA/DAAAAA/DAA、AAS/DASAAS/DAS、AAMAAM和和AADAAD非非/ /組合的加法十進制調整指令組合的加法十進制調整指令AAA/DAAAAA/DAABCDBCD碼的減法十進制調整指令碼的減法十進制調整指令AAS/DAS AAS/DAS BCDBCD碼的乘法十進制調整指令碼的乘法十進制調整指令AAMAAMBCDBCD碼的除法十進制調整指令碼的除法十進制調整指令AADAAD自自學學413.2.3 邏輯運算和移位指令邏輯指令分為兩類:邏輯指令分為兩類:邏輯運算指令邏輯運算指令移位指令移位指令423.2.3 邏輯運算和移位指令(1) 邏輯運算指令邏輯運
37、算指令AND/OR/NOT/XOR/TESTAND/OR/NOT/XOR/TESTANDANDAXAX,1000H1000HANDANDEAXEAX,EBXEBXAND AND EDXEDX,EBX+ESI EBX+ESI ORORAXAX,00F0H00F0HXORXORALAL,0FH0FHXORXOREAXEAX,EAXEAXXORXORECXECX,100100XORXORECXECX,10000000H10000000HTESTTESTEAXEAX,80000000H80000000HTESTTESTALAL,0101NOTNOTALALNOTNOTEBXEBXNOTNOTWORD
38、PTR 1000HWORD PTR 1000H 6 6TEST和和AND執(zhí)行同樣操作,但執(zhí)行同樣操作,但TEST指令指令不送回操作結果不送回操作結果,而僅僅,而僅僅影響標志位。如:影響標志位。如: TEST AX,8000H ;如;如AX的最高位為的最高位為1,則,則ZF0,否則否則ZF1 433.2.3 邏輯運算和移位指令(2) 移位指令移位指令SAL/SAR/SHL/SHRSAL/SAR/SHL/SHR和和ROL/ROR/RCL/RCRROL/ROR/RCL/RCR 非循環(huán)移位指令非循環(huán)移位指令 SAL/SAR/SHL/SHRSAL/SAR/SHL/SHR 如如:SAL:SALEDXEDX
39、,8 8 SALSALEAXEAX,CLCLSALSALALAL,1 1 (a) 算術左移指令算術左移指令SAL; (b) 邏輯左移指令邏輯左移指令SHL(c) 算術右移指令算術右移指令SAR; (d) 邏輯右移指令邏輯右移指令SHR443.2.3 邏輯運算和移位指令(2) 移位指令移位指令SAL/SAR/SHL/SHRSAL/SAR/SHL/SHR和和ROL/ROR/RCL/RCRROL/ROR/RCL/RCR 循環(huán)移位指令循環(huán)移位指令 ROL/ROR/RCL/RCRROL/ROR/RCL/RCR如如: :ROLROLWORD PTR DIWORD PTR DI,CLCLRCRRCR EBX
40、EBX,CLCLROL ROL BXBX,1 1 不帶不帶CF的循環(huán)左移指令的循環(huán)左移指令ROL; (b) 不帶不帶CF的循環(huán)右移指令的循環(huán)右移指令ROR; (c) 帶帶CF的循環(huán)左移指令的循環(huán)左移指令RCL; (d) 帶帶CF的循環(huán)右移指令的循環(huán)右移指令RCR453.2.3 邏輯運算和移位指令(3) 雙移位指令雙移位指令SHLD/SHRDSHLD/SHRDSHLDSHLDEAXEAX,EBXEBX,3 3SHLDSHLDMEM_WORD,DX,8MEM_WORD,DX,8SHLDSHLDECX,EDX,21ECX,EDX,21SHLDSHLDMEM_DWORD,EAX,2MEM_DWORD,
41、EAX,2SHLDSHLDAL,BL,CLAL,BL,CLSHRDSHRDEAXEAX,EBXEBX,1010SHRDSHRDECX,EDX,19ECX,EDX,19SHRDSHRDEAX,EBX,CLEAX,EBX,CL 了了解解463.2.4 串操作指令(1) 字符串傳送指令字符串傳送指令MOVSB/MOVSW/MOVSDMOVSB/MOVSW/MOVSD比如下面的程序段:比如下面的程序段:MOVMOV SISI,1000H1000HMOVMOVDIDI,2000H2000HMOVMOVCXCX,100100CLDCLDREP MOVSBREP MOVSB 源源DS:SI,目的操作目的操作
42、數數ES:DI47MOVSBMOVSB指令指令注意點注意點: 源地址用源地址用SISI寄存器指出寄存器指出 目的地址用目的地址用DIDI寄存器指出寄存器指出 CXCX中為字節(jié)數或字數或雙字數。中為字節(jié)數或字數或雙字數。 若若DFDF為為0 0,則用,則用MOVSB/MOVSWMOVSB/MOVSW/MOVSD/MOVSD時,每傳送一次,時,每傳送一次,SISI和和DIDI自自動增動增1 1、2 2或或4 4。若。若DFDF為為1 1,則每傳,則每傳送一次,送一次,SISI和和DIDI自動減自動減1 1、2 2或或4 4。483.2.4 串操作指令(2) 字符串比較指令字符串比較指令CMPSB/
43、CMPSW/CMPSDCMPSB/CMPSW/CMPSDMOVMOVDIDI,0400H0400HMOVMOVSISI,0E2DH0E2DHCLDCLDMOVMOVCXCX,00040004REPZ REPZ CMPSBCMPSBJZJZDONEDONERETRETDONEDONE:.源源DS:SI,目的目的ES:DI了了解解493.2.4 串操作指令(3) 字符串檢索指令字符串檢索指令SCASB/SCASW/SCASDSCASB/SCASW/SCASDMOVMOVDIDI,0EEDH0EEDHCLDCLDMOVMOVCXCX,4 4MOVMOVDXDX,CXCXREPNZREPNZSCASB
44、SCASBJNZJNZAAAAAASUB SUB DXDX,CXCXDECDECDX DX MOVMOVDI,DXDI,DXINCINCBYTE PTR DI+440BYTE PTR DI+440AAAAAA:.了了解解503.2.4 串操作指令(4) 取字符串取字符串指令指令LODSB/LODSW/LODSDLODSB/LODSW/LODSD 存字符串存字符串指令指令STOSB/STOSW/STOSDSTOSB/STOSW/STOSD I/OI/O串操作指令串操作指令INSB/OUTSBINSB/OUTSB、 INSW/OUTSWINSW/OUTSW和和INSD/OUTSD INSD/OUT
45、SD 513.2.5 3.2.5 調用調用/ /轉移轉移/ /循環(huán)控制循環(huán)控制/ /中斷指令中斷指令(1) 關于轉移指令和調用指令的尋址關于轉移指令和調用指令的尋址 段內直接轉移方式段內直接轉移方式 段內間接轉移方式段內間接轉移方式 段間直接轉移方式段間直接轉移方式 段間間接尋址方式段間間接尋址方式52段內直接轉移方式段內直接轉移方式段內間接轉移方式段內間接轉移方式段間直接轉移方式段間直接轉移方式段間間接尋址方式段間間接尋址方式533.2.5 3.2.5 調用調用/ /轉移轉移/ /循環(huán)控制循環(huán)控制/ /中斷指令中斷指令(2) 子程序調用和返回指令子程序調用和返回指令CALL/RETCALL/
46、RET比如比如CALLCALL 1000H1000HCALLCALLEAXEAXCALLCALL2500H2500H:3600H3600HCALLCALLDWORD PTR DIDWORD PTR DI543.2.5 3.2.5 調用調用/ /轉移轉移/ /循環(huán)控制循環(huán)控制/ /中斷指令(中斷指令(3 3) 帶參數的返回指令:帶參數的返回指令:RET RET n nDDD:DDD:PUSHPUSHBPBP MOV MOVBPBP,SPSP PUSH PUSHESES PUSH PUSHDIDI LES LESDIDI,BP+04BP+04AAAAAA:MOVMOVALAL,ESES:DIDI
47、CMP CMPAL,00AL,00 JZ JZEEEEEE PUSH PUSHAXAX CALL CALLDISPLAYDISPLAY INC INCDIDI JMP JMPAAAAAAEEEEEE:POPPOPDIDI POP POPESES POP POPBPBP RET RET00040004圖圖3.7 進入子程序前的棧頂內容進入子程序前的棧頂內容(圖中段地址要改為圖中段地址要改為“段碼段碼”) n為為0FFFFH范圍中的偶數范圍中的偶數553.2.5 3.2.5 調用調用/ /轉移轉移/ /循環(huán)控制循環(huán)控制/ /中斷指令(中斷指令(4 4) 無條件轉移指令和條件轉移指令無條件轉移指令和
48、條件轉移指令JMP/JJMP/J* *(其中,(其中,* * 代表各種條件)代表各種條件)條件轉移指令條件轉移指令JMPJMPJMPJMP1000H1000HJMPJMPCXCXJMPJMP1000H1000H:2000H2000HJMP JMP DWORD PTR SIDWORD PTR SI563.2.5 3.2.5 調用調用/ /轉移轉移/ /循環(huán)控制循環(huán)控制/ /中斷指令(中斷指令(5 5) 無條件轉移指令和條件轉移指令無條件轉移指令和條件轉移指令JMP/JJMP/J* *(其中,(其中,* * 代表各種條件)代表各種條件)條件轉移指令條件轉移指令J J* * JE/JZJE/JZ J
49、NE/JNZJNE/JNZ JG/JNLEJG/JNLE JNG/JLEJNG/JLE JL/JNGEJL/JNGE JNL/JGEJNL/JGE JB/JNAEJB/JNAE JNB/JAEJNB/JAE JA/JNBEJA/JNBE JNA/JBEJNA/JBE JSJS JNSJNS JOJO JNOJNO JPJP NPNP JCXZJCXZLABLELABLE JECXZJECXZABCABC57跳轉指令舉例跳轉指令舉例GETMAX:GETMAX:MOVMOVBXBX,2000H2000H MOV MOVALAL,BXBX MOV MOVCXCX,14H14HP1P1:INCINCB
50、XBX CMP CMPALAL,BXBX JAE JAEP2P22 2 MOV MOVALAL,BXBXP2P2:DECDECCXCX JNZ JNZP1P1 MOV MOVBXBX,2000H2000H MOV MOV BXBX,ALAL找最大數并找最大數并存到存到2000H單元單元583.2.5 3.2.5 調用調用/ /轉移轉移/ /循環(huán)控制循環(huán)控制/ /中斷指令(中斷指令(6 6) 循環(huán)控制指令循環(huán)控制指令LOOPLOOP、LOOPZ/LOOPELOOPZ/LOOPE和和LOOPNZ/LOOPNELOOPNZ/LOOPNE計數循環(huán)指令計數循環(huán)指令LOOPLOOP比如:延遲子程序:比如:
51、延遲子程序: MOVMOV CXCX,0100H0100HKKK:KKK:LOOP LOOP KKKKKK 593.2.5 3.2.5 調用調用/ /轉移轉移/ /循環(huán)控制循環(huán)控制/ /中斷指令(中斷指令(7 7) 循環(huán)控制指令循環(huán)控制指令LOOPLOOP、LOOPZ/LOOPELOOPZ/LOOPE 和和LOOPNZ/LOOPNELOOPNZ/LOOPNE相等則循環(huán)指令相等則循環(huán)指令LOOPZ/LOOPELOOPZ/LOOPE例子:例子: MOVMOVCXCX,28H28H MOV MOVSISI,0FFH0FFHNEXTNEXT:INCINCSISI CMP CMPBYTE PTR SIB
52、YTE PTR SI,0 0 LOOPZ LOOPZNEXTNEXT JNZ JNZOKKOKK CALL CALLDISPLAY1DISPLAY1 RET RETOKKOKK: CALLCALLDISPLAY2DISPLAY2 RET RET尋找第一個非尋找第一個非0元素元素603.2.5 3.2.5 調用調用/ /轉移轉移/ /循環(huán)控制循環(huán)控制/ /中斷指令(中斷指令(8 8)中斷指令和中斷返回指令中斷指令和中斷返回指令INTINT和和IRET/IRETDIRET/IRETDINTINT指令和指令和IRET/IRETDIRET/IRETD指指令令類型類型0 04 4的中斷的中斷INTINT
53、指令的例子指令的例子61中斷調用示例中斷調用示例1 1例例1 1:顯示一個字符串和接收一個字符串。:顯示一個字符串和接收一個字符串。KEYBUF DB DUP KEYBUF DB DUP (?)(?)MEME DB DB INPUT YOUR PASSWORDINPUT YOUR PASSWORDDAIDAI:MOVMOV DXDX,OFFSET MEOFFSET MEMOVMOV AHAH,9 9;顯示一個字符串顯示一個字符串INTINT 21H21HKEYINKEYIN:MOVMOV DXDX,OFFSET KEYBUFOFFSET KEYBUFMOVMOV AHAH,0AH 0AH ;接
54、收一個字符串接收一個字符串INTINT 21H21H62中斷調用示例中斷調用示例2 2例例2 2:將中斷處理程序進行裝配將中斷處理程序進行裝配INTERSETINTERSET:CLICLIMOVMOVDX,OFFSET MYPROGDX,OFFSET MYPROGMOVMOVALAL,50H50H; ;終斷類型號終斷類型號MOVMOVAHAH,25H25HINTINT21H21H; ;此后可以用此后可以用INT 50HINT 50H指令非常方便地調用它。指令非常方便地調用它。例例3 3:把:把鍵盤輸入的字符鍵盤輸入的字符讀到讀到ALAL寄存器中寄存器中MOVMOVAHAH,0101INTINT
55、21H21H63中斷調用示例中斷調用示例3 3例例4 4:把:把DLDL中的字符顯示在屏幕上。中的字符顯示在屏幕上。MOVMOV DLDL,AAMOVMOV AHAH,0202INTINT 21H21H64中斷調用示例中斷調用示例4 4例例5 5 ,利用滾行功能清除屏幕,利用滾行功能清除屏幕CLEARCLEAR: MOVMOVAHAH,6 6MOVMOVALAL,0 0MOVMOVCHCH,0 0MOVMOVCLCL,0 0MOVMOVDHDH,2424MOVMOVDLDL,7979MOVMOVBHBH,7 7INTINT10H10H65中斷調用示例中斷調用示例5 5例例6 6:使光標定位在窗
56、口的左下角:使光標定位在窗口的左下角POS_CURSEPOS_CURSE:MOVMOVAHAH,2 2 MOV MOVDHDH,1616 MOV DL MOV DL,3030 MOV MOVBHBH,0 0 INT INT10H10H66; ;例例6 6使光標定位在窗使光標定位在窗口的左下角口的左下角POS_CURSE:MOV AH,2POS_CURSE:MOV AH,2MOVMOV DH,8DH,8 MOV DL,50 MOV DL,50 MOV MOV BH,0BH,0 INT INT 10H10H mov dl,A mov dl,A mov ah,02 mov ah,02 int 21h
57、 int 21h ;例例5 利用滾行功能清除屏幕利用滾行功能清除屏幕 CLEAR:MOV AH,6MOVAL,0MOVCH,0MOVCL,0MOVDH,24MOVDL,79MOVBH,100INT10Hmov dl,A mov ah,02 int 21h 673.2.6 3.2.6 標志操作和處理器控制指令標志操作和處理器控制指令 標志操作指令標志操作指令STC/CLC/CMCSTC/CLC/CMC、STD/CLDSTD/CLD和和STI/CTISTI/CTI進位標志處理指令進位標志處理指令STC/CLC/CMCSTC/CLC/CMC方向標志設置指令方向標志設置指令STD/CLDSTD/CLD
58、中斷允許標志設置和清除指令中斷允許標志設置和清除指令STI/CLISTI/CLI 暫停指令暫停指令HLT HLT 和無操作指令和無操作指令NOPNOP暫停指令暫停指令HLTHLT無操作指令無操作指令NOPNOP交權指令和等待指令交權指令和等待指令ESC/WAIT ESC/WAIT 總線封鎖指令總線封鎖指令LOCK LOCK 683.2.7 3.2.7 條件測試和字節(jié)設置指令條件測試和字節(jié)設置指令 基于某個標志測試的字節(jié)設置指令基于某個標志測試的字節(jié)設置指令SETZ/SETESETZ/SETE、SETNZ/SETNESETNZ/SETNE、SETC/SETNCSETC/SETNC、SETS/SE
59、TNSSETS/SETNS、SETO/ SETNOSETO/ SETNO和和SETP/ SETNPSETP/ SETNPSETZSETZ指令和指令和SETESETE指令指令SETNZSETNZ指令和指令和SETNESETNE指令指令SETCSETC指令指令SETNCSETNC指令指令SETSSETS指令指令SETNSSETNS指令指令SETOSETO指令指令SETNOSETNO指令指令SETPSETP指令指令SETNPSETNP指令指令693.2.7 3.2.7 條件測試和字節(jié)設置指令條件測試和字節(jié)設置指令 基于無符號數比較的字節(jié)設置指令基于無符號數比較的字節(jié)設置指令SETB/SETNAE/S
60、ETCSETB/SETNAE/SETC、SETNB/SETAE/SETNCSETNB/SETAE/SETNC、SETBE/SETNASETBE/SETNA和和SETNBE/SETA SETNBE/SETA SETB/SETNAE/SETCSETB/SETNAE/SETCSETNB/SETAE/SETNCSETNB/SETAE/SETNCSETBE/SETNASETBE/SETNASETNBE/SETASETNBE/SETA自自學學703.2.7 3.2.7 條件測試和字節(jié)設置指令條件測試和字節(jié)設置指令基于有符號數比較的字節(jié)設置指令基于有符號數比較的字節(jié)設置指令SETL/SETNGESETL/S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年03月南昌市滕王閣保育院面向社會勞務派遣人員筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 自動化貼補強機項目風險評估報告
- 數字化X射線機項目風險分析和評估報告
- 超細氮化硅項目安全風險評價報告
- 長沙學院《藏族文學概論》2023-2024學年第二學期期末試卷
- 消費金融業(yè)務流程優(yōu)化與變革考核試卷
- 中國人壽保險知識普及
- 2025年中考歷史一輪復習之經典好題單元練(十二)-從國共合作到國共對立(學生版)
- 醫(yī)學品管圈匯報35
- 2025標準化的蔬菜買賣合同模板
- 設備搬運合同的模板
- 有機肥料整體供貨方案及保證措施
- 跨國公司的國際營銷策略淺析-以聯合利華為例
- 《肌力訓練》課件
- 全媒體運營師-國家職業(yè)標準(2023年版)
- 招標投標法培訓課件
- GLB-2防孤島保護裝置試驗報告
- 皮膚科玫瑰痤瘡的臨床表現和診斷學習培訓課件
- 高考日語復習:日語形容詞用法專項課件
- 馬克思主義與社會科學方法論概述(課件)
- 城市道路養(yǎng)護技術規(guī)程
評論
0/150
提交評論