




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
3.380x86的指令系統(tǒng)80x86的指令系統(tǒng)中共有136種基本指令,可以分成6個功能組:
數(shù)據(jù)傳送(Datatransfer)25
算術運算(Arithmetic)21
邏輯運算和移位指令(Logic&Shift)21
串處理(Stringmanipulation)7
控制轉移(ControlTransfer) 47
處理機控制(ProcessorControl)15先介紹以下內容:1.
學習指令的要點2.
指令中操作數(shù)的表示3.
書寫指令注意事項先介紹以下內容:1.
指令助記符表2.
學習指令的要點3.
利用DEBUG程序,學習指令系統(tǒng)4.
指令中操作數(shù)的表示5.
書寫指令注意事項1.指令助記符表1.學習指令的要點從以下幾個方面來掌握一條指令:
指令的助記符
指令的格式:操作數(shù)的個數(shù)、類型(B,W,DW)
執(zhí)行的操作:指令執(zhí)行后的結果包括:哪些寄存器、內存單元的值發(fā)生了變化對標志位有無影響,哪些受影響
特點及注意事項只介紹常用的指令,其他需要時可自學。重點關注:指令的匯編格式指令的基本功能指令支持的尋址方式指令的執(zhí)行對標志位的影響指令的特殊要求D:\>DEBUG
-A
;匯編指令0AF8:0100MOVAL,B5
0AF8:0102ADDAL,8F
0AF8:0104
-R
;顯示指令執(zhí)行前各寄存器的值AX=0000BX=0000CX=0000DX=0000、、、、、、CS=0AF8IP=0100NVUP
EIPLNZNA
PO
NC-T=1002
;執(zhí)行指令,查看結果AX=0044BX=0000CX=0000DX=0000、、、、、、CS=0AF8IP=0104OVUPEIPL
NZ
ACPECY0AF8:01042080FC01AND[BX+SI+01FC],AL-
10110101
+
10001111進位1
111111
01000100編程完成B5h+8Fh=?學習加法ADD指令及其對狀態(tài)標志位的影響。3.利用DEBUG學習指令系統(tǒng)(示例)2.指令中操作數(shù)的表示符號表示內容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ù)
(
)注釋時表示寄存器、存儲器、端口的內容oprd1oprd2兩操作數(shù)3.書寫指令注意事項:不區(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ù)指令①不能兩個同為存儲器操作數(shù)
MOV[DI],[SI]
②目的操作數(shù)不能是立即數(shù)
ADD3,AL
③
兩個操作數(shù)的類型應相同
SUBAX,BL
若value定義為字類型存儲器變量:
MOVCL,value[BX]
內存操作數(shù)的屬性應明確。
MOV[BX],0MOVbyteptr[BX],0MOVwordptr[BX],0MOV[BX],ALMOV[BX],AXA、B、C、D、E、F開頭的十六進制數(shù)前面加0,與H結尾的標識符區(qū)別。如寄存器名:AH、BH、CH、
DH
變量名:abcdH等例
movAL,0AHmovAL,AHmovBX,0abcdHCS和IP的值只在控制轉移指令中修改。對非控制轉移指令,取完指令后IP值自動指向下條指令。段寄存器CS的值,只在MOV、PUSH中可作操作數(shù),且這兩條指令執(zhí)行結果不改變CS值。MOVAX,CSPUSHCSIP、PSW兩個寄存器不作為操作數(shù)在指令中出現(xiàn)。movIP,1234HmovPSW,0F0FHPSW狀態(tài)寄存器的值由指令執(zhí)行后確定,不同的指令對各標志的影響不同。
數(shù)據(jù)傳送是最基本、最重要的一種操作實際程序中,使用的比例最高
changePROC
LEASI,num+2MOVCL,num+1MOVCH,0MOVAX,0MOVDI,10next:MULDI
MOVBH,0MOVBL,[SI]ANDBL,0FHADDAX,BXINCSILOOPnextzero:MOVBX,AXRETchangeENDP
匯編子程例:寄存器寄存器寄存器內存單元寄存器I/O端口設置寄存器、內存單元的初始值3.3.1
數(shù)據(jù)傳送指令
按傳送內容,可分為四類:
通用數(shù)據(jù)傳送指令
累加器專用傳送指令
地址傳送指令
標志寄存器傳送指令
特點:
1.除POPF/FD、SAHF外,其他傳送指令對標志位均無影響
2.唯一允許以段寄存器做操作數(shù)的指令且只有MOV、PUSH、POP這三條允許通用傳送指令(8) MOV MOVSX MOVZX PUSH POP PUSHA/PUSHAD POPA/POPAD XCHG
傳送帶符號擴展傳送帶零擴展傳送進棧出棧所有寄存器進棧所有寄存器出棧交換(1)MOV傳送指令格式
MOVDST,SRC執(zhí)行
(DST)←(SRC)reg/mem/segreg←regreg/segreg←memreg/mem←segregreg/mem←data
可實現(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指令特點及注意事項:
雙操作數(shù)指令(注意雙操作指令的特點)可進行字節(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寄存器的內容傳送到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指令應用(自學)例:實現(xiàn)將AREA1開始的100個數(shù)據(jù)傳送到AREA2開始的單元。……AREA1:AREA2:100個數(shù)據(jù)分析題意:
①可以用200條MOV指令來完成100個數(shù)據(jù)傳送,指令操作重復,每個數(shù)據(jù)傳送后的地址是變化的。②可以利用循環(huán), 但每循環(huán)一次要修改地址(源地址和目的地址),必須把地址放在寄存器當中,用寄存器間接尋址來尋找操作數(shù).得到如下程序:
…
MOVSI,OFFSETAREA1 MOVDI,OFFSETAREA2 MOVCX,100AGAIN: MOVAL,[SI] MOV[DI],AL
INCSI ;修改地址指針
INCDI ;修改地址指針
DECCX ;修改個數(shù)
JNZAGAIN
…MOVSX
帶符號擴展傳送MOVZX
帶零擴展傳送格式:MOVSX/
MOVZX
DST,SRC執(zhí)行的操作:(DST)
符號擴展(SRC)例:
MOVSXEAX,CLMOVSXEDX,[EDI]MOVZXDX,ALMOVZXEAX,[EDI]注意:
1.目的操作數(shù)必須是16位或32位寄存器
2.源操作數(shù)的長度一定要小于目的操作數(shù)
3.MOVSX的源操作數(shù)應是有符號數(shù),而MOVZX的源操作數(shù)應是無符號數(shù)什么是堆棧,為什么需要堆棧堆棧是按照先進后出原則組織的一段內存區(qū)域存在于堆棧段中,SP在任何時候都指向棧頂。通常用于存放一些重要數(shù)據(jù),
如:程序的地址、或是需要恢復的數(shù)據(jù)。為方便數(shù)據(jù)的存放和恢復,設置專門的指針,指向堆棧中要操作的單元。段值由SS給出,偏移地址由SP給出
SS→堆棧段寄存器(stacksegment)SP→堆棧指針寄存器(stackpoint)堆棧:“先進后出”的存儲區(qū),堆棧使用的場合用堆棧保存恢復信息
子程序的調用、返回以及中斷調用、返回
用堆棧傳送數(shù)據(jù)(程序設計中介紹)注意事項
堆棧是一重要數(shù)據(jù)結構,使用堆棧應有明確目的。不亂用堆棧操作,不亂修改堆棧內容。PUSH、POP、PUSHF、POPF、CALL、RET、INT、IRET
亂修改SS和SP的內容包括亂用BP參與的存儲器操作數(shù)
亂用指令
進棧指令:PUSHSRC
執(zhí)行操作:(SP)
(SP)-2((SP)+1,(SP))
(SRC)
把一個字從源操作數(shù)(src)
由SP指向堆棧頂部。特點:
單操作數(shù)指令操作數(shù)為16位,可以是reg/segreg/mem,不可以是datareg:AX,BX,CX,DX,SI,DI,BP,BXsegreg:CS,DS,ES,SSmem:字類型例:假設(AX)=2107H,執(zhí)行
PUSHAX(SP)
低地址高地址(SP)
07H21H低地址高地址進棧方向********PUSHAX執(zhí)行前PUSHAX執(zhí)行后D:\MASM>DEBUG-A
;匯編兩條指令1693:0100MOVAX,12341693:0103PUSHAX1693:0104-R
;顯示指令執(zhí)行前寄存器值AX=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
;查看棧頂內容1693:FFE0341200004...1693:FFF0FFFFFFFFFFFFFFFF-FFFFFFFFFFFFFFFF
.........…-例利用DEBUG學習PUSH指令注意相關寄存器和內存單元內容的變化出棧指令:POPDST
執(zhí)行操作:(DST)
(SP)+1,(SP))(SP)
(SP)+2把現(xiàn)行SP所指向堆棧頂部的一個字
指定的目的操作數(shù)(dest),同時進行修改堆棧指針的操作。特點:單操作數(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;取當前棧頂?shù)刂?/p>
1693:0102MOVWORDPTR[BP],1234;用MOV指令使棧頂內容為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指令AX=0000BX=0000CX=0000DX=0000SP=FFEE
BP=FFEESI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0102NVUPEIPLNZNAPONC1693:0102C746003412MOVWORDPTR[BP+00],1234SS:FFEE=0000-T
;執(zhí)行下一條mov指令AX=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下學習POP指令PUSHA/PUSHADPOPA/POPAD所有16位/32位寄存器進棧所有16位/32位寄存器出棧執(zhí)行操作進棧順序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注意:
*
可進行字或字節(jié)操作,不影響標志位
*
不允許對立即數(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)
(雙字)注意:*
不影響標志位*
前256個端口號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,轉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執(zhí)行操作:(AL)
((BX)+(AL))表格符號地址(首地址),只是為了提高可讀性而設置,匯編時仍用BX。例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE
指令執(zhí)行后(AL)=33H注意:
*
不影響標志位*
字節(jié)表格(長度不超過256)
首地址
(BX)*
需轉換代碼(AL)XLAT指令使用方法:先建立一個字節(jié)表格;表格首偏移地址存入BX;需要轉換代碼的序號(相對與表格首地址位移量)存入AL;
(表中第一個元素的序號為0)執(zhí)行XLAT指令后,表中指定序號的元素存于AL中。
(AL)為轉換的代碼。XLAT指令應用:若把字符的掃描碼轉換成ASCII碼;或數(shù)字0~9轉換成7段數(shù)碼所需要的相應代碼(字形碼)等就要用XLAT指令。例:內存的數(shù)據(jù)段中有一張十六進制數(shù)字的ASCII碼表。
首地址為:Hex_table,欲查出表中第10個元素(‘A’)執(zhí)行指令序列:MOVBX,OFFSETHex_tableMOVAL,0AHXLATHex_table假設: (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進制數(shù)的ASCII碼表
地址傳送指令
有效地址送寄存器指令:LEAREG,SRC
執(zhí)行操作:(REG)
SRC
指針送寄存器和DS指令:LDSREG,SRC
執(zhí)行操作:(REG)
(SRC)(DS)
(SRC+2)
4個相繼字節(jié)
寄存器(通常是SI)、DS
指針送寄存器和ES指令:LESREG,SRC
執(zhí)行操作:(REG)
(SRC)(ES)
(SRC+2)
4個相繼字節(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注意:
*
不影響標志位
*
REG不能是段寄存器
*
SRC必須為存儲器尋址方式
標志寄存器傳送指令
標志送AH指令:LAHF
執(zhí)行操作:(AH)
(PSW的低字節(jié))
AH送標志寄存器指令:SAHF
執(zhí)行操作:(PSW的低字節(jié))
(AH)
標志進棧指令:PUSHF
執(zhí)行操作:(SP)
(SP)-2((SP)+1,(SP))
(PSW)
標志出棧指令:
POPF
執(zhí)行操作:(PSW)
((SP)+1,(SP))(SP)
(SP)+2*影響標志位
類型轉換指令
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進行符號擴展
*不影響條件標志位
加法指令
ADD、ADC、INC
減法指令
SUB、SBB、DEC、NEG、CMP
乘法指令
MUL、IMUL
除法指令
DIV、IDIV
十進制調整指令
DAA、DAS、
AAA、AAS、AAM、AAD3.3.2算術指令
加法指令
加法指令:ADDDST,SRC
執(zhí)行操作:(DST)
(SRC)+(DST)
帶進位加法指令:ADCDST,SRC
執(zhí)行操作:(DST)
(SRC)+(DST)+CF
加1指令:INCOPR
執(zhí)行操作:(OPR)
(OPR)+1注意:*
除INC指令不影響CF標志外,均對條件標志位有影響。加法指令對條件標志位(CF/OF/ZF/SF)的影響:CF位表示無符號數(shù)相加的溢出。OF位表示帶符號數(shù)相加的溢出。1結果為負0否則SF=1結果為00否則ZF=1和的最高有效位有向高位的進位0否則CF=1兩個操作數(shù)符號相同,而結果符號與之相反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求補指令:NEGOPR
執(zhí)行操作:(OPR)
-(OPR)比較指令:CMPOPR1,OPR2
執(zhí)行操作:(OPR1)-(OPR2)注意:*除DEC指令不影響
CF標志外,均對條件標志位有影響。減法指令對條件標志位(CF/OF/ZF/SF)的影響:CF
位表示無符號數(shù)減法的溢出。OF
位表示帶符號數(shù)減法的溢出。1被減數(shù)的最高有效位有向高位的借位0否則CF=1兩個操作數(shù)符號相反,而結果的符號與減數(shù)相同0否則OF=1減法轉換為加法運算時無進位0否則CF=或NEG指令對CF/OF的影響:0操作數(shù)為01否則CF=1操作數(shù)為-128(字節(jié)運算)或操作數(shù)為-32768(字運算)0否則OF=例:x、y、z均為雙精度數(shù),分別存放在地址為X,X+2;
Y,Y+2;Z,Z+2的存儲單元中,用指令序列實現(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;結果存入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外,對條件標志位無定義。乘法指令對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)雙操作數(shù)的IMUL格式:IMUL REG,SRC執(zhí)行的操作:字操作:(REG16)(REG16)*SRC雙字操作:(REG32)(REG32)*SRC注:
1、SRC與REG長度要一致
2、SRC可以是任一種尋址方式
3、SRC為立即數(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ù)字長相同2、溢出位OF的意義不同單操作數(shù)時OF為1,乘積結果也是正確的雙操作數(shù)和三操作數(shù)時乘積結果不正確
除法指令
無符號數(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ù)。
*
對所有條件標志位均無定義。例:x,y,z,v均為16位帶符號數(shù),計算
(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碼:用二進制編碼的十進制數(shù),又稱二--十進制數(shù)壓縮的BCD碼:用4位二進制數(shù)表示1位十進制數(shù)
例:(59)10=(01011001)BCD非壓縮的BCD碼:用8位二進制數(shù)表示1位十進制數(shù)例:(59)10=(0000010100001001)BCD數(shù)字的ASCII碼是一種非壓縮的BCD碼
DIGIT ASCII BCD0 30H 001100001 31H 001100012 32H 00110010… … …9 39H 00111001
十進制調整指令
BCD碼:用二進制編碼的十進制數(shù),又稱二--十進制數(shù)
壓縮的BCD碼:用4位二進制數(shù)表示1位十進制數(shù)例:(59)10=(01011001)BCD非壓縮的BCD碼:用8位二進制數(shù)表示1位十進制數(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碼調整指令加法的十進制調整指令:DAA執(zhí)行操作:(AL)
(AL)壓縮BCD減法的十進制調整指令:DAS執(zhí)行操作:(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),余數(shù)(AL)除法調整指令: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
邏輯運算指令位測試并修改指令位掃描指令移位指令3.3.3邏輯指令邏輯非指令:NOTOPR*OPR不能為立即數(shù)
執(zhí)行操作:(OPR)
(OPR)*不影響標志位
邏輯與指令: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ù)運算結果設置邏輯運算指令例:屏蔽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,目的是檢索第一個為1的位,如遇到第一個為1的位則將ZF位置0,并把該位的位位置裝入目的寄存器;如SRC為0,則將ZF位置1,目的寄存器無定義。反向位掃描指令BSR REG,SRC執(zhí)行的操作:從最高位開始自左向右掃描SRC,目的是檢索第
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河南開放大學財經應用文寫作050402(合集)
- 高三數(shù)學教學工作計劃(16篇)
- 秋白菜全生長周期高產栽培管理技術的推廣應用實踐
- 海鮮超市合作合同協(xié)議書
- 借貸款合同的協(xié)議書
- 快遞運輸合同協(xié)議書甲方
- 2025年低碳轉型背景下CCS技術應用經濟性評估報告
- 2025醫(yī)療設備租賃合同樣本范文
- 2025聘書并非合同文件
- 2025汽車貸款分期付款合同模板
- 保潔協(xié)議書合同范本
- 2025餐飲服務員勞動合同模板
- 2025至2030年中國智能學習機行業(yè)投資前景及策略咨詢研究報告
- 2025屆高三高考押題預測卷 物理(黑吉遼蒙卷03) 含解析
- (高清版)DG∕TJ 08-7-2021 建筑工程交通設計及停車庫(場)設置標準
- 2025部編版語文二年級下冊第八單元測試卷(含答案)
- 教育咨詢保密協(xié)議書
- 無房無車離婚協(xié)議書
- 南師附中高三數(shù)學備忘錄及答案詳解
- 2025-2030年中國甲巰咪唑片行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025年安徽國控資產管理有限公司第二季度社會招聘5人筆試參考題庫附帶答案詳解
評論
0/150
提交評論