![第3章 指令系統(tǒng)-D13_第1頁](http://file4.renrendoc.com/view/5f9b2d099acf407ed9e82c04b16af6f4/5f9b2d099acf407ed9e82c04b16af6f41.gif)
![第3章 指令系統(tǒng)-D13_第2頁](http://file4.renrendoc.com/view/5f9b2d099acf407ed9e82c04b16af6f4/5f9b2d099acf407ed9e82c04b16af6f42.gif)
![第3章 指令系統(tǒng)-D13_第3頁](http://file4.renrendoc.com/view/5f9b2d099acf407ed9e82c04b16af6f4/5f9b2d099acf407ed9e82c04b16af6f43.gif)
![第3章 指令系統(tǒng)-D13_第4頁](http://file4.renrendoc.com/view/5f9b2d099acf407ed9e82c04b16af6f4/5f9b2d099acf407ed9e82c04b16af6f44.gif)
![第3章 指令系統(tǒng)-D13_第5頁](http://file4.renrendoc.com/view/5f9b2d099acf407ed9e82c04b16af6f4/5f9b2d099acf407ed9e82c04b16af6f45.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1
第3章80X86的尋址方式和指令系統(tǒng)第1節(jié)
80X86的數(shù)據(jù)類型第2節(jié)
80X86的尋址方式第3節(jié)
80X86的指令系統(tǒng)2學(xué)習(xí)指導(dǎo)和要求掌握80486的七種數(shù)據(jù)類型;熟練掌握7(11)種尋址方式;熟記各種類型的指令格式及功能,并能編寫簡(jiǎn)單程序。3
第1節(jié)80X86的數(shù)據(jù)類型
80486匯編語言中可使用的數(shù)據(jù)類型有以下七種:
無符號(hào)二進(jìn)制數(shù)
字節(jié)(8位):0~255(0~0FFH),占用一字節(jié)存儲(chǔ)單元。
字(16位):0~65535(0~0FFFFH),占用連續(xù)的兩字節(jié)存儲(chǔ)單元,低地址存儲(chǔ)單元存放低8位數(shù)據(jù),高地址存儲(chǔ)單元存放高8位數(shù)據(jù),低字節(jié)地址為該字的地址。
雙字(32位):0~4294967299(0~0FFFFFFFFH),占用連續(xù)的四字節(jié)存儲(chǔ)單元,最低地址存儲(chǔ)單元存放最低8位數(shù)據(jù),最高地址存儲(chǔ)單元存放最高8位數(shù)據(jù),最低字節(jié)地址為該雙字的地址。4有符號(hào)二進(jìn)制數(shù)
字節(jié):-128~+127(80H~FFH,00H~7FH)字:-32768~+32767(8000H~FFFFH,00000H~7FFFH)雙字:-2147483650~+2147483649(80000000H~FFFFFFFFH,000000000H~7FFFFFFFH)
以補(bǔ)碼形式存儲(chǔ),地址單元分配與無符號(hào)數(shù)類似。浮點(diǎn)數(shù)(實(shí)數(shù))單精度數(shù)(32位):數(shù)據(jù)格式如下:
階碼有效數(shù)313023220符號(hào)位1.1位符號(hào),8位階碼,24位有效數(shù)(顯式23位,外加1位隱含的整數(shù)“1.”。5雙精度數(shù)(64位):數(shù)據(jù)格式如下:1位符號(hào),11位階碼,53位有效數(shù)(顯式52位,外加1位隱含的整數(shù)“1.”。636252510
階碼有效數(shù)符號(hào)位1.擴(kuò)展精度數(shù)(80位):數(shù)據(jù)格式如下:79786463620
階碼1有效數(shù)符號(hào)位1位符號(hào),15位階碼,64位有效數(shù)(內(nèi)含1位整數(shù)1,小數(shù)點(diǎn)是隱含的。.6BCD碼壓縮BCD碼:1字節(jié)存放兩個(gè)BCD碼,格式如圖a74307430
(a)(b)非壓縮BCD碼:1字節(jié)存放一個(gè)BCD碼(低4位),格式如圖b字符串位串:從任何字節(jié)的任何位開始的相鄰位序列,最長可達(dá)232-1位字節(jié)/字/雙字串:是字節(jié)、字、雙字的相鄰序列,最長可達(dá)232-1字節(jié)。十位個(gè)位0或任意個(gè)位7ASCII碼
ASCII碼字符串:如‘ABC123’
ASCII碼數(shù):如30H~39H(0~9),41H~46H(A~F)指針數(shù)據(jù)近指針(32位):是一個(gè)32位的段內(nèi)偏移地址,段內(nèi)尋址時(shí)使用。遠(yuǎn)指針(48位):是一個(gè)由16位選擇符和32位偏移量組成,段間尋址時(shí)使用。返回8
第2節(jié)80X86的尋址方式
80X86的尋址方式共有7種:1.立即尋址2.寄存器尋址3.直接尋址4.寄存器間接尋址5.相對(duì)寄存器間接尋址6.基址加變址尋址7.相對(duì)基址加變址尋址9立即尋址
指定的操作數(shù)緊跟在操作碼之后,直接存放在代碼段中。如:MOVBL,56H;BL56HMOVAX,2056H;AX2056HMOVECX,12345678H;ECX12345678H
立即數(shù)只能作源操作數(shù)。不能作目的操作數(shù)。寄存器尋址操作數(shù)在CPU的寄存器中,而寄存器的名由指令指出。如:INCCL;CL(CL)+1MOVAX,BX;AX(BX)10直接尋址操作數(shù)有效地址(16位或32位)直接包含在指令中,它位于操作碼之后,存放在代碼段中。如果指令無前綴指明在那一段中,則默認(rèn)操作數(shù)存放在數(shù)據(jù)段。如:MOVAX,[2000H];DS段2000H的內(nèi)容送AL,
2001H的內(nèi)容送AHMOVAX,ES:[2000H];ES段2000H的內(nèi)容送AL,
2001H的內(nèi)容送AH寄存器間接尋址操作數(shù)的偏移地址存放在寄存器中,而操作數(shù)存放在存儲(chǔ)器中。(1)16位尋址
EA=[DI]、[SI]、[BX]、[BP]
無前綴默認(rèn)操作數(shù)存放在數(shù)據(jù)段無前綴默認(rèn)操作數(shù)存放在堆棧段11例如:
MOVAX,[BX];AX(DS*10H+(BX))MOVAX,[BP];AX(SS*10H+(BP))MOVAX,ES:[BX];AX(ES*10H+(BX))MOVAX,DS:[BP];AX(DS*10H+(BP))(2)32位尋址
EA=[EDI]、[ESI]、[EBX]、[EAX]、[ECX]、[EDX]、[ESP]、[EBP]ESP、EBP默認(rèn)操作數(shù)存放在堆棧段,其它默認(rèn)操作數(shù)存放在數(shù)據(jù)段。例如:MOVAX,[EBX];DS段字?jǐn)?shù)據(jù)送AXMOVAX,[EBP];SS段字?jǐn)?shù)據(jù)送AX
MOVECX,ES:[EBX];ES段雙字?jǐn)?shù)據(jù)送ECX
12相對(duì)寄存器間接尋址寄存器內(nèi)容與位移量之和形成操作數(shù)的有效地址。即:
EA=[寄存器]+位移量
(1)16位尋址
EA={[BX]、[BP]、[DI]、[SI]}+位移量(帶符號(hào)8或16位整數(shù))如:MOVAX,2040H[BX]
或MOVAX,[BX+2040H];DS段(BX)+2040H中的字?jǐn)?shù)據(jù)送AX。
(2)32位尋址
EA={[EAX]、[EBX]、...、[ESI]、[ESP]、[EBP]}+位移量(帶符號(hào)8或32位整數(shù))
如:MOVECX,1500H[EAX];DS段(EAX)+1500H
或MOVECX,[EAX+1500H]中的雙字?jǐn)?shù)據(jù)送ECX。13基址加變址尋址基址寄存器內(nèi)容與變址寄存器內(nèi)容之和形成操作數(shù)的偏移地址。即:EA=[基址寄存器]+[變址寄存器]
(1)16位尋址基址寄存器:BX、BP;變址寄存器:DI、SI如:MOVAX,[BX+SI]或MOVAX,[BX][SI];DS段(BX)+(SI)中的字?jǐn)?shù)據(jù)送AX。
(2)32位尋址基址寄存器:任何一個(gè)32位通用寄存器變址寄存器:除ESP之外的任一個(gè)32位通用寄存器如:MOVAX,[EBX+ECX];DS段(EBX)+(ECX)中或MOVAX,[EBX][ECX]的字?jǐn)?shù)據(jù)送AX。
14相對(duì)基址加變址尋址基址寄存器內(nèi)容與變址寄存器內(nèi)容再加偏移量之和形成操作數(shù)的有效地址。即:
EA=[基址寄存器]+[變址寄存器]+偏移量如:MOVAX,1234H[BX+DI]
或MOVAX,[BX+DI+1234H]
或MOVAX,1234H[BX][DI];DS段
(BX)+(DI)+1234H中的字?jǐn)?shù)據(jù)送AX。15與跳轉(zhuǎn)有關(guān)的尋址方式與跳轉(zhuǎn)有關(guān)的尋址方式用于確定程序轉(zhuǎn)移或調(diào)用的目標(biāo)。如:無條件轉(zhuǎn)移語句:JMPdstdst:轉(zhuǎn)移目標(biāo)調(diào)用語句:CALLdst
dst:調(diào)用目標(biāo)
參見轉(zhuǎn)移和調(diào)用指令一節(jié)。練習(xí)題:假設(shè)(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0040H,指令
MOVAX,src中,以下src為何種尋址方式?有效地址和物理地址各是多少?
(1)100H[BX] (2)[BX] (3)[BP](4)ES:[BX+10H](5)BX(6)[1000H](7)[SI] (8)1000H[BX+SI] (9)1000H[BP][SI](10)[BX][SI]16
第3節(jié)80X86的指令系統(tǒng)一、指令格式指令格式:
[標(biāo)號(hào):]操作碼[操作數(shù),…] [;注釋]
其中:標(biāo)號(hào):確定匯編語句的位置,提供跳轉(zhuǎn)、循環(huán)的目標(biāo)。操作碼:匯編語句操作。操作數(shù):操作數(shù)據(jù)項(xiàng),數(shù)目因操作碼而異。注釋:程序注解。 如:START:MOVAX,DATAMOVDS,AX;設(shè)置DS17二、指令系統(tǒng)
80486的指令大致分為:整數(shù)指令:數(shù)據(jù)傳送、算術(shù)運(yùn)算、邏輯運(yùn)算與移位、串操作、位操作指令、控制轉(zhuǎn)移、標(biāo)志操作、按條件設(shè)置字節(jié)、處理器控制指令、高級(jí)語言指令等浮點(diǎn)數(shù)指令:數(shù)據(jù)傳送、算術(shù)運(yùn)算、比較、超越函數(shù)、常量、控制等指令操作系統(tǒng)型指令18
指令操作數(shù)符號(hào)說明:
OP1,OP2,OP3:操作數(shù)
reg:通用寄存器。長度可以是8位、16位、32位
Sreg:段寄存器(段選擇符)
reg8:8位通用寄存器
reg16:16位通用寄存器
reg32:32位通用寄存器
mem:存儲(chǔ)器。長度可以是8位、16位、32位
mem8:8位存儲(chǔ)器
mem16:16位存儲(chǔ)器
mem32:32位存儲(chǔ)器
imm:立即數(shù)。長度可以是8位、16位、32位
imm8:8位立即數(shù)19與運(yùn)算有關(guān)的標(biāo)志標(biāo)志寄存器FLAGS中存放運(yùn)算結(jié)果的屬性。CF:進(jìn)位/借位標(biāo)志。加、減運(yùn)算最高位產(chǎn)生進(jìn)位/借位時(shí)置1。AF:輔助進(jìn)位/借位標(biāo)志。加、減運(yùn)算時(shí)低半字節(jié)位產(chǎn)生進(jìn)位/借位時(shí)置1。OF:溢出標(biāo)志。有符號(hào)二進(jìn)制加、減運(yùn)算結(jié)果超出范圍時(shí)置1。ZF:零標(biāo)志。結(jié)果為零時(shí)置1。SF:符號(hào)標(biāo)志。結(jié)果為負(fù)時(shí)置1。PF:奇偶標(biāo)志。結(jié)果“1”的個(gè)數(shù)為偶數(shù)時(shí)置1。20
指令執(zhí)行對(duì)標(biāo)志位影響的符號(hào)說明:
X:表示相應(yīng)標(biāo)志位狀態(tài)依運(yùn)算或操作結(jié)果決定
0:表示相應(yīng)標(biāo)志位無條件清“0”1:表示相應(yīng)標(biāo)志位無條件置“1”U:表示相應(yīng)標(biāo)志位狀態(tài)未定義,狀態(tài)隨機(jī)
-:表示相應(yīng)標(biāo)志位狀態(tài)不受影響,保持原狀態(tài)21數(shù)據(jù)傳送類指令用于實(shí)現(xiàn)存儲(chǔ)器與寄存器、寄存器與寄存器、累加器與I/O端口之間字節(jié)、字或雙字的傳送,也可將立即數(shù)傳送到存儲(chǔ)器或寄存器。這類指令基本上不影響標(biāo)志位。傳送指令MOV
指令格式:MOVOP1,OP2reg/Sreg,regreg,Sregreg/Sreg,memmem,reg/Sregreg,immmem,imm22
功能:把OP2的內(nèi)容傳送到OP1中,OP1和OP2為字節(jié)、字或雙字說明:立即數(shù)只能作為源操作數(shù),而其他三種既可作源操作數(shù)又可作目的操作數(shù);存儲(chǔ)器和存儲(chǔ)器之間以及段寄存器和段寄存器之間不允許傳數(shù),而通用寄存器之間則允許相互傳數(shù)。例如:用如下指令可給數(shù)據(jù)段寄存器DS賦初值
MOVAX,DATAMOVDS,AX再如:MOVEBX,12345678HMOVAX,[BX+24]23交換指令XCHG
指令格式:XCHGOP1,OP2reg,regmem,regreg,mem
功能:用于交換兩個(gè)操作數(shù)。說明:指令中的兩個(gè)操作數(shù)可以是兩個(gè)寄存器操作數(shù),或一個(gè)寄存器與一個(gè)存儲(chǔ)器操作數(shù)。例如:XCHGAX,BXXCHGAX,[BX]XCHG[BX+20H],AX24I/O指令I(lǐng)N和OUT
指令格式:
INOP1,OP2OUTOP1,OP2AL,imm8imm8,ALAX,imm8imm8,AXEAX,imm8imm8,EAXAL,DXDX,ALAX,DXDX,AXEAX,DXDX,EAX
功能:用于在I/O端口和AL、AX或EAX累加器之間交換數(shù)據(jù)。
2526
例如:
INAL,0FAH;從端口FAH輸入8位數(shù)到ALINEAX,28H;將端口28H、29H、2AH和
2BH的32位數(shù)送EAX
MOVDX,3AEH;I/O地址大于255時(shí).應(yīng)通過
DX間接尋址
INAX,DX;從DX指出的端口輸入16位數(shù)AXOUT21H,AL;將8位數(shù)從AL輸出到端口21HOUTDX,EAX;將32位數(shù)從EAX輸出到DX指出的端口27裝入有效地址指令LEA
格式:LEAOp1,OP2reg32,memreg16,mem
功能:將有效地址(即偏移地址)送通用寄存器。例如:LEAECX,DOLLAR[ESI*4+EDX]
設(shè):EDX=30H,ESI=32H,DOLLAR=7580H,
則(ECX)=7678H(32H*4+30H+7580H)28裝入全地址指令LDS,LES,LFS.LGS,LSS
格式:LDSreg,memLESreg,memLFSreg,memLGSreg,memLSSreg,mem
功能:取mem指示的32位或48位全地址指針(即一個(gè)16位段選擇符和一個(gè)16位或32位偏移地址)裝入段寄存器和16位或32位reg中。
29
對(duì)于實(shí)地址方式和虛擬8086方式,段基址和偏移地址都是16位,段基址送段寄存器,偏移地址送reg中。例如:XDD12345678HLDSSI,X;DS=1234H,SI=5678H
對(duì)于16位和32位保護(hù)方式,選擇符送段寄存器,偏移地址送reg中。例如:XDD12345678H;32位偏移值
DW0010H;16位選擇符
LDSESI,X;ESI=12345678H,
DS=0010H30壓棧/彈棧指令PUSH/POP
格式:PUSHOP1POPOP1imm16mem16imm32mem32mem16reg16mem32reg32reg16
功能:reg32
PUSH指令使(E)SP的內(nèi)容減2或減4,然后把16位或32位的立即數(shù)、存儲(chǔ)器操作數(shù)或寄存器操作數(shù)壓入堆棧,SS:[(E)SP]指向新的棧頂。
POP指令從堆棧把字或雙字彈出至16位或32位存儲(chǔ)器或通用寄存器中,(E)SP的內(nèi)容加2或加4。31例如:PUSHAX;(SP)-2SP,(AX)(SP)PUSHBX;(SP)-2SP,(BX)(SP)PUSHCX;(SP)-2SP,(CX)(SP)...POPCX;((SP))CX,(SP)+2SPPOPBX;((SP))BX,(SP)+2SPPOPAX;((SP))AX,(SP)+2SP
堆棧為“先進(jìn)后出”的數(shù)據(jù)結(jié)構(gòu)。32棧底棧底SPSP00H20H60H30H40H60H棧頂SSSS圖A圖B設(shè):AX=6040H,BX=3060H,CX=2000H
執(zhí)行PUSH指令后,堆棧狀態(tài)如圖A,執(zhí)行POP指令后,堆棧狀態(tài)如圖B。33全部通用寄存器壓棧和出棧指令格式:PUSHA/POPA;16位通用寄存器壓棧和出棧指令。入棧順序?yàn)椋?/p>
AX、CX、BX、DX、
SP、BP、SI和DI。
PUSHAD/POPAD;32位通用寄存器壓棧和出棧指令。入棧順序?yàn)椋?/p>
EAX、ECX、EBX、EDX、
ESP、EBP、ESI和EDI。其中:SP和ESP為操作前的棧頂指針。34
標(biāo)志寄存器傳送指令指令格式:LAHF;F寄存器內(nèi)容送AH指令SAHF;AH內(nèi)容送F寄存器指令PUSHF;16位F內(nèi)容進(jìn)棧指令(保存F)POPF;16位F內(nèi)容出棧指令(恢復(fù)F)PUSHFD;32位F內(nèi)容進(jìn)棧指令(保存F)POPFD;32位F內(nèi)容出棧指令(恢復(fù)F)35查表轉(zhuǎn)換指令XLAT
格式:XLAT;AL((BX)+(AL))
功能:完成一個(gè)字節(jié)的查表轉(zhuǎn)換
BX指向表的首地址(DS段內(nèi)),AL裝入要轉(zhuǎn)換的代碼在表中的序號(hào),并XLAT指令執(zhí)行的結(jié)果存于AL中。例如:查找ASCII碼表中,(BX)3的ASCII碼。程序如下:(BX)+(AL)
LEABX,TABLE;DS段表的首地址送BXMOVAL,3;要轉(zhuǎn)換的代碼在表中的序號(hào)3送ALXLAT;AL((BX)+(AL)),查找到的3的
ASCII碼33H保存在AL中序號(hào)01234...TABLE30H31H32H
33H34H..
36算術(shù)運(yùn)算指令支持加、減、乘、除四種基本算術(shù)運(yùn)算,其操作對(duì)象可以是字節(jié)、字、雙字的有符號(hào)和無符號(hào)二進(jìn)制整數(shù),也可以是無符號(hào)的壓縮、非壓縮BCD碼。算術(shù)運(yùn)算指令一般會(huì)影響FLAGS寄存器中的狀態(tài)標(biāo)志。加法和減法指令A(yù)DD/SUB格式:ADDOP1,OP2;OP1OP1+OP2,置標(biāo)志位
reg,regreg,memreg,immmem,regmem,imm37ADD的功能:將OP1和OP2相加,結(jié)果存放在OP1。例:ADDAX,BX;AX(AX)+(BX)ADDEBX,ECX;EBX(EBX)+(ECX)ADD[3000H],AX;3000H(3000H)+(AX)ADD[3000H],23;3000H(3000H)+23SUBOP1,OP2;OP1OP1-OP2,置標(biāo)志位
reg,regreg,memreg,immmem,regmem,imm38SUB的功能:從OP1中減去OP2,結(jié)果存OP1中。例:SUBAX,BX;AX(AX)-(BX)SUBEAX,ECX;EAX(EAX)-(ECX)SUBN,12345678H;N(N)-12345678HADD和SUB對(duì)標(biāo)志位的影響:OFSFZFAFPFCFXXXXXX例:設(shè)AL=64H,AH=0A8H,求執(zhí)行下列指令的結(jié)果和標(biāo)志位的狀態(tài)。
(1)ADDAL,AH;AL(AL)+(AH),有符號(hào)數(shù).解:01100100100D得:(AL)=0CH(正確)+10101000-88DOFSFZFAFPFCF
10000110012D00001139(2)SUBAL,AH;AL(AL)-(AH),有符號(hào)數(shù).解:|01100100100D得:(AL)=BCH(不正確)-10101000-88DOFSFZFAFPFCF10111100-68D110101
有符號(hào)數(shù)加、減的結(jié)果有“溢出”的判斷規(guī)則:對(duì)于加法:正數(shù)+正數(shù)=負(fù)數(shù),負(fù)數(shù)+負(fù)數(shù)=正數(shù)對(duì)于減法:正數(shù)-負(fù)數(shù)=負(fù)數(shù),負(fù)數(shù)-正數(shù)=正數(shù)例:設(shè)(AL)=7FH,(BL)=40H,判斷執(zhí)行ADDAL,BL指令的結(jié)果是否溢出。解:01111111127D得:(AL)=0BFH(溢出)+0100000064DOFSFZFAFPFCF10111111-65D11000040帶進(jìn)/借位的加、減法指令A(yù)DC/SBB格式:ADCOP1,OP2;OP1OP1+OP2+CF
,置標(biāo)志位
reg,regreg,memreg,immmem,regmem,immADC的功能:將OP1、OP2和進(jìn)位標(biāo)志位CF相加,結(jié)果存放在OP1。例:ADCAX,375;AX(AX)+375+CFADCEBX,ECX;EBX(EBX)+(ECX)+CF41SBBOP1,OP2;OP1OP1-OP2-CF
,置標(biāo)志位
reg,regreg,memreg,immmem,regmem,immSBB的功能:從OP1中減去OP2,再減去借位標(biāo)志CF,結(jié)果存OP1中。例:SBBAX,BX;AX(AX)-(BX)-CFSUBECX,456789ABH;
ADC和SBB對(duì)標(biāo)志位的影響:
OFSFZFAFPFCFXXXXXX42ADD和ADC、SUB和SBB經(jīng)常配合使用,完成64位加、減法運(yùn)算。例:ADDEAX,ECX;EAX(EAX)+(ECX)ADCEBX,EDX;EBX(EBX)+(EDX)+CFSUBEAX,ECX;EAX(EAX)-(ECX)SBBEBX,EDX;EBX(EBX)-(EDX)-CF加1/減1指令I(lǐng)NC/DEC格式:INCOP1;OP1OP1+1,置標(biāo)志位
memreg
43格式:DECOP1;OP1OP1-1,置標(biāo)志位
memreg功能:INC使操作數(shù)的值加1;DEC使操作數(shù)的值減1,常用于修改計(jì)數(shù)器或地址指針。例:下面是從300H端口輸出256個(gè)字節(jié)數(shù)據(jù)的程序段:BUFFERDB12,34,…MOVCX,256MOVSI,OFFSETBUFFERMOVDX,300HNEXT:MOVAL,[SI]OUTDX,AL
INCSI;地址加1,取下一個(gè)數(shù)
LOOPNEXT;未完,繼續(xù)44INC和DEC對(duì)標(biāo)志位的影響:OFSFZFAFPFXXXXX交換加法指令XADD
格式:XADDOP1,OP2;OP1OP1+OP2OP2OP1
功能:OP1與OP2相加,結(jié)果存于OP1中,并將OP1的值送OP2中。例:XADDEAX,ECX;EAX(EAX)+(ECX)
ECX(EAX)變反指令NEG
格式:NEGOP1;OP10-OP1,置標(biāo)志位功能:求OP1的相反數(shù)。45例:NEGAL;AL0-(AL)若(AL)=13H,執(zhí)行NEG指令后,(AL)=EDH比較指令CMP格式:CMPOP1,OP2;OP1-OP2,置標(biāo)志位
reg,regreg,memreg,immmem,regmem,imm功能:將OP1減去OP2,但結(jié)果不存在OP1中,只使結(jié)果影響標(biāo)志位。
CMP指令用于比較OP1與OP2的大小,由標(biāo)志位來反映兩數(shù)的關(guān)系(見表A)。A-BCFZFSFOFA=B0100A<B10--無符號(hào)數(shù)A>B00--A<B-010
有符號(hào)數(shù)A>B-000表A
比較并交換指令CMPXCHG
格式:CMPXCHGOP1,OP2
功能:將OP1與累加器(AL、AX或EAX)的內(nèi)容進(jìn)行比較,若相等則將OP2存于OP1中;否則將OP1送到累加器中。例:CMPXCHGCX,DX;若(CX)=(AX)
則CX(DX),否則AX(CX)47無符號(hào)數(shù)乘法指令MUL
格式:MULOP1regmem
功能:被乘數(shù)隱含在累加器中(AL,AX,EAX),OP1為乘數(shù)。字節(jié)運(yùn)算時(shí)乘積返回到AX;字運(yùn)算時(shí)乘積返回到DX:AX;雙字運(yùn)算時(shí)乘積返回到EDX:EAX。例:MULCL;AX(AL)*(CL)
MULBX;DX:AX(AX)*(BX)
MULDWORD[ESI];EDX:EAX(EAX)*(ESI)
MUL指令影響標(biāo)志位OF和CF:若積的高字節(jié)、字或雙字為“0”,則OF、CF清“0”,否則OF、CF置“1”。48
有符號(hào)乘法指令I(lǐng)MUL
指令格式有下列三種:(1)單操作數(shù):IMULOP1regmem
功能:被乘數(shù)隱含在累加器中(AL,AX,EAX),OP1為乘數(shù)。字節(jié)運(yùn)算時(shí)乘積返回到AX;字運(yùn)算時(shí)乘積返回到DX:AX;雙字運(yùn)算時(shí)乘積返回到EDX:EAX。
(2)雙操作數(shù):IMULOP1,OP2reg,regreg,memreg,imm功能:OP1乘以O(shè)P2,積存放在OP1中。49(3)三操作數(shù):IMULOP1,OP2,OP3reg,reg,immreg,mem,imm
功能:OP2乘以O(shè)P3,積存放在OP1中。例如:IMULDL;AX(AL)*(DL)IMULEBX;EDX:EAX(EAX)*(EBX)IMULBL,CL;BL(BL)*(CL)IMULBL,CL,4;BL(BL)*(CL)*4IMUL指令影響標(biāo)志位OF和CF若積的高字節(jié)、字或雙字不是積的符號(hào)位擴(kuò)展,則OF、CF置“1”,否則OF、CF清“0”。50除法指令DIV/IDIV
格式:DIVOP1;無符號(hào)除法
regmemIDIVOP1;有符號(hào)除法
regmem
功能:字節(jié)運(yùn)算時(shí),被除數(shù)隱含在AX中,OP1為字節(jié)除數(shù),商存入AL,余數(shù)存入AH。字運(yùn)算時(shí),被除數(shù)隱含在DX:AX中,OP1為字除數(shù),商存入AX,余數(shù)存入DX
雙字運(yùn)算時(shí),被除數(shù)隱含在EDX:EAX中,OP1為雙字除數(shù),商存入EAX,余數(shù)存入EDX。51
例如:
DIVBL;(AX)/(BL),商存入AL,余數(shù)存入AH。
IDIVECX;(EDX:EAX)/(ECX)商存入EAX,余數(shù)存入EDX。符號(hào)擴(kuò)展指令格式:
CBW;將AL中8位帶符號(hào)數(shù)擴(kuò)展為16位存入AX。
CWD;將AX中16位帶符號(hào)數(shù)擴(kuò)展為32位存入DX:AXCWDE;將AX中16位帶符號(hào)數(shù)擴(kuò)展為32位存入EAX。
CDQ;將EAX中32位帶符號(hào)數(shù)擴(kuò)展為64位存入
EDX:EAX。52符號(hào)擴(kuò)展指令常用于帶符號(hào)數(shù)除法運(yùn)算時(shí),對(duì)被除數(shù)位數(shù)的擴(kuò)展。當(dāng)兩個(gè)帶符號(hào)數(shù)的字節(jié)/字/雙字?jǐn)?shù)相除時(shí),必須將被除數(shù)擴(kuò)展為雙倍長度。例如:編寫程序,計(jì)算789AH/1234H。BUFFERDW789AH;被除數(shù)
DW1234H;除數(shù)
DD0;存結(jié)果START:MOVBX,OFFSETBUFFERMOVAX,[BX];取被除數(shù)
CDW;字?jǐn)U展為雙字,AX符號(hào)位擴(kuò)展到DX各位
IDIV2[BX];帶符號(hào)除
MOV4[BX],AX;存商
MOV6[BX],DX;存余數(shù)
十進(jìn)制(BCD碼)調(diào)整指令壓縮BCD碼運(yùn)算:將壓縮BCD數(shù)用二進(jìn)制加、減指令
(ADD,SUB,ADC,SBC)運(yùn)算,運(yùn)算結(jié)果必須用以下調(diào)整指令調(diào)整為壓縮BCD數(shù)的結(jié)果。指令格式及功能:
DAA
;將AL中的和調(diào)整為壓縮BCD數(shù)
DAS
;將AL中的差調(diào)整為壓縮BCD數(shù)非壓縮BCD字節(jié)數(shù)加、減、乘、除(ASCII調(diào)整)非壓縮BCD碼運(yùn)算:將非壓縮BCD數(shù)用二進(jìn)制加、減、乘、除指令運(yùn)算,配合相應(yīng)的調(diào)整。
AAA
;將AL中的和調(diào)整為非壓縮BCD數(shù)
AAS
;將AL中的差調(diào)整為非壓縮BCD數(shù)
AAM
;將AL中的積調(diào)整為非壓縮BCD數(shù)
AAD
;調(diào)整AX中的被除數(shù),相除的商即為非壓縮BCD數(shù)54BCD碼運(yùn)算編程舉例例1求組合BCD數(shù)1283+2574=3857BCD1DB83H,12HBCD2DB74H,25HBCD3DB?,?START:MOVAL,BCD1ADDAL,BCD2
DAA;調(diào)整,(AL)=57HMOVBCD3,AL;存和的低字節(jié)
MOVAL,BCD1+1ADCAL,BCD2+1
DAA;調(diào)整,(AL)=38HMOVBCD+1,AL;存和的高字節(jié)例2兩個(gè)ASCII碼數(shù)(7-5)相減
MOVAL,’7’;37HSUBAL,’5’;37H-35H
AAS;調(diào)整,(AL)=02H例3非組合BCD數(shù)6*8=48MOVAL,06HMOVBL,08HMULBL;AX(AL)*(BL)
AAM;調(diào)整,(AX)=0408H例4非組合BCD數(shù)17/5=3余2MOVAX,0107HMOVBL,05H
AAD;調(diào)整被除數(shù),(AX)=0011HDIVBL;相除,(AL)=03,(AH)=02邏輯運(yùn)算與移位指令這類指令包括與、或、非、異或、測(cè)試和左移、右移、循環(huán)左/右移指令。除NOT外,都影響某些標(biāo)志位。邏輯與/或/異或指令A(yù)ND/OR/XOR格式:AND/OR/XOROP1,OP2reg,memreg,immmem,regmem,imm功能:兩操作數(shù)按位與、或、異或,結(jié)果存入OP1中。57例如:MOVAL,‘6’ANDAL,0FH;(AL)=06H
MOVAL,6ORAL,30H;(AL)=36HMOVAL,0F0HXORAL,0FH;(AL)=00H
測(cè)試指令TEST
格式:TESTOP1,OP2reg,regreg,memreg,imm功能:兩操作數(shù)按位與,置標(biāo)志位,不保存結(jié)果。
58TEST常用于測(cè)試某位的狀態(tài)。例如測(cè)試打印機(jī)是否空閑的程序段如下:
MOVDX,3BDHPRTBUSY:INAL,DX;讀打印機(jī)狀態(tài)
TESTAL,80H;測(cè)試是否空閑
JZPRTBUSY;忙,繼續(xù)測(cè)試
...邏輯非指令NOT格式:NOTOP1regmem功能:將操作數(shù)各位求反,對(duì)標(biāo)志位沒有影響.59算術(shù)/邏輯左移指令SAL/SHL格式:SAL/SHLOP1,OP2reg,imm8mem,imm8reg,CLmem,CL功能:將OP1向左移位,移動(dòng)的次數(shù)由OP2決定,若移動(dòng)的次數(shù)為1,OP2為立即數(shù),其它情況將移動(dòng)的次數(shù)送入CL中。操作數(shù)每左移一位,在最低位補(bǔ)0,最高位移進(jìn)CF中。例:設(shè)(AL)=01010011B,將AL的內(nèi)容左移3位。
MOVCL,3SHLAL,CL;(AL)=1001100060算術(shù)/邏輯右移指令SAR/SHR
格式:SAR/SHROP1,OP2reg,imm8mem,imm8reg,CLmem,CL
功能:將OP1向右移位,移動(dòng)的次數(shù)由OP2決定,若移動(dòng)的次數(shù)為1,OP2為立即數(shù),其它情況將移動(dòng)的次數(shù)送入CL中。對(duì)于SHR指令,操作數(shù)為無符號(hào)數(shù),每右移一位,在最高位補(bǔ)0,最低位移進(jìn)CF中。對(duì)于SAR指令,操作數(shù)為有符號(hào)數(shù),每右移一位,最高位保持不變,最低位移進(jìn)CF中。61例:設(shè)(AL)=10101001B,將AL的內(nèi)容算術(shù)/邏輯右移3位。算術(shù)右移3位:
MOVCL,3SARAL,CL;(AL)=11110101B邏輯右移3位:
MOVCL,3SHRAL,CL;(AL)=00010101B
62循環(huán)移位指令ROL/ROR/RCL/RCR格式:ROL/ROR/RCL/RCROP1,OP2reg,imm8mem,imm8reg,CLmem,CL功能:ROL為左循環(huán)移位指令,ROR為右循環(huán)移位指令,RCL和RCR則分別為帶CF的左循環(huán)移位和右循環(huán)移位指令。CFCFCFCFROLRORRCLRCR63串操作指令串操作是指對(duì)存儲(chǔ)器中的一個(gè)或多個(gè)長度為字節(jié)、字或雙字的字符串進(jìn)行操作,包括串傳送、串裝入、串存儲(chǔ)、串比較、串掃描、串輸入、串輸出等。
串操作指令采用隱含尋址方式,約定:
DS:SI(ESI)尋址源串,ES:DI(EDI)尋址目的串。且偏移指針SI(ESI),DI(EDI)可根據(jù)DF方向標(biāo)志自動(dòng)增量或減量,以指向串中下一項(xiàng)。即:當(dāng)DF=0時(shí),增1(字節(jié))、2(字)或4(雙字)當(dāng)DF=1時(shí),減1(字節(jié))、2(字)或4(雙字)64串傳送指令格式:MOVSB;字節(jié)傳送
MOVSW;字傳送
MOVSD;雙字傳送功能:將DS:SI(ESI)指定源串中的數(shù)據(jù)傳送到ES:DI(EDI)指定的目的串中,并修自動(dòng)改源、目指針。串裝入指令格式:LODSB;裝入字節(jié)串
LODSW;裝入字串
LODSD;裝入雙字串功能:將DS:SI(ESI)指定源串中的數(shù)據(jù)傳送到AL、AX或EAX中,并自動(dòng)修改源指針。65串存儲(chǔ)指令格式:STOSB;存字節(jié)串
STOSW;存字串
STOSD;存雙字串功能:將AL、AX或EAX中的數(shù)據(jù)傳送到由ES:DI(EDI)指定的目的串中,并修改指針。串比較指令格式:CMPSB;字節(jié)串比較
CMPSW;字串比較
CMPSD;雙字串比較功能:將DS:SI(ESI)指定源串中的數(shù)據(jù)與ES:DI(EDI)指定的目的串中的數(shù)據(jù)進(jìn)行比較,置標(biāo)志位并自動(dòng)修改指針。66串掃描指令格式:SCASB;掃描字節(jié)串
SCASW;掃描字串
SCASD;掃描雙字串功能:用AL、AX或EAX中的數(shù)據(jù)減去由ES:DI(EDI)指定的目的串中的數(shù)據(jù),置標(biāo)志位并自動(dòng)修改目的指針。串輸入指令格式:INSB;輸入字節(jié)串
INSW;輸入字串
INSD;輸入雙字串功能:從DX指定的端口輸入數(shù)據(jù)至由ES:DI(EDI)指定的目的串中,并自動(dòng)修改目的指針。67串輸出指令格式:OUTSB;輸出字節(jié)串
OUTSW;輸出字串
OUTSD;輸出雙字串功能:將DS:SI(ESI)指定源串中的數(shù)據(jù)輸出到由DX指定的端口,并自動(dòng)修改源指針。
重復(fù)前綴REP/REPZ/REPE/REPNE/REPNZ
在串操作指令前加上重復(fù)前綴,可使該指令重復(fù)執(zhí)行。重復(fù)前綴的功能為:
REP:CX(CX)-1,當(dāng)(CX)≠0時(shí)重復(fù)。
REPZ/REPE:相等時(shí)重復(fù)。即:
CX(CX)-1,當(dāng)(CX)≠
0且ZF=1時(shí)重復(fù)。
REPNE/REPNZ:不相等時(shí)重復(fù)。即:
CX(CX)-1,當(dāng)(CX)≠
0且ZF=0時(shí)重復(fù)。
REP常與MOVS和STOS指令配合使用。
REPZ/REPE和REPNE/REPNZ常與CMPS和SCANS指令配合使用。68串操作指令應(yīng)用舉例使用串操作指令時(shí),根據(jù)需要設(shè)置以下內(nèi)容:設(shè)置DS:SI(ESI);ES:DI(EDI)設(shè)置DF標(biāo)志設(shè)置CX(ECX)選用重復(fù)前綴REP、REPE/REPZ、REPNE/REPNZ69例1將數(shù)據(jù)段中的字符串‘ABC45’傳送到附加段中。程序如下:DATASEGMENTST:MOVAX,DATAYCHDB‘ABC45’MOVDS,AXDATAENDSMOVAX,EXTRAEXTRASEGMENTMOVES,AXMCHDB5DUP(?)LEASI,YCHEXTRAENDSLEADI,MCHCODESEGMENTMOVCX,5ASSUMECS:CODECLDASSUMEDS:DATAREPMOVSBASSUMEES:EXTRACODEENDSENDST70
控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令包括:
?
無條件轉(zhuǎn)移指令(JMP)
?
條件轉(zhuǎn)移指令(JA、JB、JE……)
?
循環(huán)控制指令(LOOP、LOOPZ、LOOPNZ)
?
調(diào)用/返回指令(CALL、RET)
?中斷/中斷返回指令(INT、IRET)無條件轉(zhuǎn)移指令JMP格式:JMPOP1lable;標(biāo)號(hào)
regmem功能:無條件地控制程序轉(zhuǎn)移到OP1所指定的目標(biāo)地址。71JMP尋址方式:短轉(zhuǎn)移:在段內(nèi)的短距離(-128----127)轉(zhuǎn)移。段內(nèi)轉(zhuǎn)移:CS值不變,只給出地址偏移值。段間轉(zhuǎn)移:CS和(E)IP的值都發(fā)生改變的轉(zhuǎn)移為明確表示標(biāo)號(hào)或存儲(chǔ)單元的類型,可在操作數(shù)前加SHORT、NEAR、FAR、WORD、DWORD、FWORD等修飾符來限定。如:段內(nèi)直接短轉(zhuǎn)移:JMPSHORTPTR標(biāo)號(hào)段內(nèi)直接轉(zhuǎn)移:JMPNEARPTR標(biāo)號(hào)段內(nèi)間接轉(zhuǎn)移:JMPWORDPTRreg或mem段間直接轉(zhuǎn)移:JMPFARPTR標(biāo)號(hào)段間間接轉(zhuǎn)移:JMPDWORDPTRmem
72例如:
JMPNEARPTRTABLE[EBX];帶標(biāo)號(hào)的段內(nèi)轉(zhuǎn)移
JMPFARPTRTABLE[EBX];帶標(biāo)號(hào)的段間轉(zhuǎn)移
JMPSHORTPTRTABLE[EBX];帶標(biāo)號(hào)的短轉(zhuǎn)移
JMPWORDPTR[DX];16位尋址時(shí)不帶標(biāo)號(hào)的段內(nèi)轉(zhuǎn)移
JMPDWORDPTR[DX];16位尋址時(shí)不帶標(biāo)號(hào)的段間轉(zhuǎn)移
JMPDWORDPTR[EDX];32位尋址時(shí)不帶標(biāo)號(hào)的段內(nèi)轉(zhuǎn)移
JMPFWORDPTR[EDX];32位尋址時(shí)不帶標(biāo)號(hào)的段間轉(zhuǎn)移73條件轉(zhuǎn)移指令Jcc(p92表)格式:JccOP1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 圖書館裝修合同書-@-1
- 辦公用品快遞寄件合同模板
- 農(nóng)業(yè)科技園區(qū)肥料配送協(xié)議
- 書店裝修合同主要條款
- 洗浴中心舒適裝修合同模板
- 企業(yè)總部衛(wèi)生間裝修合同
- 博物館裝修設(shè)計(jì)合同模板
- 液態(tài)膠水槽罐車物流合同
- 體育館裝修及看臺(tái)座椅合同
- 專業(yè)健身房裝修協(xié)議
- 2025年中國山泉水市場(chǎng)前景預(yù)測(cè)及投資規(guī)劃研究報(bào)告
- GB/T 18109-2024凍魚
- 重慶市2025屆高三第一次聯(lián)合診斷檢測(cè)英語試卷(含解析含聽力原文無音頻)
- 《榜樣9》觀后感心得體會(huì)二
- 《西安交通大學(xué)》課件
- 天津市部分區(qū)2024-2025學(xué)年九年級(jí)(上)期末物理試卷(含答案)
- 小學(xué)二年級(jí)數(shù)學(xué)計(jì)算題共4165題
- 一氧化碳中毒培訓(xùn)
- 初二上冊(cè)好的數(shù)學(xué)試卷
- 保潔服務(wù)質(zhì)量與服務(wù)意識(shí)的培訓(xùn)
- 突發(fā)公共衛(wèi)生事件衛(wèi)生應(yīng)急
評(píng)論
0/150
提交評(píng)論