




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
3.380x86的指令系統80x86的指令系統中共有136種基本指令,可以分成6個功能組:
數據傳送(Datatransfer)25
算術運算(Arithmetic)21
邏輯運算和移位指令(Logic&Shift)21
串處理(Stringmanipulation)7
控制轉移(ControlTransfer) 47
處理機控制(ProcessorControl)15先介紹以下內容:1.
學習指令的要點2.
指令中操作數的表示3.
書寫指令注意事項先介紹以下內容:1.
指令助記符表2.
學習指令的要點3.
利用DEBUG程序,學習指令系統4.
指令中操作數的表示5.
書寫指令注意事項1.指令助記符表1.學習指令的要點從以下幾個方面來掌握一條指令:
指令的助記符
指令的格式:操作數的個數、類型(B,W,DW)
執行的操作:指令執行后的結果包括:哪些寄存器、內存單元的值發生了變化對標志位有無影響,哪些受影響
特點及注意事項只介紹常用的指令,其他需要時可自學。重點關注:指令的匯編格式指令的基本功能指令支持的尋址方式指令的執行對標志位的影響指令的特殊要求D:\>DEBUG
-A
;匯編指令0AF8:0100MOVAL,B5
0AF8:0102ADDAL,8F
0AF8:0104
-R
;顯示指令執行前各寄存器的值AX=0000BX=0000CX=0000DX=0000、、、、、、CS=0AF8IP=0100NVUP
EIPLNZNA
PO
NC-T=1002
;執行指令,查看結果AX=0044BX=0000CX=0000DX=0000、、、、、、CS=0AF8IP=0104OVUPEIPL
NZ
ACPECY0AF8:01042080FC01AND[BX+SI+01FC],AL-
10110101
+
10001111進位1
111111
01000100編程完成B5h+8Fh=?學習加法ADD指令及其對狀態標志位的影響。3.利用DEBUG學習指令系統(示例)2.指令中操作數的表示符號表示內容data立即數操作數reg通用寄存器操作數8位:AH、AL、BH、BL、CH、CL、DH、DL16位:AX、BX、CX、DX、BP、SP、SI、DIsegreg段寄存器CS、DS、SS、ESmem或[]存儲器操作數(5種尋址方式)src源操作數dst目的操作數
(
)注釋時表示寄存器、存儲器、端口的內容oprd1oprd2兩操作數3.書寫指令注意事項:不區分字母的大小寫。下列寫法表示同一條指令:MOVAX,1ABDHmovax,1abdh
不添加指令系統沒有的指令,即不自創助記符。將MOVAL,0寫成MOVEAL,0JMPlable寫成JUMPlable
注意操作數的范圍對字節操作指令0~FFH0~255對字操作指令0~FFFFH0~65535
MOVAL,260
MOVAX,70000MOVAL,1FFHMOVAL,2ABCDH
對無操作數指令,不添加操作數。
STCAL
對單操作數指令,操作數不能是立即數。
IMUL6
對雙操作數指令①不能兩個同為存儲器操作數
MOV[DI],[SI]
②目的操作數不能是立即數
ADD3,AL
③
兩個操作數的類型應相同
SUBAX,BL
若value定義為字類型存儲器變量:
MOVCL,value[BX]
內存操作數的屬性應明確。
MOV[BX],0MOVbyteptr[BX],0MOVwordptr[BX],0MOV[BX],ALMOV[BX],AXA、B、C、D、E、F開頭的十六進制數前面加0,與H結尾的標識符區別。如寄存器名:AH、BH、CH、
DH
變量名:abcdH等例
movAL,0AHmovAL,AHmovBX,0abcdHCS和IP的值只在控制轉移指令中修改。對非控制轉移指令,取完指令后IP值自動指向下條指令。段寄存器CS的值,只在MOV、PUSH中可作操作數,且這兩條指令執行結果不改變CS值。MOVAX,CSPUSHCSIP、PSW兩個寄存器不作為操作數在指令中出現。movIP,1234HmovPSW,0F0FHPSW狀態寄存器的值由指令執行后確定,不同的指令對各標志的影響不同。
數據傳送是最基本、最重要的一種操作實際程序中,使用的比例最高
changePROC
LEASI,num+2MOVCL,num+1MOVCH,0MOVAX,0MOVDI,10next:MULDI
MOVBH,0MOVBL,[SI]ANDBL,0FHADDAX,BXINCSILOOPnextzero:MOVBX,AXRETchangeENDP
匯編子程例:寄存器寄存器寄存器內存單元寄存器I/O端口設置寄存器、內存單元的初始值3.3.1
數據傳送指令
按傳送內容,可分為四類:
通用數據傳送指令
累加器專用傳送指令
地址傳送指令
標志寄存器傳送指令
特點:
1.除POPF/FD、SAHF外,其他傳送指令對標志位均無影響
2.唯一允許以段寄存器做操作數的指令且只有MOV、PUSH、POP這三條允許通用傳送指令(8) MOV MOVSX MOVZX PUSH POP PUSHA/PUSHAD POPA/POPAD XCHG
傳送帶符號擴展傳送帶零擴展傳送進棧出棧所有寄存器進棧所有寄存器出棧交換(1)MOV傳送指令格式
MOVDST,SRC執行
(DST)←(SRC)reg/mem/segreg←regreg/segreg←memreg/mem←segregreg/mem←data
可實現例:①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通用寄存器/存儲器←立即數
MOVAl,9MOVBX,OFFSETbufferMOVBYTEPTR[value],0MOVWORDPTR[BX],1MOV指令特點及注意事項:
雙操作數指令(注意雙操作指令的特點)可進行字節或字傳送不允許存儲器傳送到存儲器MOV[BX],valueMOV[DI],[SI]MOVAX,valueMOV[BX],AXMOVAL,[SI]MOV[DI],AL
可對DS、ES、SS賦值但不允許立即數直接傳送給段寄存器MOVDS,AXMOVES,[BX]MOVDS,1000HMOVAX,1000HMOVDS,AX
CS不能做目的操作數,不能通過傳送指令改變CS的值
MOVCS,AX
不允許段寄存器傳送到段寄存器
MOVES,DSMOVAX,DSMOVES,AXD:\MASM>DEBUG-A1693:0100MOVES,DS^Error1693:0100MOVAX,DS1693:0102MOVES,AX1693:0104-例編程將CL寄存器的內容傳送到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指令應用(自學)例:實現將AREA1開始的100個數據傳送到AREA2開始的單元。……AREA1:AREA2:100個數據分析題意:
①可以用200條MOV指令來完成100個數據傳送,指令操作重復,每個數據傳送后的地址是變化的。②可以利用循環, 但每循環一次要修改地址(源地址和目的地址),必須把地址放在寄存器當中,用寄存器間接尋址來尋找操作數.得到如下程序:
…
MOVSI,OFFSETAREA1 MOVDI,OFFSETAREA2 MOVCX,100AGAIN: MOVAL,[SI] MOV[DI],AL
INCSI ;修改地址指針
INCDI ;修改地址指針
DECCX ;修改個數
JNZAGAIN
…MOVSX
帶符號擴展傳送MOVZX
帶零擴展傳送格式:MOVSX/
MOVZX
DST,SRC執行的操作:(DST)
符號擴展(SRC)例:
MOVSXEAX,CLMOVSXEDX,[EDI]MOVZXDX,ALMOVZXEAX,[EDI]注意:
1.目的操作數必須是16位或32位寄存器
2.源操作數的長度一定要小于目的操作數
3.MOVSX的源操作數應是有符號數,而MOVZX的源操作數應是無符號數什么是堆棧,為什么需要堆棧堆棧是按照先進后出原則組織的一段內存區域存在于堆棧段中,SP在任何時候都指向棧頂。通常用于存放一些重要數據,
如:程序的地址、或是需要恢復的數據。為方便數據的存放和恢復,設置專門的指針,指向堆棧中要操作的單元。段值由SS給出,偏移地址由SP給出
SS→堆棧段寄存器(stacksegment)SP→堆棧指針寄存器(stackpoint)堆棧:“先進后出”的存儲區,堆棧使用的場合用堆棧保存恢復信息
子程序的調用、返回以及中斷調用、返回
用堆棧傳送數據(程序設計中介紹)注意事項
堆棧是一重要數據結構,使用堆棧應有明確目的。不亂用堆棧操作,不亂修改堆棧內容。PUSH、POP、PUSHF、POPF、CALL、RET、INT、IRET
亂修改SS和SP的內容包括亂用BP參與的存儲器操作數
亂用指令
進棧指令:PUSHSRC
執行操作:(SP)
(SP)-2((SP)+1,(SP))
(SRC)
把一個字從源操作數(src)
由SP指向堆棧頂部。特點:
單操作數指令操作數為16位,可以是reg/segreg/mem,不可以是datareg:AX,BX,CX,DX,SI,DI,BP,BXsegreg:CS,DS,ES,SSmem:字類型例:假設(AX)=2107H,執行
PUSHAX(SP)
低地址高地址(SP)
07H21H低地址高地址進棧方向********PUSHAX執行前PUSHAX執行后D:\MASM>DEBUG-A
;匯編兩條指令1693:0100MOVAX,12341693:0103PUSHAX1693:0104-R
;顯示指令執行前寄存器值AX=0000
BX=0000CX=0000DX=0000
SP=FFEE
BP=0000SI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0100NVUPEIPLNZNAPONC1693:0100B83412MOVAX,1234-T=1002
;執行CS:100開始處的兩條指令
….AX=1234
BX=0000CX=0000DX=0000
SP=FFEC
BP=0000SI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0104NVUPEIPLNZNAPONC1693:010403C6ADDAX,SI-DSS:FFECL10
;查看棧頂內容1693:FFE0341200004...1693:FFF0FFFFFFFFFFFFFFFF-FFFFFFFFFFFFFFFF
.........…-例利用DEBUG學習PUSH指令注意相關寄存器和內存單元內容的變化出棧指令:POPDST
執行操作:(DST)
(SP)+1,(SP))(SP)
(SP)+2把現行SP所指向堆棧頂部的一個字
指定的目的操作數(dest),同時進行修改堆棧指針的操作。特點:單操作數指令操作數為16位,可以是reg/segreg/mem,不可以是datareg:AX,BX,CX,DX,SI,DI,BP,BXsegreg:DS,ES,SS,不允許是CSmem:字類型例:POPBX(SP)
低地址高地址(SP)
07H21H低地址高地址出棧方向07H21H
(BX)=2107HPOPBX執行前POPBX執行后********-A
1693:0100MOVBP,SP;取當前棧頂地址
1693:0102MOVWORDPTR[BP],1234;用MOV指令使棧頂內容為1234H1693:0107POPBX;出棧指令1693:0108-R
;查看指令執行前狀態AX=0000BX=0000CX=0000DX=0000SP=FFEE
BP=0000SI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0100NVUPEIPLNZNAPONC1693:010089E5MOVBP,SP-T=100
;執行CS:100處的第一條mov指令AX=0000BX=0000CX=0000DX=0000SP=FFEE
BP=FFEESI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0102NVUPEIPLNZNAPONC1693:0102C746003412MOVWORDPTR[BP+00],1234SS:FFEE=0000-T
;執行下一條mov指令AX=0000BX=0000CX=0000DX=0000SP=FFEE
BP=FFEESI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0107NVUPEIPLNZNAPONC1693:01075BPOPBX-T
;執行pop指令,注意BX,SP的變化AX=0000BX=1234CX=0000DX=0000SP=FFF0BP=FFEESI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0108NVUPEIPLNZNAPONC1693:0108F5CMC-例在DEBUG下學習POP指令PUSHA/PUSHADPOPA/POPAD所有16位/32位寄存器進棧所有16位/32位寄存器出棧執行操作進棧順序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
執行操作:(OPR1)
(OPR2)例:XCHGBX,[BP+SI]XCHGAL,BH注意:
*
可進行字或字節操作,不影響標志位
*
不允許對立即數、段寄存器做操作數
XCHGAX,4
XCHGBX,DS
輸入指令(I/O
CPU)
長格式:INAL,PORT
(字節)
INAX,PORT
(字)
INEAX,PORT
(雙字)
累加器專用傳送指令(只限使用AX或AL)執行操作:(AL)
(PORT)(字節)
(AX)
(PORT+1,PORT)(字)
(AX)
(PORT+3,PORT+2,PORT+1,PORT)(雙字)
短格式:INAL,DX
(字節)
INAX,DX
(字)
INEAX,DX
(雙字)執行操作:(AL)((DX))(字節)
(AX)((DX)+1,(DX))(字)
(AX)((DX)+3,(DX)+2,(DX)+1,(DX))
(雙字)
長格式:OUTPORT,AL
(字節)
OUTPORT,AX
(字)
OUTPORT,EAX
(雙字)執行操作:(PORT)
(AL)(字節)
(PORT+1,PORT)
(AX)(字)
(PORT+3,PORT+2,PORT+1,PORT)
(EAX)
(雙字)輸出指令(CPU
I/O)
短格式:OUTDX,AL
(字節)
OUTDX,AX
(字)
OUTDX,EAX
(雙字)執行操作:((DX))
(AL)(字節)
((DX)+1,(DX))
(AX)(字)
((DX)+3,(DX)+2,(DX)+1,(DX))
(AX)
(雙字)注意:*
不影響標志位*
前256個端口號00H~FFH可直接在指令中指定(長格式)*如果端口號
256,端口號
DX(短格式)例:INAX,28H;MOVDX,28H;INAX,DXMOVDATA_WORD,AX例:MOVDX,3FCHINAX,DX例:OUT5,AL例:測試某狀態寄存器(端口號27H)的第2位是否為1INAL,27HTESTAL,00000100BJNZERROR;若第2位為1,轉ERROR處理Sound程序
movdx,100
inal,61handal,11111100bsound:xoral,2
out61h,almovcx,140hwait1:loopwait1decdxjnesound設備控制寄存器端口61H1/00
控制其它外部設備與門放大器2號定時器門控10(BX)
30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H換碼指令:XLAT
或XLATOPR執行操作:(AL)
((BX)+(AL))表格符號地址(首地址),只是為了提高可讀性而設置,匯編時仍用BX。例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE
指令執行后(AL)=33H注意:
*
不影響標志位*
字節表格(長度不超過256)
首地址
(BX)*
需轉換代碼(AL)XLAT指令使用方法:先建立一個字節表格;表格首偏移地址存入BX;需要轉換代碼的序號(相對與表格首地址位移量)存入AL;
(表中第一個元素的序號為0)執行XLAT指令后,表中指定序號的元素存于AL中。
(AL)為轉換的代碼。XLAT指令應用:若把字符的掃描碼轉換成ASCII碼;或數字0~9轉換成7段數碼所需要的相應代碼(字形碼)等就要用XLAT指令。例:內存的數據段中有一張十六進制數字的ASCII碼表。
首地址為:Hex_table,欲查出表中第10個元素(‘A’)執行指令序列:MOVBX,OFFSETHex_tableMOVAL,0AHXLATHex_table假設: (DS)=F000H,
Hex_table=0040H
(AL)=0AH執行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進制數的ASCII碼表
地址傳送指令
有效地址送寄存器指令:LEAREG,SRC
執行操作:(REG)
SRC
指針送寄存器和DS指令:LDSREG,SRC
執行操作:(REG)
(SRC)(DS)
(SRC+2)
4個相繼字節
寄存器(通常是SI)、DS
指針送寄存器和ES指令:LESREG,SRC
執行操作:(REG)
(SRC)(ES)
(SRC+2)
4個相繼字節
寄存器(通常是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注意:
*
不影響標志位
*
REG不能是段寄存器
*
SRC必須為存儲器尋址方式
標志寄存器傳送指令
標志送AH指令:LAHF
執行操作:(AH)
(PSW的低字節)
AH送標志寄存器指令:SAHF
執行操作:(PSW的低字節)
(AH)
標志進棧指令:PUSHF
執行操作:(SP)
(SP)-2((SP)+1,(SP))
(PSW)
標志出棧指令:
POPF
執行操作:(PSW)
((SP)+1,(SP))(SP)
(SP)+2*影響標志位
類型轉換指令
CBWAL
AX
執行操作:若(AL)的最高有效位為0,則(AH)=00H
若(AL)的最高有效位為1,則(AH)=0FFH
CWDAX
(DX,AX)
執行操作:若(AX)的最高有效位為0,則(DX)=0000H
若(AX)的最高有效位為1,則(DX)=0FFFFH
例:(AX)=0BA45HCBW;(AX)=0045HCWD;(DX)=0FFFFH(AX)=0BA45H注意:
*
無操作數指令
*隱含對AL或AX進行符號擴展
*不影響條件標志位
加法指令
ADD、ADC、INC
減法指令
SUB、SBB、DEC、NEG、CMP
乘法指令
MUL、IMUL
除法指令
DIV、IDIV
十進制調整指令
DAA、DAS、
AAA、AAS、AAM、AAD3.3.2算術指令
加法指令
加法指令:ADDDST,SRC
執行操作:(DST)
(SRC)+(DST)
帶進位加法指令:ADCDST,SRC
執行操作:(DST)
(SRC)+(DST)+CF
加1指令:INCOPR
執行操作:(OPR)
(OPR)+1注意:*
除INC指令不影響CF標志外,均對條件標志位有影響。加法指令對條件標志位(CF/OF/ZF/SF)的影響:CF位表示無符號數相加的溢出。OF位表示帶符號數相加的溢出。1結果為負0否則SF=1結果為00否則ZF=1和的最高有效位有向高位的進位0否則CF=1兩個操作數符號相同,而結果符號與之相反0否則OF=n=8bit帶符號數(-128~127)無符號數(0~255)
00000100+0000101100001111帶:(+4)+(+11)=+15OF=0無:4+11=15CF=0帶符號數和無符號數都不溢出00001001+0111110010000101
帶:(+9)+(+124)=-123OF=1
無:9+124=133CF=0帶符號數溢出無符號數溢出00000111+1111101100000010帶:(+7)+(-5)=+2OF=0無:7+251=2CF=1帶符號數和無符號數都溢出10000111+1111010101111100帶:(-121)+(-11)=+124OF=1無:135+245=124CF=1例:雙精度數的加法
(DX)=0002H(AX)=0F365H(BX)=0005H(CX)=0E024H
指令序列
(1)ADDAX,CX
(2)ADCDX,BX
(1)執行后,(AX)=0D389H
CF=1OF=0SF=1ZF=0(2)執行后,(DX)=0008HCF=0OF=0SF=0ZF=0
減法指令減法指令:SUBDST,SRC
執行操作:(DST)
(DST)-(SRC)帶借位減法指令:SBBDST,SRC
執行操作:(DST)
(DST)-(SRC)-CF減1指令:DECOPR
執行操作:(OPR)
(OPR)-1求補指令:NEGOPR
執行操作:(OPR)
-(OPR)比較指令:CMPOPR1,OPR2
執行操作:(OPR1)-(OPR2)注意:*除DEC指令不影響
CF標志外,均對條件標志位有影響。減法指令對條件標志位(CF/OF/ZF/SF)的影響:CF
位表示無符號數減法的溢出。OF
位表示帶符號數減法的溢出。1被減數的最高有效位有向高位的借位0否則CF=1兩個操作數符號相反,而結果的符號與減數相同0否則OF=1減法轉換為加法運算時無進位0否則CF=或NEG指令對CF/OF的影響:0操作數為01否則CF=1操作數為-128(字節運算)或操作數為-32768(字運算)0否則OF=例:x、y、z均為雙精度數,分別存放在地址為X,X+2;
Y,Y+2;Z,Z+2的存儲單元中,用指令序列實現
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;結果存入W,W+2單元
乘法指令
無符號數乘法指令:MULSRC
執行操作:
字節操作數(AX)
(AL)*(SRC)
字操作數(DX,AX)
(AX)*(SRC)
雙字操作(EDX,EAX)
(EAX)*(SRC)
帶符號數乘法指令:IMULSRC注意:
*AL(AX、EAX)為隱含的乘數寄存器。*
AX((DX,AX)、(EDX,EAX))為隱含的乘積寄存器。*
SRC不能為立即數。*除CF和OF外,對條件標志位無定義。乘法指令對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乘積的高一半是低一半的符號擴展11否則
IMUL指令:CF/OF=對于80286+,還有(1)雙操作數的IMUL格式:IMUL REG,SRC執行的操作:字操作:(REG16)(REG16)*SRC雙字操作:(REG32)(REG32)*SRC注:
1、SRC與REG長度要一致
2、SRC可以是任一種尋址方式
3、SRC為立即數時,可以是8位、16位、32位立即數對于80286+,還有(2)三操作數的IMUL格式:IMUL REG,SRC,IMM執行的操作:字操作:(REG16)SRC*IMM雙字操作:(REG32)SRC*IMM注:
1、SRC與REG長度要一致
2、SRC可以是除立即數以外的任一種尋址方式3、IMM(立即數),可以是8位、16位、32位立即數三種IMUL的區別1、乘積字長不同
單操作數時乘積字長是源和目的操作數字長的二倍雙操作數和三操作數時乘積字長與源和目的操作數字長相同2、溢出位OF的意義不同單操作數時OF為1,乘積結果也是正確的雙操作數和三操作數時乘積結果不正確
除法指令
無符號數除法指令:DIVSRC
執行操作:
字節操作(AL)
(AX)/(SRC)的商
(AH)
(AX)/(SRC)的余數字操作(AX)
(DX,AX)/(SRC)的商
(DX)
(DX,AX)/(SRC)的余數雙字操作(EAX)
(EDX,EAX)/(SRC)的商
(EDX)
(EDX,EAX)/(SRC)的余數
帶符號數除法指令:IDIVSRC注意:
*AX、(DX,AX)、(EDX,EAX)為隱含的被除數寄存器。
*
AL、(AX)、(EAX)為隱含的商寄存器。
*
AH、(DX)、(EDX)為隱含的余數寄存器。
*
SRC不能為立即數。
*
對所有條件標志位均無定義。例:x,y,z,v均為16位帶符號數,計算
(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
十進制調整指令BCD碼:用二進制編碼的十進制數,又稱二--十進制數壓縮的BCD碼:用4位二進制數表示1位十進制數
例:(59)10=(01011001)BCD非壓縮的BCD碼:用8位二進制數表示1位十進制數例:(59)10=(0000010100001001)BCD數字的ASCII碼是一種非壓縮的BCD碼
DIGIT ASCII BCD0 30H 001100001 31H 001100012 32H 00110010… … …9 39H 00111001
十進制調整指令
BCD碼:用二進制編碼的十進制數,又稱二--十進制數
壓縮的BCD碼:用4位二進制數表示1位十進制數例:(59)10=(01011001)BCD非壓縮的BCD碼:用8位二進制數表示1位十進制數例:(59)10=(0000010100001001)BCD數字的ASCII碼是一種非壓縮的BCD碼DIGIT ASCII BCD0 30H 001100001 31H 001100012 32H 00110010… … …9 39H 00111001例:寫出(3590)10的壓縮BCD碼和非壓縮BCD碼,并分別把它們存入數據區PAKED和UNPAK。壓縮BCD: (3590)10=(0011010110010000)BCD非壓縮BCD:
(3590)10=(00000011000001010000100100000000)BCDPAKED90H35HUNPAK00H09H05H03H壓縮的BCD碼調整指令加法的十進制調整指令:DAA執行操作:(AL)
(AL)壓縮BCD減法的十進制調整指令:DAS執行操作:(AL)
(AL)壓縮BCD19壓縮BCD:00011001+08+000010002700100001+110
(00100111)BCD
AF=1問題的提出:
注意:
*
隱含的操作寄存器為AL*
緊接在加減指令之后使用*影響條件標志位(對OF無定義)調整方法: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調整指令加法調整指令:AAA(AL)
(AL)非壓縮BCD減法調整指令:AAS(AL)
(AL)非壓縮BCD注意:*
隱含的操作寄存器為AL*
緊接在加減指令之后使用*除AF、CF外,對其它條件標志位無定義調整方法:若(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做‘-’)乘法調整指令:AAM(AL)
(AX)非壓縮BCD
注意:*
隱含的操作寄存器為AL*
緊接在MUL指令之后使用*對OF、CF、AF無定義調整方法:
(AL)除以0AH,商
(AH),余數(AL)除法調整指令:AAD
被除數(AX)=(0000xxxx0000xxxx)非壓縮BCD
除數=(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
邏輯運算指令位測試并修改指令位掃描指令移位指令3.3.3邏輯指令邏輯非指令:NOTOPR*OPR不能為立即數
執行操作:(OPR)
(OPR)*不影響標志位
邏輯與指令:ANDDST,SRC執行操作:(DST)
(DST)
(SRC)邏輯或指令:ORDST,SRC執行操作:(DST)
(DST)
(SRC)異或指令:XORDST,SRC執行操作:(DST)
(DST)
(SRC)測試指令:TESTOPR1,OPR2
執行操作:(OPR1)
(OPR2)CFOFSFZFPFAF00***無定義
根據運算結果設置邏輯運算指令例:屏蔽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執行的操作:把DST中由SRC中指定位的值送往CF位測試并置1指令BTS DST,SRC執行的操作:把DST中由SRC中指定位的值送往CF,并將DST中該位的值置1位測試并置0指令BTR DST,SRC執行的操作:把DST中由SRC中指定位的值送往CF,并將DST中該位的值置0位測試并取反指令BTC DST,SRC執行的操作:把DST中由SRC中指定位的值送往CF,并將DST中該位的值取反例BT AX,4指令執行前(AX)=1234H指令執行后(CF)=1,(AX)=1234HBTC AX,4指令執行前(AX)=1224H指令執行后(CF)=0,(AX)=1234H位掃描指令(適用于386+)正向位掃描指令BSF REG,SRC執行的操作:從位0開始自右向左掃描SRC,目的是檢索第一個為1的位,如遇到第一個為1的位則將ZF位置0,并把該位的位位置裝入目的寄存器;如SRC為0,則將ZF位置1,目的寄存器無定義。反向位掃描指令BSR REG,SRC執行的操作:從最高位開始自左向右掃描SRC,目的是檢索第
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥劑學課程的教學與學習策略試題及答案
- 藥房管理與運營考核試題及答案
- 激光設備使用安全試題及答案
- 農家土地承租合同范例
- 制砂機加工合同范例
- 2025-2030女裝市場市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030太陽能發電系統行業市場現狀供需分析及重點企業投資評估規劃分析研究報告
- 2025-2030多劑量滴眼器市場需求前景及發展機遇風險預警研究報告
- 2025-2030殼聚糖鹽酸鹽行業市場現狀供需分析及重點企業投資評估規劃分析研究報告
- 2025-2030基因藥物行業市場運行分析及發展趨勢與管理策略研究報告
- 機械加工企業安全生產應急預案樣本(2篇)
- 耳穴壓豆治療便秘
- 2023年長江產業投資集團有限公司招聘考試真題
- 中華人民共和國安全生產法知識培訓
- 機械CAD、CAM-形考任務二-國開-參考資料
- 腫瘤中醫治療及調養
- 婦產科課件-早產臨床防治指南(2024)解讀
- 施工現場機械設備管理規定
- 高質量數字化轉型技術解決方案集(2024上半年度)
- 住房城鄉建設科學技術計劃項目科研開發類申報書
- 廣東省佛山市S6高質量發展聯盟2023-2024學年高一下學期4月期中考試數學
評論
0/150
提交評論