版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
3.380x86的指令系統(tǒng)80x86的指令系統(tǒng)中共有136種基本指令,可以分成6個(gè)功能組:
數(shù)據(jù)傳送(Datatransfer)25
算術(shù)運(yùn)算(Arithmetic)21
邏輯運(yùn)算和移位指令(Logic&Shift)21
串處理(Stringmanipulation)7
控制轉(zhuǎn)移(ControlTransfer) 47
處理機(jī)控制(ProcessorControl)15先介紹以下內(nèi)容:1.
學(xué)習(xí)指令的要點(diǎn)2.
指令中操作數(shù)的表示3.
書寫指令注意事項(xiàng)先介紹以下內(nèi)容:1.
指令助記符表2.
學(xué)習(xí)指令的要點(diǎn)3.
利用DEBUG程序,學(xué)習(xí)指令系統(tǒng)4.
指令中操作數(shù)的表示5.
書寫指令注意事項(xiàng)1.指令助記符表1.學(xué)習(xí)指令的要點(diǎn)從以下幾個(gè)方面來掌握一條指令:
指令的助記符
指令的格式:操作數(shù)的個(gè)數(shù)、類型(B,W,DW)
執(zhí)行的操作:指令執(zhí)行后的結(jié)果包括:哪些寄存器、內(nèi)存單元的值發(fā)生了變化對標(biāo)志位有無影響,哪些受影響
特點(diǎn)及注意事項(xiàng)只介紹常用的指令,其他需要時(shí)可自學(xué)。重點(diǎn)關(guān)注:指令的匯編格式指令的基本功能指令支持的尋址方式指令的執(zhí)行對標(biāo)志位的影響指令的特殊要求D:\>DEBUG
-A
;匯編指令0AF8:0100MOVAL,B5
0AF8:0102ADDAL,8F
0AF8:0104
-R
;顯示指令執(zhí)行前各寄存器的值A(chǔ)X=0000BX=0000CX=0000DX=0000、、、、、、CS=0AF8IP=0100NVUP
EIPLNZNA
PO
NC-T=1002
;執(zhí)行指令,查看結(jié)果AX=0044BX=0000CX=0000DX=0000、、、、、、CS=0AF8IP=0104OVUPEIPL
NZ
ACPECY0AF8:01042080FC01AND[BX+SI+01FC],AL-
10110101
+
10001111進(jìn)位1
111111
01000100編程完成B5h+8Fh=?學(xué)習(xí)加法ADD指令及其對狀態(tài)標(biāo)志位的影響。3.利用DEBUG學(xué)習(xí)指令系統(tǒng)(示例)2.指令中操作數(shù)的表示符號表示內(nèi)容data立即數(shù)操作數(shù)reg通用寄存器操作數(shù)8位:AH、AL、BH、BL、CH、CL、DH、DL16位:AX、BX、CX、DX、BP、SP、SI、DIsegreg段寄存器CS、DS、SS、ESmem或[]存儲器操作數(shù)(5種尋址方式)src源操作數(shù)dst目的操作數(shù)
(
)注釋時(shí)表示寄存器、存儲器、端口的內(nèi)容oprd1oprd2兩操作數(shù)3.書寫指令注意事項(xiàng):不區(qū)分字母的大小寫。下列寫法表示同一條指令:MOVAX,1ABDHmovax,1abdh
不添加指令系統(tǒng)沒有的指令,即不自創(chuàng)助記符。將MOVAL,0寫成MOVEAL,0JMPlable寫成JUMPlable
注意操作數(shù)的范圍對字節(jié)操作指令0~FFH0~255對字操作指令0~FFFFH0~65535
MOVAL,260
MOVAX,70000MOVAL,1FFHMOVAL,2ABCDH
對無操作數(shù)指令,不添加操作數(shù)。
STCAL
對單操作數(shù)指令,操作數(shù)不能是立即數(shù)。
IMUL6
對雙操作數(shù)指令①不能兩個(gè)同為存儲器操作數(shù)
MOV[DI],[SI]
②目的操作數(shù)不能是立即數(shù)
ADD3,AL
③
兩個(gè)操作數(shù)的類型應(yīng)相同
SUBAX,BL
若value定義為字類型存儲器變量:
MOVCL,value[BX]
內(nèi)存操作數(shù)的屬性應(yīng)明確。
MOV[BX],0MOVbyteptr[BX],0MOVwordptr[BX],0MOV[BX],ALMOV[BX],AXA、B、C、D、E、F開頭的十六進(jìn)制數(shù)前面加0,與H結(jié)尾的標(biāo)識符區(qū)別。如寄存器名:AH、BH、CH、
DH
變量名:abcdH等例
movAL,0AHmovAL,AHmovBX,0abcdHCS和IP的值只在控制轉(zhuǎn)移指令中修改。對非控制轉(zhuǎn)移指令,取完指令后IP值自動指向下條指令。段寄存器CS的值,只在MOV、PUSH中可作操作數(shù),且這兩條指令執(zhí)行結(jié)果不改變CS值。MOVAX,CSPUSHCSIP、PSW兩個(gè)寄存器不作為操作數(shù)在指令中出現(xiàn)。movIP,1234HmovPSW,0F0FHPSW狀態(tài)寄存器的值由指令執(zhí)行后確定,不同的指令對各標(biāo)志的影響不同。
數(shù)據(jù)傳送是最基本、最重要的一種操作實(shí)際程序中,使用的比例最高
changePROC
LEASI,num+2MOVCL,num+1MOVCH,0MOVAX,0MOVDI,10next:MULDI
MOVBH,0MOVBL,[SI]ANDBL,0FHADDAX,BXINCSILOOPnextzero:MOVBX,AXRETchangeENDP
匯編子程例:寄存器寄存器寄存器內(nèi)存單元寄存器I/O端口設(shè)置寄存器、內(nèi)存單元的初始值3.3.1
數(shù)據(jù)傳送指令
按傳送內(nèi)容,可分為四類:
通用數(shù)據(jù)傳送指令
累加器專用傳送指令
地址傳送指令
標(biāo)志寄存器傳送指令
特點(diǎn):
1.除POPF/FD、SAHF外,其他傳送指令對標(biāo)志位均無影響
2.唯一允許以段寄存器做操作數(shù)的指令且只有MOV、PUSH、POP這三條允許通用傳送指令(8) MOV MOVSX MOVZX PUSH POP PUSHA/PUSHAD POPA/POPAD XCHG
傳送帶符號擴(kuò)展傳送帶零擴(kuò)展傳送進(jìn)棧出棧所有寄存器進(jìn)棧所有寄存器出棧交換(1)MOV傳送指令格式
MOVDST,SRC執(zhí)行
(DST)←(SRC)reg/mem/segreg←regreg/segreg←memreg/mem←segregreg/mem←data
可實(shí)現(xiàn)例:①reg/mem/segreg←reg通用寄存器/存儲器/段寄存器←通用寄存器
MOVAL,BLMOV[BX],ALMOVDS,AX②reg/segreg←mem通用寄存器/段寄存器←存儲器
MOVAL,[BX]MOVDS,[BX+SI]
③reg/mem←segreg通用寄存器/存儲器←段寄存器
MOVBX,CSMOV[BX],DS
④reg/mem←data通用寄存器/存儲器←立即數(shù)
MOVAl,9MOVBX,OFFSETbufferMOVBYTEPTR[value],0MOVWORDPTR[BX],1MOV指令特點(diǎn)及注意事項(xiàng):
雙操作數(shù)指令(注意雙操作指令的特點(diǎn))可進(jìn)行字節(jié)或字傳送不允許存儲器傳送到存儲器MOV[BX],valueMOV[DI],[SI]MOVAX,valueMOV[BX],AXMOVAL,[SI]MOV[DI],AL
可對DS、ES、SS賦值但不允許立即數(shù)直接傳送給段寄存器MOVDS,AXMOVES,[BX]MOVDS,1000HMOVAX,1000HMOVDS,AX
CS不能做目的操作數(shù),不能通過傳送指令改變CS的值
MOVCS,AX
不允許段寄存器傳送到段寄存器
MOVES,DSMOVAX,DSMOVES,AXD:\MASM>DEBUG-A1693:0100MOVES,DS^Error1693:0100MOVAX,DS1693:0102MOVES,AX1693:0104-例編程將CL寄存器的內(nèi)容傳送到200:100H單元中。MOVAX,200HMOVDS,AX;(DS)=200HMOV[100H
],CL;(02100H)=(CL)編程1:MOVAX,200HMOVDS,AX;(DS)=200HMOVDI,100H;(DI)=100HMOV[DI
],CL;(02100H)=(CL)編程2:MOV[200:100H],CL
MOV指令應(yīng)用(自學(xué))例:實(shí)現(xiàn)將AREA1開始的100個(gè)數(shù)據(jù)傳送到AREA2開始的單元?!瑼REA1:AREA2:100個(gè)數(shù)據(jù)分析題意:
①可以用200條MOV指令來完成100個(gè)數(shù)據(jù)傳送,指令操作重復(fù),每個(gè)數(shù)據(jù)傳送后的地址是變化的。②可以利用循環(huán), 但每循環(huán)一次要修改地址(源地址和目的地址),必須把地址放在寄存器當(dāng)中,用寄存器間接尋址來尋找操作數(shù).得到如下程序:
…
MOVSI,OFFSETAREA1 MOVDI,OFFSETAREA2 MOVCX,100AGAIN: MOVAL,[SI] MOV[DI],AL
INCSI ;修改地址指針
INCDI ;修改地址指針
DECCX ;修改個(gè)數(shù)
JNZAGAIN
…MOVSX
帶符號擴(kuò)展傳送MOVZX
帶零擴(kuò)展傳送格式:MOVSX/
MOVZX
DST,SRC執(zhí)行的操作:(DST)
符號擴(kuò)展(SRC)例:
MOVSXEAX,CLMOVSXEDX,[EDI]MOVZXDX,ALMOVZXEAX,[EDI]注意:
1.目的操作數(shù)必須是16位或32位寄存器
2.源操作數(shù)的長度一定要小于目的操作數(shù)
3.MOVSX的源操作數(shù)應(yīng)是有符號數(shù),而MOVZX的源操作數(shù)應(yīng)是無符號數(shù)什么是堆棧,為什么需要堆棧堆棧是按照先進(jìn)后出原則組織的一段內(nèi)存區(qū)域存在于堆棧段中,SP在任何時(shí)候都指向棧頂。通常用于存放一些重要數(shù)據(jù),
如:程序的地址、或是需要恢復(fù)的數(shù)據(jù)。為方便數(shù)據(jù)的存放和恢復(fù),設(shè)置專門的指針,指向堆棧中要操作的單元。段值由SS給出,偏移地址由SP給出
SS→堆棧段寄存器(stacksegment)SP→堆棧指針寄存器(stackpoint)堆棧:“先進(jìn)后出”的存儲區(qū),堆棧使用的場合用堆棧保存恢復(fù)信息
子程序的調(diào)用、返回以及中斷調(diào)用、返回
用堆棧傳送數(shù)據(jù)(程序設(shè)計(jì)中介紹)注意事項(xiàng)
堆棧是一重要數(shù)據(jù)結(jié)構(gòu),使用堆棧應(yīng)有明確目的。不亂用堆棧操作,不亂修改堆棧內(nèi)容。PUSH、POP、PUSHF、POPF、CALL、RET、INT、IRET
亂修改SS和SP的內(nèi)容包括亂用BP參與的存儲器操作數(shù)
亂用指令
進(jìn)棧指令:PUSHSRC
執(zhí)行操作:(SP)
(SP)-2((SP)+1,(SP))
(SRC)
把一個(gè)字從源操作數(shù)(src)
由SP指向堆棧頂部。特點(diǎn):
單操作數(shù)指令操作數(shù)為16位,可以是reg/segreg/mem,不可以是datareg:AX,BX,CX,DX,SI,DI,BP,BXsegreg:CS,DS,ES,SSmem:字類型例:假設(shè)(AX)=2107H,執(zhí)行
PUSHAX(SP)
低地址高地址(SP)
07H21H低地址高地址進(jìn)棧方向********PUSHAX執(zhí)行前PUSHAX執(zhí)行后D:\MASM>DEBUG-A
;匯編兩條指令1693:0100MOVAX,12341693:0103PUSHAX1693:0104-R
;顯示指令執(zhí)行前寄存器值A(chǔ)X=0000
BX=0000CX=0000DX=0000
SP=FFEE
BP=0000SI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0100NVUPEIPLNZNAPONC1693:0100B83412MOVAX,1234-T=1002
;執(zhí)行CS:100開始處的兩條指令
….AX=1234
BX=0000CX=0000DX=0000
SP=FFEC
BP=0000SI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0104NVUPEIPLNZNAPONC1693:010403C6ADDAX,SI-DSS:FFECL10
;查看棧頂內(nèi)容1693:FFE0341200004...1693:FFF0FFFFFFFFFFFFFFFF-FFFFFFFFFFFFFFFF
.........…-例利用DEBUG學(xué)習(xí)PUSH指令注意相關(guān)寄存器和內(nèi)存單元內(nèi)容的變化出棧指令:POPDST
執(zhí)行操作:(DST)
(SP)+1,(SP))(SP)
(SP)+2把現(xiàn)行SP所指向堆棧頂部的一個(gè)字
指定的目的操作數(shù)(dest),同時(shí)進(jìn)行修改堆棧指針的操作。特點(diǎn):單操作數(shù)指令操作數(shù)為16位,可以是reg/segreg/mem,不可以是datareg:AX,BX,CX,DX,SI,DI,BP,BXsegreg:DS,ES,SS,不允許是CSmem:字類型例:POPBX(SP)
低地址高地址(SP)
07H21H低地址高地址出棧方向07H21H
(BX)=2107HPOPBX執(zhí)行前POPBX執(zhí)行后********-A
1693:0100MOVBP,SP;取當(dāng)前棧頂?shù)刂?/p>
1693:0102MOVWORDPTR[BP],1234;用MOV指令使棧頂內(nèi)容為1234H1693:0107POPBX;出棧指令1693:0108-R
;查看指令執(zhí)行前狀態(tài)AX=0000BX=0000CX=0000DX=0000SP=FFEE
BP=0000SI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0100NVUPEIPLNZNAPONC1693:010089E5MOVBP,SP-T=100
;執(zhí)行CS:100處的第一條mov指令A(yù)X=0000BX=0000CX=0000DX=0000SP=FFEE
BP=FFEESI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0102NVUPEIPLNZNAPONC1693:0102C746003412MOVWORDPTR[BP+00],1234SS:FFEE=0000-T
;執(zhí)行下一條mov指令A(yù)X=0000BX=0000CX=0000DX=0000SP=FFEE
BP=FFEESI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0107NVUPEIPLNZNAPONC1693:01075BPOPBX-T
;執(zhí)行pop指令,注意BX,SP的變化AX=0000BX=1234CX=0000DX=0000SP=FFF0BP=FFEESI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0108NVUPEIPLNZNAPONC1693:0108F5CMC-例在DEBUG下學(xué)習(xí)POP指令PUSHA/PUSHADPOPA/POPAD所有16位/32位寄存器進(jìn)棧所有16位/32位寄存器出棧執(zhí)行操作進(jìn)棧順序AX,CX,DX,BX,SP,BP,SI,DIEAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI
(SP)←(SP)-16(32)出棧順序DI,SI,BP,SP,BX,DX,CX,AXEDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX(SP)←(SP)+16(32)
交換指令:XCHGOPR1,OPR2
執(zhí)行操作:(OPR1)
(OPR2)例:XCHGBX,[BP+SI]XCHGAL,BH注意:
*
可進(jìn)行字或字節(jié)操作,不影響標(biāo)志位
*
不允許對立即數(shù)、段寄存器做操作數(shù)
XCHGAX,4
XCHGBX,DS
輸入指令(I/O
CPU)
長格式:INAL,PORT
(字節(jié))
INAX,PORT
(字)
INEAX,PORT
(雙字)
累加器專用傳送指令(只限使用AX或AL)執(zhí)行操作:(AL)
(PORT)(字節(jié))
(AX)
(PORT+1,PORT)(字)
(AX)
(PORT+3,PORT+2,PORT+1,PORT)(雙字)
短格式:INAL,DX
(字節(jié))
INAX,DX
(字)
INEAX,DX
(雙字)執(zhí)行操作:(AL)((DX))(字節(jié))
(AX)((DX)+1,(DX))(字)
(AX)((DX)+3,(DX)+2,(DX)+1,(DX))
(雙字)
長格式:OUTPORT,AL
(字節(jié))
OUTPORT,AX
(字)
OUTPORT,EAX
(雙字)執(zhí)行操作:(PORT)
(AL)(字節(jié))
(PORT+1,PORT)
(AX)(字)
(PORT+3,PORT+2,PORT+1,PORT)
(EAX)
(雙字)輸出指令(CPU
I/O)
短格式:OUTDX,AL
(字節(jié))
OUTDX,AX
(字)
OUTDX,EAX
(雙字)執(zhí)行操作:((DX))
(AL)(字節(jié))
((DX)+1,(DX))
(AX)(字)
((DX)+3,(DX)+2,(DX)+1,(DX))
(AX)
(雙字)注意:*
不影響標(biāo)志位*
前256個(gè)端口號00H~FFH可直接在指令中指定(長格式)*如果端口號
256,端口號
DX(短格式)例:INAX,28H;MOVDX,28H;INAX,DXMOVDATA_WORD,AX例:MOVDX,3FCHINAX,DX例:OUT5,AL例:測試某狀態(tài)寄存器(端口號27H)的第2位是否為1INAL,27HTESTAL,00000100BJNZERROR;若第2位為1,轉(zhuǎn)ERROR處理Sound程序
movdx,100
inal,61handal,11111100bsound:xoral,2
out61h,almovcx,140hwait1:loopwait1decdxjnesound設(shè)備控制寄存器端口61H1/00
控制其它外部設(shè)備與門放大器2號定時(shí)器門控10(BX)
30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H換碼指令:XLAT
或XLATOPR執(zhí)行操作:(AL)
((BX)+(AL))表格符號地址(首地址),只是為了提高可讀性而設(shè)置,匯編時(shí)仍用BX。例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE
指令執(zhí)行后(AL)=33H注意:
*
不影響標(biāo)志位*
字節(jié)表格(長度不超過256)
首地址
(BX)*
需轉(zhuǎn)換代碼(AL)XLAT指令使用方法:先建立一個(gè)字節(jié)表格;表格首偏移地址存入BX;需要轉(zhuǎn)換代碼的序號(相對與表格首地址位移量)存入AL;
(表中第一個(gè)元素的序號為0)執(zhí)行XLAT指令后,表中指定序號的元素存于AL中。
(AL)為轉(zhuǎn)換的代碼。XLAT指令應(yīng)用:若把字符的掃描碼轉(zhuǎn)換成ASCII碼;或數(shù)字0~9轉(zhuǎn)換成7段數(shù)碼所需要的相應(yīng)代碼(字形碼)等就要用XLAT指令。例:內(nèi)存的數(shù)據(jù)段中有一張十六進(jìn)制數(shù)字的ASCII碼表。
首地址為:Hex_table,欲查出表中第10個(gè)元素(‘A’)執(zhí)行指令序列:MOVBX,OFFSETHex_tableMOVAL,0AHXLATHex_table假設(shè): (DS)=F000H,
Hex_table=0040H
(AL)=0AH執(zhí)行XLAT以后:(AL)=41H=(F004AH), 即“A”的ASCII碼。30H31H32H...39H41H42H...46H...Hex_tableHex_table+1Hex_table+2Hex_table+0AHHex_table+0BHHex_table+0FH'F''B''A''9''1''2''0'16進(jìn)制數(shù)的ASCII碼表
地址傳送指令
有效地址送寄存器指令:LEAREG,SRC
執(zhí)行操作:(REG)
SRC
指針?biāo)图拇嫫骱虳S指令:LDSREG,SRC
執(zhí)行操作:(REG)
(SRC)(DS)
(SRC+2)
4個(gè)相繼字節(jié)
寄存器(通常是SI)、DS
指針?biāo)图拇嫫骱虴S指令:LESREG,SRC
執(zhí)行操作:(REG)
(SRC)(ES)
(SRC+2)
4個(gè)相繼字節(jié)
寄存器(通常是DI)、ES例:LEABX,[BX+SI+0F62H]
LDSSI,[10H]
LESDI,[BX]40H00H00H30H
TABLE(DS):1000HMOVBX,TABLE;(BX)=0040HMOVBX,OFFSETTABLE
;(BX)=1000HLEABX,TABLE
;(BX)=1000HLDSBX,TABLE;(BX)=0040H
;(DS)=3000HLESBX,TABLE;(BX)=0040H
;(ES)=3000H注意:
*
不影響標(biāo)志位
*
REG不能是段寄存器
*
SRC必須為存儲器尋址方式
標(biāo)志寄存器傳送指令
標(biāo)志送AH指令:LAHF
執(zhí)行操作:(AH)
(PSW的低字節(jié))
AH送標(biāo)志寄存器指令:SAHF
執(zhí)行操作:(PSW的低字節(jié))
(AH)
標(biāo)志進(jìn)棧指令:PUSHF
執(zhí)行操作:(SP)
(SP)-2((SP)+1,(SP))
(PSW)
標(biāo)志出棧指令:
POPF
執(zhí)行操作:(PSW)
((SP)+1,(SP))(SP)
(SP)+2*影響標(biāo)志位
類型轉(zhuǎn)換指令
CBWAL
AX
執(zhí)行操作:若(AL)的最高有效位為0,則(AH)=00H
若(AL)的最高有效位為1,則(AH)=0FFH
CWDAX
(DX,AX)
執(zhí)行操作:若(AX)的最高有效位為0,則(DX)=0000H
若(AX)的最高有效位為1,則(DX)=0FFFFH
例:(AX)=0BA45HCBW;(AX)=0045HCWD;(DX)=0FFFFH(AX)=0BA45H注意:
*
無操作數(shù)指令
*隱含對AL或AX進(jìn)行符號擴(kuò)展
*不影響條件標(biāo)志位
加法指令
ADD、ADC、INC
減法指令
SUB、SBB、DEC、NEG、CMP
乘法指令
MUL、IMUL
除法指令
DIV、IDIV
十進(jìn)制調(diào)整指令
DAA、DAS、
AAA、AAS、AAM、AAD3.3.2算術(shù)指令
加法指令
加法指令:ADDDST,SRC
執(zhí)行操作:(DST)
(SRC)+(DST)
帶進(jìn)位加法指令:ADCDST,SRC
執(zhí)行操作:(DST)
(SRC)+(DST)+CF
加1指令:INCOPR
執(zhí)行操作:(OPR)
(OPR)+1注意:*
除INC指令不影響CF標(biāo)志外,均對條件標(biāo)志位有影響。加法指令對條件標(biāo)志位(CF/OF/ZF/SF)的影響:CF位表示無符號數(shù)相加的溢出。OF位表示帶符號數(shù)相加的溢出。1結(jié)果為負(fù)0否則SF=1結(jié)果為00否則ZF=1和的最高有效位有向高位的進(jìn)位0否則CF=1兩個(gè)操作數(shù)符號相同,而結(jié)果符號與之相反0否則OF=n=8bit帶符號數(shù)(-128~127)無符號數(shù)(0~255)
00000100+0000101100001111帶:(+4)+(+11)=+15OF=0無:4+11=15CF=0帶符號數(shù)和無符號數(shù)都不溢出00001001+0111110010000101
帶:(+9)+(+124)=-123OF=1
無:9+124=133CF=0帶符號數(shù)溢出無符號數(shù)溢出00000111+1111101100000010帶:(+7)+(-5)=+2OF=0無:7+251=2CF=1帶符號數(shù)和無符號數(shù)都溢出10000111+1111010101111100帶:(-121)+(-11)=+124OF=1無:135+245=124CF=1例:雙精度數(shù)的加法
(DX)=0002H(AX)=0F365H(BX)=0005H(CX)=0E024H
指令序列
(1)ADDAX,CX
(2)ADCDX,BX
(1)執(zhí)行后,(AX)=0D389H
CF=1OF=0SF=1ZF=0(2)執(zhí)行后,(DX)=0008HCF=0OF=0SF=0ZF=0
減法指令減法指令:SUBDST,SRC
執(zhí)行操作:(DST)
(DST)-(SRC)帶借位減法指令:SBBDST,SRC
執(zhí)行操作:(DST)
(DST)-(SRC)-CF減1指令:DECOPR
執(zhí)行操作:(OPR)
(OPR)-1求補(bǔ)指令:NEGOPR
執(zhí)行操作:(OPR)
-(OPR)比較指令:CMPOPR1,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兩個(gè)操作數(shù)符號相反,而結(jié)果的符號與減數(shù)相同0否則OF=1減法轉(zhuǎn)換為加法運(yùn)算時(shí)無進(jìn)位0否則CF=或NEG指令對CF/OF的影響:0操作數(shù)為01否則CF=1操作數(shù)為-128(字節(jié)運(yùn)算)或操作數(shù)為-32768(字運(yùn)算)0否則OF=例:x、y、z均為雙精度數(shù),分別存放在地址為X,X+2;
Y,Y+2;Z,Z+2的存儲單元中,用指令序列實(shí)現(xiàn)
w
x+y+24-z
,并用W,W+2單元存放wMOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24SUBAX,ZSBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;結(jié)果存入W,W+2單元
乘法指令
無符號數(shù)乘法指令:MULSRC
執(zhí)行操作:
字節(jié)操作數(shù)(AX)
(AL)*(SRC)
字操作數(shù)(DX,AX)
(AX)*(SRC)
雙字操作(EDX,EAX)
(EAX)*(SRC)
帶符號數(shù)乘法指令:IMULSRC注意:
*AL(AX、EAX)為隱含的乘數(shù)寄存器。*
AX((DX,AX)、(EDX,EAX))為隱含的乘積寄存器。*
SRC不能為立即數(shù)。*除CF和OF外,對條件標(biāo)志位無定義。乘法指令對CF/OF的影響:例:(AX)=16A5H,(BX)=0611H
(1)
IMULBL
;(AX)(AL)*(BL)
;A5*11
5B*11=060B
F9F5
;
(AX)=0F9F5H
CF=OF=1(2)
MULBX
;(DX,AX)(AX)*(BX)
;16A5*0611=00895EF5
;
(DX)=0089H(AX)=5EF5H
CF=OF=100乘積的高一半為零11否則MUL指令:CF/OF=00乘積的高一半是低一半的符號擴(kuò)展11否則
IMUL指令:CF/OF=對于80286+,還有(1)雙操作數(shù)的IMUL格式:IMUL REG,SRC執(zhí)行的操作:字操作:(REG16)(REG16)*SRC雙字操作:(REG32)(REG32)*SRC注:
1、SRC與REG長度要一致
2、SRC可以是任一種尋址方式
3、SRC為立即數(shù)時(shí),可以是8位、16位、32位立即數(shù)對于80286+,還有(2)三操作數(shù)的IMUL格式:IMUL REG,SRC,IMM執(zhí)行的操作:字操作:(REG16)SRC*IMM雙字操作:(REG32)SRC*IMM注:
1、SRC與REG長度要一致
2、SRC可以是除立即數(shù)以外的任一種尋址方式3、IMM(立即數(shù)),可以是8位、16位、32位立即數(shù)三種IMUL的區(qū)別1、乘積字長不同
單操作數(shù)時(shí)乘積字長是源和目的操作數(shù)字長的二倍雙操作數(shù)和三操作數(shù)時(shí)乘積字長與源和目的操作數(shù)字長相同2、溢出位OF的意義不同單操作數(shù)時(shí)OF為1,乘積結(jié)果也是正確的雙操作數(shù)和三操作數(shù)時(shí)乘積結(jié)果不正確
除法指令
無符號數(shù)除法指令:DIVSRC
執(zhí)行操作:
字節(jié)操作(AL)
(AX)/(SRC)的商
(AH)
(AX)/(SRC)的余數(shù)字操作(AX)
(DX,AX)/(SRC)的商
(DX)
(DX,AX)/(SRC)的余數(shù)雙字操作(EAX)
(EDX,EAX)/(SRC)的商
(EDX)
(EDX,EAX)/(SRC)的余數(shù)
帶符號數(shù)除法指令:IDIVSRC注意:
*AX、(DX,AX)、(EDX,EAX)為隱含的被除數(shù)寄存器。
*
AL、(AX)、(EAX)為隱含的商寄存器。
*
AH、(DX)、(EDX)為隱含的余數(shù)寄存器。
*
SRC不能為立即數(shù)。
*
對所有條件標(biāo)志位均無定義。例:x,y,z,v均為16位帶符號數(shù),計(jì)算
(v-(x*y+z–540))/xMOVAX,XIMULY;x*yMOVCX,AXMOVBX,DXMOVAX,ZCWDADDCX,AXADCBX,DX;x*y+zSUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWDSUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX;(v-(x*y+z-540))/x
十進(jìn)制調(diào)整指令BCD碼:用二進(jìn)制編碼的十進(jìn)制數(shù),又稱二--十進(jìn)制數(shù)壓縮的BCD碼:用4位二進(jìn)制數(shù)表示1位十進(jìn)制數(shù)
例:(59)10=(01011001)BCD非壓縮的BCD碼:用8位二進(jìn)制數(shù)表示1位十進(jìn)制數(shù)例:(59)10=(0000010100001001)BCD數(shù)字的ASCII碼是一種非壓縮的BCD碼
DIGIT ASCII BCD0 30H 001100001 31H 001100012 32H 00110010… … …9 39H 00111001
十進(jìn)制調(diào)整指令
BCD碼:用二進(jìn)制編碼的十進(jìn)制數(shù),又稱二--十進(jìn)制數(shù)
壓縮的BCD碼:用4位二進(jìn)制數(shù)表示1位十進(jìn)制數(shù)例:(59)10=(01011001)BCD非壓縮的BCD碼:用8位二進(jìn)制數(shù)表示1位十進(jìn)制數(shù)例:(59)10=(0000010100001001)BCD數(shù)字的ASCII碼是一種非壓縮的BCD碼DIGIT ASCII BCD0 30H 001100001 31H 001100012 32H 00110010… … …9 39H 00111001例:寫出(3590)10的壓縮BCD碼和非壓縮BCD碼,并分別把它們存入數(shù)據(jù)區(qū)PAKED和UNPAK。壓縮BCD: (3590)10=(0011010110010000)BCD非壓縮BCD:
(3590)10=(00000011000001010000100100000000)BCDPAKED90H35HUNPAK00H09H05H03H壓縮的BCD碼調(diào)整指令加法的十進(jìn)制調(diào)整指令:DAA執(zhí)行操作:(AL)
(AL)壓縮BCD減法的十進(jìn)制調(diào)整指令:DAS執(zhí)行操作:(AL)
(AL)壓縮BCD19壓縮BCD:00011001+08+000010002700100001+110
(00100111)BCD
AF=1問題的提出:
注意:
*
隱含的操作寄存器為AL*
緊接在加減指令之后使用*影響條件標(biāo)志位(對OF無定義)調(diào)整方法:AF=1或(AL)0~3=A~F,則(AL)
(AL)
06H,AF=1CF=1或(AL)4~7=A~F,則(AL)
(AL)
60H,CF=1(DAA做‘+’,DAS做‘-’)例: DATASEGMENT
BCD1 DB 34H,18H;(1834)BCD BCD2 DB 89H,27H;(2789)BCD BCD3 DB 2DUP(?) DATAENDS(1)BCD3
BCD1+BCD2 ;(4623)BCD
(2)BCD3
BCD1-BCD2;(9045)BCD
=-955(1) MOV AL,BCD1;(AL)=34H
ADD AL,BCD2
;(AL)=34+89=BDH
DAA
;(AL)=BD+60+06=23HAF=CF=1
MOV BCD3,AL;(BCD3)=23H MOV AL,BCD1+1;(AL)=18H
ADC AL,BCD2+1;(AL)=18+27+1=40H
AF=1CF=0 DAA
;(AL)=40+06=46H
MOV BCD3+1,AL;(BCD3+1)=46H(2) MOV AL,BCD1 ;(AL)=34H
SUB AL,BCD2 ;(AL)=34-89=ABH
DAS ;(AL)=AB-60-06=45HAF=CF=1
MOV BCD3,AL;(BCD3)=45H MOV AL,BCD1+1;(AL)=18H
SBB AL,BCD2+1;(AL)=18-27-1=F0H
DAS ;(AL)=F0-60=90H
MOV BCD3+1,AL;(BCD3+1)=90H非壓縮的BCD調(diào)整指令加法調(diào)整指令:AAA(AL)
(AL)非壓縮BCD減法調(diào)整指令:AAS(AL)
(AL)非壓縮BCD注意:*
隱含的操作寄存器為AL*
緊接在加減指令之后使用*除AF、CF外,對其它條件標(biāo)志位無定義調(diào)整方法:若(AL)0~3=0~9,且AF=0,則(AL)4~7=0,AF
CF=0若(AL)0~3=A~F,或AF=1,則(AL)
(AL)±6,(AL)4~7=0(AH)
(AH)±1,AF
CF=1(AAA做‘+’,AAS做‘-’)乘法調(diào)整指令:AAM(AL)
(AX)非壓縮BCD
注意:*
隱含的操作寄存器為AL*
緊接在MUL指令之后使用*對OF、CF、AF無定義調(diào)整方法:
(AL)除以0AH,商
(AH),余數(shù)(AL)除法調(diào)整指令:AAD
被除數(shù)(AX)=(0000xxxx0000xxxx)非壓縮BCD
除數(shù)=(0000xxxx)非壓縮BCD
在DIV指令之前:
(AL)2
0AH×(AH)+(AL) (AH)2
0例:(AX)=0504H(BL)=03H
(1)(AL)*(BL)
MULBL;(AX)=000CHAAM;(AH)=01H(AL)=02H(2)(AX)/(BL)
AAD;(AH)=00H(AL)=36H DIVBL;(AH)=00H(AL)=12H AAM;(AH)=01H(AL)=08H
邏輯運(yùn)算指令位測試并修改指令位掃描指令移位指令3.3.3邏輯指令邏輯非指令:NOTOPR*OPR不能為立即數(shù)
執(zhí)行操作:(OPR)
(OPR)*不影響標(biāo)志位
邏輯與指令:ANDDST,SRC執(zhí)行操作:(DST)
(DST)
(SRC)邏輯或指令:ORDST,SRC執(zhí)行操作:(DST)
(DST)
(SRC)異或指令:XORDST,SRC執(zhí)行操作:(DST)
(DST)
(SRC)測試指令:TESTOPR1,OPR2
執(zhí)行操作:(OPR1)
(OPR2)CFOFSFZFPFAF00***無定義
根據(jù)運(yùn)算結(jié)果設(shè)置邏輯運(yùn)算指令例:屏蔽AL的0、1兩位
ANDAL,0FCH例:置AL的第5位為1
ORAL,20H
例:使AL的0、1位變反
XORAL,3例:測試某些位是0是1
TESTAL,1JZEVEN
********AND11111100******00
********OR00100000**1*****
********XOR00000011
********位測試并修改指令(適用于386+)位測試指令BT DST,SRC執(zhí)行的操作:把DST中由SRC中指定位的值送往CF位測試并置1指令BTS DST,SRC執(zhí)行的操作:把DST中由SRC中指定位的值送往CF,并將DST中該位的值置1位測試并置0指令BTR DST,SRC執(zhí)行的操作:把DST中由SRC中指定位的值送往CF,并將DST中該位的值置0位測試并取反指令BTC DST,SRC執(zhí)行的操作:把DST中由SRC中指定位的值送往CF,并將DST中該位的值取反例BT AX,4指令執(zhí)行前(AX)=1234H指令執(zhí)行后(CF)=1,(AX)=1234HBTC AX,4指令執(zhí)行前(AX)=1224H指令執(zhí)行后(CF)=0,(AX)=1234H位掃描指令(適用于386+)正向位掃描指令BSF REG,SRC執(zhí)行的操作:從位0開始自右向左掃描SRC,目的是檢索第一個(gè)為1的位,如遇到第一個(gè)為1的位則將ZF位置0,并把該位的位位置裝入目的寄存器;如SRC為0,則將ZF位置1,目的寄存器無定義。反向位掃描指令BSR REG,SRC執(zhí)行的操作:從最高位開始自左向右掃描SRC,目的是檢索第
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年中通快遞快遞業(yè)務(wù)大數(shù)據(jù)分析與客戶畫像合同3篇
- 2024年度金融租賃再擔(dān)保協(xié)議3篇
- 2024年度大型商場資產(chǎn)評估與增值服務(wù)合同3篇
- 2024年度防浪堤工程沙子供應(yīng)合同范本3篇
- 2024年度新能源設(shè)備代理推廣與服務(wù)協(xié)議3篇
- 2024年度農(nóng)業(yè)技術(shù)推廣項(xiàng)目延期借款合同協(xié)議3篇
- 2024年度單位房屋買賣合同(含合同履行期限)3篇
- 2024員工保密協(xié)議范本:涉及企業(yè)內(nèi)部管理與商業(yè)秘密保護(hù)3篇
- 2024年文化產(chǎn)業(yè)居間合作協(xié)議3篇
- 新疆警察學(xué)院《審判與檢察實(shí)務(wù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024二十屆三中全會知識競賽題庫及答案
- 2024年執(zhí)業(yè)藥師繼續(xù)教育答案
- 【初中數(shù)學(xué)教學(xué)核心素養(yǎng)培養(yǎng)探究的文獻(xiàn)綜述4200字】
- 心肌酶譜升高的臨床解讀(干貨)
- 不履行合同告知函模板范文
- 排水渠承包合同協(xié)議書
- HJ 179-2018 石灰石石灰-石膏濕法煙氣脫硫工程技術(shù)規(guī)范
- 消弧產(chǎn)品規(guī)格標(biāo)準(zhǔn)化規(guī)定
- 西藏林芝市第二高級中學(xué)新高考語文三模試卷及答案解析
- 景觀設(shè)計(jì)基礎(chǔ)智慧樹知到期末考試答案章節(jié)答案2024年湖南應(yīng)用技術(shù)學(xué)院
- (高清版)JTG 5142-2019 公路瀝青路面養(yǎng)護(hù)技術(shù)規(guī)范
評論
0/150
提交評論