版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
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)種尋址方式;熟記各種類型的指令格式及功能,并能編寫簡單程序。3
第1節(jié)80X86的數(shù)據(jù)類型
80486匯編語言中可使用的數(shù)據(jù)類型有以下七種:
無符號二進制數(shù)
字節(jié)(8位):0~255(0~0FFH),占用一字節(jié)存儲單元。
字(16位):0~65535(0~0FFFFH),占用連續(xù)的兩字節(jié)存儲單元,低地址存儲單元存放低8位數(shù)據(jù),高地址存儲單元存放高8位數(shù)據(jù),低字節(jié)地址為該字的地址。
雙字(32位):0~4294967299(0~0FFFFFFFFH),占用連續(xù)的四字節(jié)存儲單元,最低地址存儲單元存放最低8位數(shù)據(jù),最高地址存儲單元存放最高8位數(shù)據(jù),最低字節(jié)地址為該雙字的地址。4有符號二進制數(shù)
字節(jié):-128~+127(80H~FFH,00H~7FH)字:-32768~+32767(8000H~FFFFH,00000H~7FFFH)雙字:-2147483650~+2147483649(80000000H~FFFFFFFFH,000000000H~7FFFFFFFH)
以補碼形式存儲,地址單元分配與無符號數(shù)類似。浮點數(shù)(實數(shù))單精度數(shù)(32位):數(shù)據(jù)格式如下:
階碼有效數(shù)313023220符號位1.1位符號,8位階碼,24位有效數(shù)(顯式23位,外加1位隱含的整數(shù)“1.”。5雙精度數(shù)(64位):數(shù)據(jù)格式如下:1位符號,11位階碼,53位有效數(shù)(顯式52位,外加1位隱含的整數(shù)“1.”。636252510
階碼有效數(shù)符號位1.擴展精度數(shù)(80位):數(shù)據(jù)格式如下:79786463620
階碼1有效數(shù)符號位1位符號,15位階碼,64位有效數(shù)(內(nèi)含1位整數(shù)1,小數(shù)點是隱含的。.6BCD碼壓縮BCD碼:1字節(jié)存放兩個BCD碼,格式如圖a74307430
(a)(b)非壓縮BCD碼:1字節(jié)存放一個BCD碼(低4位),格式如圖b字符串位串:從任何字節(jié)的任何位開始的相鄰位序列,最長可達232-1位字節(jié)/字/雙字串:是字節(jié)、字、雙字的相鄰序列,最長可達232-1字節(jié)。十位個位0或任意個位7ASCII碼
ASCII碼字符串:如‘ABC123’
ASCII碼數(shù):如30H~39H(0~9),41H~46H(A~F)指針數(shù)據(jù)近指針(32位):是一個32位的段內(nèi)偏移地址,段內(nèi)尋址時使用。遠指針(48位):是一個由16位選擇符和32位偏移量組成,段間尋址時使用。返回8
第2節(jié)80X86的尋址方式
80X86的尋址方式共有7種:1.立即尋址2.寄存器尋址3.直接尋址4.寄存器間接尋址5.相對寄存器間接尋址6.基址加變址尋址7.相對基址加變址尋址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位)直接包含在指令中,它位于操作碼之后,存放在代碼段中。如果指令無前綴指明在那一段中,則默認操作數(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ù)存放在存儲器中。(1)16位尋址
EA=[DI]、[SI]、[BX]、[BP]
無前綴默認操作數(shù)存放在數(shù)據(jù)段無前綴默認操作數(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默認操作數(shù)存放在堆棧段,其它默認操作數(shù)存放在數(shù)據(jù)段。例如:MOVAX,[EBX];DS段字數(shù)據(jù)送AXMOVAX,[EBP];SS段字數(shù)據(jù)送AX
MOVECX,ES:[EBX];ES段雙字數(shù)據(jù)送ECX
12相對寄存器間接尋址寄存器內(nèi)容與位移量之和形成操作數(shù)的有效地址。即:
EA=[寄存器]+位移量
(1)16位尋址
EA={[BX]、[BP]、[DI]、[SI]}+位移量(帶符號8或16位整數(shù))如:MOVAX,2040H[BX]
或MOVAX,[BX+2040H];DS段(BX)+2040H中的字數(shù)據(jù)送AX。
(2)32位尋址
EA={[EAX]、[EBX]、...、[ESI]、[ESP]、[EBP]}+位移量(帶符號8或32位整數(shù))
如:MOVECX,1500H[EAX];DS段(EAX)+1500H
或MOVECX,[EAX+1500H]中的雙字數(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)中的字數(shù)據(jù)送AX。
(2)32位尋址基址寄存器:任何一個32位通用寄存器變址寄存器:除ESP之外的任一個32位通用寄存器如:MOVAX,[EBX+ECX];DS段(EBX)+(ECX)中或MOVAX,[EBX][ECX]的字數(shù)據(jù)送AX。
14相對基址加變址尋址基址寄存器內(nèi)容與變址寄存器內(nèi)容再加偏移量之和形成操作數(shù)的有效地址。即:
EA=[基址寄存器]+[變址寄存器]+偏移量如:MOVAX,1234H[BX+DI]
或MOVAX,[BX+DI+1234H]
或MOVAX,1234H[BX][DI];DS段
(BX)+(DI)+1234H中的字數(shù)據(jù)送AX。15與跳轉(zhuǎn)有關(guān)的尋址方式與跳轉(zhuǎn)有關(guān)的尋址方式用于確定程序轉(zhuǎn)移或調(diào)用的目標。如:無條件轉(zhuǎn)移語句:JMPdstdst:轉(zhuǎn)移目標調(diào)用語句:CALLdst
dst:調(dià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)一、指令格式指令格式:
[標號:]操作碼[操作數(shù),…] [;注釋]
其中:標號:確定匯編語句的位置,提供跳轉(zhuǎn)、循環(huán)的目標。操作碼:匯編語句操作。操作數(shù):操作數(shù)據(jù)項,數(shù)目因操作碼而異。注釋:程序注解。 如:START:MOVAX,DATAMOVDS,AX;設(shè)置DS17二、指令系統(tǒng)
80486的指令大致分為:整數(shù)指令:數(shù)據(jù)傳送、算術(shù)運算、邏輯運算與移位、串操作、位操作指令、控制轉(zhuǎn)移、標志操作、按條件設(shè)置字節(jié)、處理器控制指令、高級語言指令等浮點數(shù)指令:數(shù)據(jù)傳送、算術(shù)運算、比較、超越函數(shù)、常量、控制等指令操作系統(tǒng)型指令18
指令操作數(shù)符號說明:
OP1,OP2,OP3:操作數(shù)
reg:通用寄存器。長度可以是8位、16位、32位
Sreg:段寄存器(段選擇符)
reg8:8位通用寄存器
reg16:16位通用寄存器
reg32:32位通用寄存器
mem:存儲器。長度可以是8位、16位、32位
mem8:8位存儲器
mem16:16位存儲器
mem32:32位存儲器
imm:立即數(shù)。長度可以是8位、16位、32位
imm8:8位立即數(shù)19與運算有關(guān)的標志標志寄存器FLAGS中存放運算結(jié)果的屬性。CF:進位/借位標志。加、減運算最高位產(chǎn)生進位/借位時置1。AF:輔助進位/借位標志。加、減運算時低半字節(jié)位產(chǎn)生進位/借位時置1。OF:溢出標志。有符號二進制加、減運算結(jié)果超出范圍時置1。ZF:零標志。結(jié)果為零時置1。SF:符號標志。結(jié)果為負時置1。PF:奇偶標志。結(jié)果“1”的個數(shù)為偶數(shù)時置1。20
指令執(zhí)行對標志位影響的符號說明:
X:表示相應(yīng)標志位狀態(tài)依運算或操作結(jié)果決定
0:表示相應(yīng)標志位無條件清“0”1:表示相應(yīng)標志位無條件置“1”U:表示相應(yīng)標志位狀態(tài)未定義,狀態(tài)隨機
-:表示相應(yīng)標志位狀態(tài)不受影響,保持原狀態(tài)21數(shù)據(jù)傳送類指令用于實現(xiàn)存儲器與寄存器、寄存器與寄存器、累加器與I/O端口之間字節(jié)、字或雙字的傳送,也可將立即數(shù)傳送到存儲器或寄存器。這類指令基本上不影響標志位。傳送指令MOV
指令格式:MOVOP1,OP2reg/Sreg,regreg,Sregreg/Sreg,memmem,reg/Sregreg,immmem,imm22
功能:把OP2的內(nèi)容傳送到OP1中,OP1和OP2為字節(jié)、字或雙字說明:立即數(shù)只能作為源操作數(shù),而其他三種既可作源操作數(shù)又可作目的操作數(shù);存儲器和存儲器之間以及段寄存器和段寄存器之間不允許傳數(shù),而通用寄存器之間則允許相互傳數(shù)。例如:用如下指令可給數(shù)據(jù)段寄存器DS賦初值
MOVAX,DATAMOVDS,AX再如:MOVEBX,12345678HMOVAX,[BX+24]23交換指令XCHG
指令格式:XCHGOP1,OP2reg,regmem,regreg,mem
功能:用于交換兩個操作數(shù)。說明:指令中的兩個操作數(shù)可以是兩個寄存器操作數(shù),或一個寄存器與一個存儲器操作數(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時.應(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位全地址指針(即一個16位段選擇符和一個16位或32位偏移地址)裝入段寄存器和16位或32位reg中。
29
對于實地址方式和虛擬8086方式,段基址和偏移地址都是16位,段基址送段寄存器,偏移地址送reg中。例如:XDD12345678HLDSSI,X;DS=1234H,SI=5678H
對于16位和32位保護方式,選擇符送段寄存器,偏移地址送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ù)、存儲器操作數(shù)或寄存器操作數(shù)壓入堆棧,SS:[(E)SP]指向新的棧頂。
POP指令從堆棧把字或雙字彈出至16位或32位存儲器或通用寄存器中,(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
堆棧為“先進后出”的數(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位通用寄存器壓棧和出棧指令。入棧順序為:
AX、CX、BX、DX、
SP、BP、SI和DI。
PUSHAD/POPAD;32位通用寄存器壓棧和出棧指令。入棧順序為:
EAX、ECX、EBX、EDX、
ESP、EBP、ESI和EDI。其中:SP和ESP為操作前的棧頂指針。34
標志寄存器傳送指令指令格式:LAHF;F寄存器內(nèi)容送AH指令SAHF;AH內(nèi)容送F寄存器指令PUSHF;16位F內(nèi)容進棧指令(保存F)POPF;16位F內(nèi)容出棧指令(恢復(fù)F)PUSHFD;32位F內(nèi)容進棧指令(保存F)POPFD;32位F內(nèi)容出棧指令(恢復(fù)F)35查表轉(zhuǎn)換指令XLAT
格式:XLAT;AL((BX)+(AL))
功能:完成一個字節(jié)的查表轉(zhuǎn)換
BX指向表的首地址(DS段內(nèi)),AL裝入要轉(zhuǎn)換的代碼在表中的序號,并XLAT指令執(zhí)行的結(jié)果存于AL中。例如:查找ASCII碼表中,(BX)3的ASCII碼。程序如下:(BX)+(AL)
LEABX,TABLE;DS段表的首地址送BXMOVAL,3;要轉(zhuǎn)換的代碼在表中的序號3送ALXLAT;AL((BX)+(AL)),查找到的3的
ASCII碼33H保存在AL中序號01234...TABLE30H31H32H
33H34H..
36算術(shù)運算指令支持加、減、乘、除四種基本算術(shù)運算,其操作對象可以是字節(jié)、字、雙字的有符號和無符號二進制整數(shù),也可以是無符號的壓縮、非壓縮BCD碼。算術(shù)運算指令一般會影響FLAGS寄存器中的狀態(tài)標志。加法和減法指令A(yù)DD/SUB格式:ADDOP1,OP2;OP1OP1+OP2,置標志位
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,置標志位
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對標志位的影響:OFSFZFAFPFCFXXXXXX例:設(shè)AL=64H,AH=0A8H,求執(zhí)行下列指令的結(jié)果和標志位的狀態(tài)。
(1)ADDAL,AH;AL(AL)+(AH),有符號數(shù).解:01100100100D得:(AL)=0CH(正確)+10101000-88DOFSFZFAFPFCF
10000110012D00001139(2)SUBAL,AH;AL(AL)-(AH),有符號數(shù).解:|01100100100D得:(AL)=BCH(不正確)-10101000-88DOFSFZFAFPFCF10111100-68D110101
有符號數(shù)加、減的結(jié)果有“溢出”的判斷規(guī)則:對于加法:正數(shù)+正數(shù)=負數(shù),負數(shù)+負數(shù)=正數(shù)對于減法:正數(shù)-負數(shù)=負數(shù),負數(shù)-正數(shù)=正數(shù)例:設(shè)(AL)=7FH,(BL)=40H,判斷執(zhí)行ADDAL,BL指令的結(jié)果是否溢出。解:01111111127D得:(AL)=0BFH(溢出)+0100000064DOFSFZFAFPFCF10111111-65D11000040帶進/借位的加、減法指令A(yù)DC/SBB格式:ADCOP1,OP2;OP1OP1+OP2+CF
,置標志位
reg,regreg,memreg,immmem,regmem,immADC的功能:將OP1、OP2和進位標志位CF相加,結(jié)果存放在OP1。例:ADCAX,375;AX(AX)+375+CFADCEBX,ECX;EBX(EBX)+(ECX)+CF41SBBOP1,OP2;OP1OP1-OP2-CF
,置標志位
reg,regreg,memreg,immmem,regmem,immSBB的功能:從OP1中減去OP2,再減去借位標志CF,結(jié)果存OP1中。例:SBBAX,BX;AX(AX)-(BX)-CFSUBECX,456789ABH;
ADC和SBB對標志位的影響:
OFSFZFAFPFCFXXXXXX42ADD和ADC、SUB和SBB經(jīng)常配合使用,完成64位加、減法運算。例: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,置標志位
memreg
43格式:DECOP1;OP1OP1-1,置標志位
memreg功能:INC使操作數(shù)的值加1;DEC使操作數(shù)的值減1,常用于修改計數(shù)器或地址指針。例:下面是從300H端口輸出256個字節(jié)數(shù)據(jù)的程序段:BUFFERDB12,34,…MOVCX,256MOVSI,OFFSETBUFFERMOVDX,300HNEXT:MOVAL,[SI]OUTDX,AL
INCSI;地址加1,取下一個數(shù)
LOOPNEXT;未完,繼續(xù)44INC和DEC對標志位的影響:OFSFZFAFPFXXXXX交換加法指令XADD
格式:XADDOP1,OP2;OP1OP1+OP2OP2OP1
功能:OP1與OP2相加,結(jié)果存于OP1中,并將OP1的值送OP2中。例:XADDEAX,ECX;EAX(EAX)+(ECX)
ECX(EAX)變反指令NEG
格式:NEGOP1;OP10-OP1,置標志位功能:求OP1的相反數(shù)。45例:NEGAL;AL0-(AL)若(AL)=13H,執(zhí)行NEG指令后,(AL)=EDH比較指令CMP格式:CMPOP1,OP2;OP1-OP2,置標志位
reg,regreg,memreg,immmem,regmem,imm功能:將OP1減去OP2,但結(jié)果不存在OP1中,只使結(jié)果影響標志位。
CMP指令用于比較OP1與OP2的大小,由標志位來反映兩數(shù)的關(guān)系(見表A)。A-BCFZFSFOFA=B0100A<B10--無符號數(shù)A>B00--A<B-010
有符號數(shù)A>B-000表A
比較并交換指令CMPXCHG
格式:CMPXCHGOP1,OP2
功能:將OP1與累加器(AL、AX或EAX)的內(nèi)容進行比較,若相等則將OP2存于OP1中;否則將OP1送到累加器中。例:CMPXCHGCX,DX;若(CX)=(AX)
則CX(DX),否則AX(CX)47無符號數(shù)乘法指令MUL
格式:MULOP1regmem
功能:被乘數(shù)隱含在累加器中(AL,AX,EAX),OP1為乘數(shù)。字節(jié)運算時乘積返回到AX;字運算時乘積返回到DX:AX;雙字運算時乘積返回到EDX:EAX。例:MULCL;AX(AL)*(CL)
MULBX;DX:AX(AX)*(BX)
MULDWORD[ESI];EDX:EAX(EAX)*(ESI)
MUL指令影響標志位OF和CF:若積的高字節(jié)、字或雙字為“0”,則OF、CF清“0”,否則OF、CF置“1”。48
有符號乘法指令I(lǐng)MUL
指令格式有下列三種:(1)單操作數(shù):IMULOP1regmem
功能:被乘數(shù)隱含在累加器中(AL,AX,EAX),OP1為乘數(shù)。字節(jié)運算時乘積返回到AX;字運算時乘積返回到DX:AX;雙字運算時乘積返回到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指令影響標志位OF和CF若積的高字節(jié)、字或雙字不是積的符號位擴展,則OF、CF置“1”,否則OF、CF清“0”。50除法指令DIV/IDIV
格式:DIVOP1;無符號除法
regmemIDIVOP1;有符號除法
regmem
功能:字節(jié)運算時,被除數(shù)隱含在AX中,OP1為字節(jié)除數(shù),商存入AL,余數(shù)存入AH。字運算時,被除數(shù)隱含在DX:AX中,OP1為字除數(shù),商存入AX,余數(shù)存入DX
雙字運算時,被除數(shù)隱含在EDX:EAX中,OP1為雙字除數(shù),商存入EAX,余數(shù)存入EDX。51
例如:
DIVBL;(AX)/(BL),商存入AL,余數(shù)存入AH。
IDIVECX;(EDX:EAX)/(ECX)商存入EAX,余數(shù)存入EDX。符號擴展指令格式:
CBW;將AL中8位帶符號數(shù)擴展為16位存入AX。
CWD;將AX中16位帶符號數(shù)擴展為32位存入DX:AXCWDE;將AX中16位帶符號數(shù)擴展為32位存入EAX。
CDQ;將EAX中32位帶符號數(shù)擴展為64位存入
EDX:EAX。52符號擴展指令常用于帶符號數(shù)除法運算時,對被除數(shù)位數(shù)的擴展。當兩個帶符號數(shù)的字節(jié)/字/雙字數(shù)相除時,必須將被除數(shù)擴展為雙倍長度。例如:編寫程序,計算789AH/1234H。BUFFERDW789AH;被除數(shù)
DW1234H;除數(shù)
DD0;存結(jié)果START:MOVBX,OFFSETBUFFERMOVAX,[BX];取被除數(shù)
CDW;字擴展為雙字,AX符號位擴展到DX各位
IDIV2[BX];帶符號除
MOV4[BX],AX;存商
MOV6[BX],DX;存余數(shù)
十進制(BCD碼)調(diào)整指令壓縮BCD碼運算:將壓縮BCD數(shù)用二進制加、減指令
(ADD,SUB,ADC,SBC)運算,運算結(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碼運算:將非壓縮BCD數(shù)用二進制加、減、乘、除指令運算,配合相應(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碼運算編程舉例例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兩個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邏輯運算與移位指令這類指令包括與、或、非、異或、測試和左移、右移、循環(huán)左/右移指令。除NOT外,都影響某些標志位。邏輯與/或/異或指令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
測試指令TEST
格式:TESTOP1,OP2reg,regreg,memreg,imm功能:兩操作數(shù)按位與,置標志位,不保存結(jié)果。
58TEST常用于測試某位的狀態(tài)。例如測試打印機是否空閑的程序段如下:
MOVDX,3BDHPRTBUSY:INAL,DX;讀打印機狀態(tài)
TESTAL,80H;測試是否空閑
JZPRTBUSY;忙,繼續(xù)測試
...邏輯非指令NOT格式:NOTOP1regmem功能:將操作數(shù)各位求反,對標志位沒有影響.59算術(shù)/邏輯左移指令SAL/SHL格式:SAL/SHLOP1,OP2reg,imm8mem,imm8reg,CLmem,CL功能:將OP1向左移位,移動的次數(shù)由OP2決定,若移動的次數(shù)為1,OP2為立即數(shù),其它情況將移動的次數(shù)送入CL中。操作數(shù)每左移一位,在最低位補0,最高位移進CF中。例:設(shè)(AL)=01010011B,將AL的內(nèi)容左移3位。
MOVCL,3SHLAL,CL;(AL)=1001100060算術(shù)/邏輯右移指令SAR/SHR
格式:SAR/SHROP1,OP2reg,imm8mem,imm8reg,CLmem,CL
功能:將OP1向右移位,移動的次數(shù)由OP2決定,若移動的次數(shù)為1,OP2為立即數(shù),其它情況將移動的次數(shù)送入CL中。對于SHR指令,操作數(shù)為無符號數(shù),每右移一位,在最高位補0,最低位移進CF中。對于SAR指令,操作數(shù)為有符號數(shù),每右移一位,最高位保持不變,最低位移進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串操作指令串操作是指對存儲器中的一個或多個長度為字節(jié)、字或雙字的字符串進行操作,包括串傳送、串裝入、串存儲、串比較、串掃描、串輸入、串輸出等。
串操作指令采用隱含尋址方式,約定:
DS:SI(ESI)尋址源串,ES:DI(EDI)尋址目的串。且偏移指針SI(ESI),DI(EDI)可根據(jù)DF方向標志自動增量或減量,以指向串中下一項。即:當DF=0時,增1(字節(jié))、2(字)或4(雙字)當DF=1時,減1(字節(jié))、2(字)或4(雙字)64串傳送指令格式:MOVSB;字節(jié)傳送
MOVSW;字傳送
MOVSD;雙字傳送功能:將DS:SI(ESI)指定源串中的數(shù)據(jù)傳送到ES:DI(EDI)指定的目的串中,并修自動改源、目指針。串裝入指令格式:LODSB;裝入字節(jié)串
LODSW;裝入字串
LODSD;裝入雙字串功能:將DS:SI(ESI)指定源串中的數(shù)據(jù)傳送到AL、AX或EAX中,并自動修改源指針。65串存儲指令格式: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ù)進行比較,置標志位并自動修改指針。66串掃描指令格式:SCASB;掃描字節(jié)串
SCASW;掃描字串
SCASD;掃描雙字串功能:用AL、AX或EAX中的數(shù)據(jù)減去由ES:DI(EDI)指定的目的串中的數(shù)據(jù),置標志位并自動修改目的指針。串輸入指令格式:INSB;輸入字節(jié)串
INSW;輸入字串
INSD;輸入雙字串功能:從DX指定的端口輸入數(shù)據(jù)至由ES:DI(EDI)指定的目的串中,并自動修改目的指針。67串輸出指令格式:OUTSB;輸出字節(jié)串
OUTSW;輸出字串
OUTSD;輸出雙字串功能:將DS:SI(ESI)指定源串中的數(shù)據(jù)輸出到由DX指定的端口,并自動修改源指針。
重復(fù)前綴REP/REPZ/REPE/REPNE/REPNZ
在串操作指令前加上重復(fù)前綴,可使該指令重復(fù)執(zhí)行。重復(fù)前綴的功能為:
REP:CX(CX)-1,當(CX)≠0時重復(fù)。
REPZ/REPE:相等時重復(fù)。即:
CX(CX)-1,當(CX)≠
0且ZF=1時重復(fù)。
REPNE/REPNZ:不相等時重復(fù)。即:
CX(CX)-1,當(CX)≠
0且ZF=0時重復(fù)。
REP常與MOVS和STOS指令配合使用。
REPZ/REPE和REPNE/REPNZ常與CMPS和SCANS指令配合使用。68串操作指令應(yīng)用舉例使用串操作指令時,根據(jù)需要設(shè)置以下內(nèi)容:設(shè)置DS:SI(ESI);ES:DI(EDI)設(shè)置DF標志設(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;標號
regmem功能:無條件地控制程序轉(zhuǎn)移到OP1所指定的目標地址。71JMP尋址方式:短轉(zhuǎn)移:在段內(nèi)的短距離(-128----127)轉(zhuǎn)移。段內(nèi)轉(zhuǎn)移:CS值不變,只給出地址偏移值。段間轉(zhuǎn)移:CS和(E)IP的值都發(fā)生改變的轉(zhuǎn)移為明確表示標號或存儲單元的類型,可在操作數(shù)前加SHORT、NEAR、FAR、WORD、DWORD、FWORD等修飾符來限定。如:段內(nèi)直接短轉(zhuǎn)移:JMPSHORTPTR標號段內(nèi)直接轉(zhuǎn)移:JMPNEARPTR標號段內(nèi)間接轉(zhuǎn)移:JMPWORDPTRreg或mem段間直接轉(zhuǎn)移:JMPFARPTR標號段間間接轉(zhuǎn)移:JMPDWORDPTRmem
72例如:
JMPNEARPTRTABLE[EBX];帶標號的段內(nèi)轉(zhuǎn)移
JMPFARPTRTABLE[EBX];帶標號的段間轉(zhuǎn)移
JMPSHORTPTRTABLE[EBX];帶標號的短轉(zhuǎn)移
JMPWORDPTR[DX];16位尋址時不帶標號的段內(nèi)轉(zhuǎn)移
JMPDWORDPTR[DX];16位尋址時不帶標號的段間轉(zhuǎn)移
JMPDWORDPTR[EDX];32位尋址時不帶標號的段內(nèi)轉(zhuǎn)移
JMPFWORDPTR[EDX];32位尋址時不帶標號的段間轉(zhuǎn)移73條件轉(zhuǎn)移指令Jcc(p92表)格式:JccOP1
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025高檔會所裝修合同
- 2025不良金融資產(chǎn)轉(zhuǎn)讓合同零星轉(zhuǎn)讓
- 2025關(guān)于代理合同格式
- 2025工程施工合同中核心條款有些
- 課題申報書:共同富裕下易地扶貧搬遷家庭收入不平等的測度、機理及政策創(chuàng)新研究
- 課題申報書:高校專業(yè)課教師課程思政元素挖掘能力提升路徑研究
- 課題申報書:服務(wù)新質(zhì)生產(chǎn)力發(fā)展的職業(yè)教育專業(yè)教學(xué)資源庫建設(shè)實踐路徑研究
- 課題申報書:非結(jié)構(gòu)化文本數(shù)據(jù)驅(qū)動的智能輔助診療決策方法研究
- 上海歐華職業(yè)技術(shù)學(xué)院《畫法幾何及建筑制圖》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海紐約大學(xué)《內(nèi)燃機原理》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年口腔科醫(yī)師工作總結(jié)個人述職報告(四篇合集)
- 志愿服務(wù)證明(多模板)
- 煤炭加工工藝的智能化控制與自動化技術(shù)
- 動力系統(tǒng)故障應(yīng)急預(yù)案
- 30題調(diào)度員崗位常見面試問題含HR問題考察點及參考回答
- 鹵味熟食策劃方案
- 國家開放大學(xué)電大《刑法學(xué)》期末題庫及答案
- 《能源概論》課件
- 計劃運營培訓(xùn)課件
- 吸附計算完整
- 無人機在農(nóng)業(yè)領(lǐng)域的實踐應(yīng)用與發(fā)展前景
評論
0/150
提交評論