![匯編語言指令格式_第1頁](http://file4.renrendoc.com/view/5fb6bcb10f3993c9a620c16366e51ab3/5fb6bcb10f3993c9a620c16366e51ab31.gif)
![匯編語言指令格式_第2頁](http://file4.renrendoc.com/view/5fb6bcb10f3993c9a620c16366e51ab3/5fb6bcb10f3993c9a620c16366e51ab32.gif)
![匯編語言指令格式_第3頁](http://file4.renrendoc.com/view/5fb6bcb10f3993c9a620c16366e51ab3/5fb6bcb10f3993c9a620c16366e51ab33.gif)
![匯編語言指令格式_第4頁](http://file4.renrendoc.com/view/5fb6bcb10f3993c9a620c16366e51ab3/5fb6bcb10f3993c9a620c16366e51ab34.gif)
![匯編語言指令格式_第5頁](http://file4.renrendoc.com/view/5fb6bcb10f3993c9a620c16366e51ab3/5fb6bcb10f3993c9a620c16366e51ab35.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1匯編語言指令格式由4部分組成:標(biāo)號表示該指令在主存中的邏輯地址,每個(gè)指令助記符就代表一種指令,目的操作數(shù)和源操作數(shù)表示參與操作的對象,注釋通常是對該指令或這段程序功能的說明。標(biāo)號:指令助記符目的操作數(shù),源操作數(shù);注釋2指令操作數(shù)的泛指表示r8 ——泛指8位通用寄存器AH/AL/BH/BL/CH/CL/DH/DL
r16 ——泛指16位通用寄存器AX/BX/CX/DX/SI/DI/BP/SP
reg ——泛指r8或r16seg ——泛指段寄存器CS/DS/ES/SSm8 ——泛指8位存儲器操作數(shù)單元(包括所有尋址方式)
m16 ——泛指16位存儲器操作數(shù)單元(包括所有尋址方式)
mem ——泛指m8或m16i8 ——泛指8位立即數(shù)
i16 ——泛指16位立即數(shù)
imm ——泛指i8或i16dest——泛指目的操作數(shù)
src ——泛指源操作數(shù)38088指令系統(tǒng)概述Intel8088指令系統(tǒng)共有117條基本指令,可分成以下6類:①數(shù)據(jù)傳送類指令②算術(shù)運(yùn)算類指令③位操作類指令④串操作類指令⑤控制轉(zhuǎn)移類指令⑥處理機(jī)控制類指令4學(xué)習(xí)指令的注意事項(xiàng)指令功能——該指令能夠?qū)崿F(xiàn)何種操作。通常指令助記符就是指令功能的英文單詞或其縮寫形式。指令支持的尋址方式——該指令中的操作數(shù)可以采用何種尋址方式。指令對標(biāo)志的影響——該指令執(zhí)行后是否對各個(gè)標(biāo)志位有影響,以及如何影響。其他——該指令其他需要特別注意的地方,如指令執(zhí)行時(shí)的約定設(shè)置、必須預(yù)置的參數(shù)、隱含使用的寄存器等。52.3數(shù)據(jù)傳送類指令把數(shù)據(jù)從一個(gè)位置傳送到另一個(gè)位置 1、通用數(shù)據(jù)傳送: MOV/XCHG/XLAT
2、堆棧操作: PUSH/POP
3、標(biāo)志操作:CLC/STC/CMC/CLD/STD/CLI/STI
4、地址傳送: LEA/LDS/LES6本節(jié)要求數(shù)據(jù)傳送是計(jì)算機(jī)中最基本、最重要的一種操作。傳送指令也是最常使用的一類指令。傳送指令把數(shù)據(jù)從一個(gè)位置傳送到另一個(gè)位置。除標(biāo)志寄存器傳送指令外,均不影響標(biāo)志位重點(diǎn)掌握:MOV/PUSH/POP特別熟悉:
XCHG/XLAT/LEA72.3.1通用數(shù)據(jù)傳送指令MOV,XCHG,XLAT8傳送指令MOV傳送指令把一個(gè)字節(jié)/字操作數(shù)從源地址傳送至目的地址MOVreg/mem,imm;立即數(shù)送寄存器或主存:MOVreg/mem/seg,reg;寄存器送(段)寄存器或主存:MOVreg/seg,mem ;主存送(段)寄存器:MOVreg/mem,seg ;段寄存器送寄存器或主存:傳送指令不是萬能的,應(yīng)避免非法傳送.9立即數(shù)傳送moval,4 ;al←4,字節(jié)傳送movdx,0ffh ;dx←00ffh,字傳送movsi,200h ;si←0200h,字傳送mov
byteptr
[si],0ah
;ds:[si]←0ah,byteptr
說明是字節(jié)操作mov
wordptr
[si+2],0bh
;ds:[si+2]←0bh,wordptr
說明是字操作
注意立即數(shù)是字節(jié)還是字,即明確指令是字節(jié)操作還是字操作。10寄存器傳送mov
ax,bxmovah,almov
ds,axmov[bx],al11存儲器傳送mov
al,[bx] ;al←ds:[bx]mov
dx,[bp] ;dx←ss:[bp]mov
es,[si] ;es←ds:[si]注意:不存在存儲器向存儲器的傳送指令12段寄存器傳送mov[si],dsmov
ax,esmov
ds,ax
注意:對段寄存器的操作有一些限制13非法傳送種種兩個(gè)操作數(shù)的類型不一致例如源操作數(shù)是字節(jié),而目的操作數(shù)是字;或相反兩個(gè)操作數(shù)不能都是存儲器傳送指令很靈活,但主存之間的直接傳送卻不允許段寄存器的操作有一些限制段寄存器屬專用寄存器,對他們的操作能力有限14兩個(gè)操作數(shù)的類型要一致絕大多數(shù)雙操作數(shù)指令(包括傳送指令),除非特別說明,目的操作數(shù)與源操作數(shù)必須類型一致,或者同為字,或者同為字節(jié),否則為非法指令。
MOVAL,050AH
;非法指令:050Ah為字,而AL為字節(jié)寄存器有明確的字節(jié)或字類型,有寄存器參與的指令其操作數(shù)類型就是寄存器的類型。對于存儲器單元與立即數(shù)同時(shí)作為操作數(shù)的情況,必須顯式指明。byteptr指示字節(jié)類型,wordptr指示字類型。15兩個(gè)操作數(shù)不能都是存儲器8086指令系統(tǒng)不允許兩個(gè)操作數(shù)都是存儲單元(除串操作指令),沒有主存至主存的數(shù)據(jù)傳送。要實(shí)現(xiàn)這種傳送,可通過寄存器間接實(shí)現(xiàn)。例:buffer1單元的數(shù)據(jù)傳送到buffer2單元
movax,buffer1 ;ax←buffer1(將buffer1內(nèi)容送ax)
movbuffer2,ax ;buffer2←ax
這里buffer1和buffer2是兩個(gè)字變量,實(shí)際表示直接尋址方式16段寄存器的操作有一些限制不允許立即數(shù)傳送給段寄存器
MOVDS,100H ;非法,立即數(shù)不能傳送段寄存器不允許直接改變CS值
MOVCS,[SI] ;不允許使用的指令不允許段寄存器之間的直接數(shù)據(jù)傳送
MOVDS,ES
;非法,不允許段寄存器間傳送17交換指令XCHG把兩個(gè)地方的數(shù)據(jù)進(jìn)行互換
XCHGreg,reg/mem ;reg←→reg/mem
可以在寄存器與寄存器之間交換數(shù)據(jù) 可以在寄存器與存儲器之間交換數(shù)據(jù)
不能在存儲器與存儲器之間交換數(shù)據(jù)18寄存器與寄存器數(shù)據(jù)交換movax,1234h ;ax=1234hmovbx,5678h ;bx=5678hxchg
ax,bx ;ax=5678h,bx=1234hxchgah,al ;ax=7856h19寄存器與存儲器數(shù)據(jù)交換xchgax,[2000h]xchgal,[2000h]20換碼指令XLAT將BX指定的緩沖區(qū)中、AL指定的位移處的一個(gè)字節(jié)數(shù)據(jù)取出賦給AL XLAT ;al←ds:[bx+al]:換碼指令執(zhí)行前:要求在主存中建立一個(gè)字節(jié)表格,內(nèi)容是要轉(zhuǎn)換成的目的代碼,表格的首地址存放于BX,AL存放相對表格首地址的位移量換碼指令執(zhí)行后:將AL寄存器的內(nèi)容轉(zhuǎn)換為目標(biāo)代碼21代碼轉(zhuǎn)換movbx,100hmoval,03hxlat
換碼指令使用了隱含尋址的方式,它沒有顯式的操作數(shù),但使用了BX和AL;
隱含尋址方式——采用默認(rèn)操作數(shù)的尋址方式。222.3.2堆棧操作指令堆棧的概念堆棧的操作:進(jìn)棧和出棧堆棧的特點(diǎn)PUSHr16/m16/seg;進(jìn)棧指令:;SP←SP-2;SS:[SP]←r16/m16/segPOPr16/m16/seg;出棧指令:;r16/m16/seg←SS:[SP];SP←SP+223什么是堆棧堆棧是一個(gè)“先進(jìn)后出”的主存區(qū)域,位于堆棧段中,使用SS段寄存器記錄其段地址。堆棧只有一個(gè)出口,即當(dāng)前棧頂。棧頂是地址較小的一端(低端),它用堆棧指針寄存器SP指定。24堆棧的操作堆棧只有兩種基本操作:進(jìn)棧和出棧,用戶操作堆棧對應(yīng)兩條指令PUSH和POP。進(jìn)棧指令PUSH:進(jìn)棧指令先使堆棧指針SP減2,然后把一個(gè)字操作數(shù)存入堆棧頂部出棧指令POP:
出棧指令把棧頂?shù)囊粋€(gè)字傳送至指定的目的操作數(shù),然后堆棧指針SP加225堆棧的實(shí)例和圖例movax,7812Hpushaxpopax26堆棧的特點(diǎn)堆棧操作(進(jìn)棧/出棧)的單位是字(雙字節(jié))數(shù)據(jù)從壓棧和彈出時(shí),都是“低對低,高對高”堆棧操作遵循先進(jìn)后出原則可用存儲器尋址隨機(jī)存取堆棧中的數(shù)據(jù)堆棧常用來臨時(shí)存放數(shù)據(jù)、傳遞參數(shù)、保存和恢復(fù)寄存器27現(xiàn)場的保護(hù)和恢復(fù)pushax ;進(jìn)入子程序后pushbxpushds...popds ;返回主程序前popbxpopax282.3.3標(biāo)志操作指令標(biāo)志操作指令能夠讀寫標(biāo)志寄存器的內(nèi)容29標(biāo)志低字節(jié)出/入AH指令LAHF ;AH←FLAGS的低字節(jié)(出標(biāo)志)LAHF指令將標(biāo)志寄存器的低字節(jié)送寄存器AHSF/ZF/AF/PF/CF狀態(tài)標(biāo)志位分別送入AH的第7/6/4/2/0位,而AH的第5/3/1位任意SAHF
;FLAGS的低字節(jié)←AHSAHF將AH寄存器內(nèi)容送FLAGS的低字節(jié)用AH的第7/6/4/2/0位相應(yīng)設(shè)置SF/ZF/AF/PF/CF標(biāo)志30標(biāo)志寄存器出/入堆棧指令PUSHF;SP←SP-2;SS:[SP]←FLAGSPUSHF指令將標(biāo)志寄存器的內(nèi)容壓入堆棧,同時(shí)棧頂指針SP減2POPF;FLAGS←SS:[SP];SP←SP+2POPF指令將棧頂字單元內(nèi)容送標(biāo)志寄存器,同時(shí)棧頂指針SP加2312.3.4地址傳送指令LEA,LDS,LES32有效地址傳送指令LEA將存儲器操作數(shù)的有效地址傳送至指定寄存器中
LEAr16,mem ;r16←mem的有效地址
例2.13:有效地址的獲取
movbx,0400h
movsi,3ch
lea
bx,[bx+si+0f62h] ;BX=139EH
BX得到的是主存單元的有效地址EA(偏移地址)不是該單元的內(nèi)容。33指針傳送指令LDSr16,mem;r16←mem,;DS←mem+2LDS指令將主存中mem指定的字送至r16,并將mem的下一字送DS寄存器LESr16,mem;r16←mem,;ES←mem+2LES指令將主存中mem指定的字送至r16,并將mem的下一字送ES寄存器34例:地址指針的傳送movwordptr[3060h],0100hmovwordptr[3062h],1450hldssi,[3060h] ;ds=1450h,si=0100hlesdi,[3060h] ;es=1450h,di=0100h ;mem指定主存的連續(xù)4個(gè)字節(jié)作為邏輯地址(32位的地址指針),送入DS:reg或ES:reg。35輸入輸出指令I(lǐng)NAL/AX,i8/DX;AL/AX←I/O端口輸入IN指令將外設(shè)數(shù)據(jù)傳送給CPU內(nèi)的AL/AXOUTi8/DX,AL/AX;I/O端口←AL/AX輸出OUT指令將CPU內(nèi)的AL/AX數(shù)據(jù)傳送給外設(shè)8086通過輸入輸出指令與外設(shè)進(jìn)行數(shù)據(jù)傳送362.4算術(shù)運(yùn)算類指令實(shí)現(xiàn)二進(jìn)制/BCD碼數(shù)據(jù)的四則運(yùn)算1、加法運(yùn)算:ADD/ADC/INC2、減法運(yùn)算:SUB/SBB/DEC/NEG/CMP3、乘法運(yùn)算:MUL/IMUL4、除法運(yùn)算:DIV/IDIV5、符號擴(kuò)展:CBW/CWD6、十進(jìn)制調(diào)整:DAA/DAS/AAA/AAS/AAM/AAD37本節(jié)要求四則運(yùn)算是計(jì)算機(jī)經(jīng)常進(jìn)行的一種操作。算術(shù)運(yùn)算指令也是經(jīng)常使用的一類指令。請注意算術(shù)運(yùn)算指令對標(biāo)志的影響重點(diǎn)掌握:ADD/ADC/SUB/SBB/INC/DEC/CMP比較熟悉:
NEG/MUL/IMUL/DIV/IDIV一般了解:CBW/CWD認(rèn)真理解:DAA/DAS/AAA/AAS/AAM/AAD38加法指令A(yù)DDADD指令將源與目的操作數(shù)相加,結(jié)果送到目的操作數(shù)。按狀態(tài)標(biāo)志的定義相應(yīng)設(shè)置0或1。 ADDreg,imm/reg/mem;reg←reg+imm/reg/mem ADDmem,imm/reg ;mem←mem+imm/regADD指令的相關(guān)指令:ADC
SUB加法實(shí)例39例:加法運(yùn)算movax,7348h ;ax=7348haddal,27h ;ax=736fh
OF=0、SF=0、ZF=0、PF=1、CF=0addax,3fffh ;ax=0b36eh OF=1、SF=1、ZF=0、PF=0、CF=040帶進(jìn)位加法指令A(yù)DCADC指令將源與目的操作數(shù)相加,再加上當(dāng)前進(jìn)位CF標(biāo)志,結(jié)果送到目的操作數(shù)。按狀態(tài)標(biāo)志的定義相應(yīng)設(shè)置0或1。 ADCreg,imm/reg/mem;reg←reg+imm/reg/mem+CF ADCmem,imm/reg ;mem←mem+imm/reg+CFADC指令主要與ADD配合,實(shí)現(xiàn)多精度加法運(yùn)算。ADC指令的相關(guān)指令:ADD
SBB41例:無符號雙字加法運(yùn)算movax,4652h ;ax=4652haddax,0f0f0h ;ax=3742h,CF=1movdx,0234h ;dx=0234hadcdx,0f0f0h ;dx=f325h,CF=0上述程序完成: ;DX.AX=02344652H ;+ F0F0F0F0H ;= F3253742H42增量指令I(lǐng)NCINC指令對操作數(shù)加1(增量)。INC指令不影響進(jìn)位CF標(biāo)志,按定義設(shè)置其他狀態(tài)標(biāo)志。
INCreg/mem
;reg/mem←reg/mem+1INC指令和DEC指令都是單操作數(shù)指令。主要用于對計(jì)數(shù)器和地址指針的調(diào)整。
incbx incbyteptr[bx]相關(guān)指令:DEC43減法指令SUBSUB指令將目的操作數(shù)減去源操作數(shù),結(jié)果送到目的操作數(shù)。按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志。
SUBreg,imm/reg/mem;reg←reg-imm/reg/mem SUBmem,imm/reg ;mem←mem-imm/regSUB指令的相關(guān)指令:SBB
ADD44例:減法運(yùn)算movax,0b36eh ;ax=b36ehsubah,0f0h ;ax=c36eh OF=0、SF=1、ZF=0、PF=1、CF=1movwordptr[200h],0ef00h ;[200h]=ef00hsub[200h],ax ;[200h]=2b92h OF=0、SF=0、ZF=0、PF=0、CF=0subsi,si ;si=0 OF=0、SF=0、ZF=1、PF=1、CF=045帶借位減法指令SBBSBB指令將目的操作數(shù)減去源操作數(shù),再減去借位CF(進(jìn)位),結(jié)果送到目的操作數(shù)。按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志。
SBBreg,imm/reg/mem ;reg←reg-imm/reg/mem-CF SBBmem,imm/reg ;mem←mem-imm/reg-CFSBB指令主要與SUB配合,實(shí)現(xiàn)多精度減法運(yùn)算。SBB指令的相關(guān)指令:SUB
ADC46例:無符號雙字減法運(yùn)算movax,4652h ;ax=4652hsubax,0f0f0h ;ax=5562h,CF=1movdx,0234h ;dx=0234hsbbdx,0f0f0h ;dx=1143h,CF=1上述程序完成:
;DX.AX=02344652H ;- F0F0F0F0H ;= 11435562H47減量指令DECINC指令對操作數(shù)減1(減量)。DEC指令不影響進(jìn)位CF標(biāo)志,按定義設(shè)置其他狀態(tài)標(biāo)志。
DECreg/mem ;reg/mem←reg/mem-1INC指令和DEC指令都是單操作數(shù)指令。主要用于對計(jì)數(shù)器和地址指針的調(diào)整。
dec
si
decbyteptr[si]相關(guān)指令:INC48求補(bǔ)指令NEGNEG指令對操作數(shù)執(zhí)行求補(bǔ)運(yùn)算:用零減去操作數(shù),然后結(jié)果返回操作數(shù)。求補(bǔ)運(yùn)算也可以表達(dá)成:將操作數(shù)按位取反后加1。NEG指令對標(biāo)志的影響與用零作減法的SUB指令一樣
NEGreg/mem
;reg/mem←0-reg/mem易混淆指令:NOT49例:求補(bǔ)運(yùn)算movax,0ff64hnegal
;ax=ff9ch OF=0、SF=1、ZF=0、PF=1、CF=1subal,9dh
;ax=ffffh OF=0、SF=1、ZF=0、PF=1、CF=1negax
;ax=0001h OF=0、SF=0、ZF=0、PF=0、CF=1decal
;ax=0000h OF=0、SF=0、ZF=1、PF=1、CF=1negax
;ax=0000h OF=0、SF=0、ZF=1、PF=1、CF=050比較指令CMPCMP指令將目的操作數(shù)減去源操作數(shù),按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志。CMP指令執(zhí)行的功能與SUB指令,但結(jié)果不回送目的操作數(shù)。
CMPreg,imm/reg/mem
;reg-imm/reg/mem
CMPmem,imm/reg
;mem-imm/reg相關(guān)指令:SUB類似指令:TEST51例:比較AL是否大于100cmpal,100 ;al-100jbbelow ;al<100,跳轉(zhuǎn)到below執(zhí)行subal,100 ;al≥100,al←al-100incah ;ah←ah+1below: ...
執(zhí)行比較指令之后,可以根據(jù)標(biāo)志判斷兩個(gè)數(shù)是否相等、大小關(guān)系等。所以,CMP指令后面常跟條件轉(zhuǎn)移指令,根據(jù)比較結(jié)果不同產(chǎn)生不同的分支。52乘法指令MULr8/m8;無符號字節(jié)乘法;AX←AL×r8/m8MULr16/m16;無符號字乘法;DX.AX←AX×r16/m16IMULr8/m8;有符號字節(jié)乘法;AX←AL×r8/m8IMULr16/m16;有符號字乘法;DX.AX←AX×r16/m1653乘法指令的功能乘法指令分無符號和有符號乘法指令:MUL和IMUL乘法指令的一個(gè)源操作數(shù)顯式給出,另一個(gè)操作數(shù)隱含使用AL/AX,目標(biāo)操作數(shù)為AX/DX.AX。字節(jié)量相乘:AL與r8/m8相乘,得到16位的結(jié)果,存入AX中;字量相乘:AX與r16/m16相乘,得到32位的結(jié)果,其高字存入DX,低字存入AX中。乘法指令利用OF和CF判斷乘積的高一半是否具有有效數(shù)值。54乘法指令對標(biāo)志的影響乘法指令如下影響OF和CF標(biāo)志:MUL
指令——若乘積的高一半(AH或DX)為0,則OF=CF=0;否則OF=CF=1。IMUL
指令——若乘積的高一半是低一半的符號擴(kuò)展,則OF=CF=0;否則均為1。乘法指令對其他狀態(tài)標(biāo)志沒有定義:指令執(zhí)行后這些標(biāo)志是任意的、不可預(yù)測(就是誰也不知道是0還是1)。
對標(biāo)志沒有影響是指令的執(zhí)行不改變標(biāo)志的狀態(tài)。55無符號和有符號數(shù)的乘法運(yùn)算(例2.21)moval,0b4h;al=b4h=180
movbl,11h;bl=11h=17mul
bl;ax=Obf4h=3060,;OF=CF=1;AX高8位不為0moval,0b4h
;al=b4h=-76movbl,11h;bl=11h=17imul
bl;ax=faf4h=-1292,;OF=CF=1;AX高8位含有效數(shù)字操作56除法指令DIVr8/m8 ;無符號字節(jié)除法:AX÷r8/m8 AL←商,Ah←余DIVr16/m16
;無符號字除法:DX.AX÷r16/m16
AX←商,DX←余IDIVr8/m8
;有符號字節(jié)除法:AX÷r8/m8 AL←商,Ah←余IDIVr16/m16
;有符號字除法:DX.AX÷r16/m16
AX←商,DX←余57除法指令的功能除法指令分無符號和有符號除法指令:DIV和IDIV除法指令的除數(shù)顯式給出(隱含使用一個(gè)操作數(shù)AX和DX作為被除數(shù))。字節(jié)量除法:AX除以r8/m8,8位商存入AL,8位余數(shù)存入AH;字量除法:DX.AX除以r16/m16,16位商存入AX,16位余數(shù)存入DX。除法指令對標(biāo)志沒有定義。除法指令會產(chǎn)生結(jié)果溢出58除法錯(cuò)中斷當(dāng)被除數(shù)遠(yuǎn)大于除數(shù)時(shí),所得的商就有可能超出它所能表達(dá)的范圍。如果存放商的寄存器AL/AX不能表達(dá),便產(chǎn)生溢出,8086CPU中就產(chǎn)生編號為0的內(nèi)部中斷——除法錯(cuò)中斷。對DIV指令,除數(shù)為0,或者在字節(jié)除時(shí)商超過8位,或者在字除時(shí)商超過16位,則發(fā)生除法溢出。 對IDIV指令,除數(shù)為0,或者在字節(jié)除時(shí)商不在-128~127范圍內(nèi),或者在字除時(shí)商不在-32768~32767范圍內(nèi),則發(fā)生除法溢出。59無符號和有符號數(shù)的除法運(yùn)算(例2.22)movax,0400h;ax=400h=1024movbl,0b4h;bl=b4h=180divbl;商al=05h=5;余ah=7ch=124movax,0400h;ax=400h=1024movbl,0b4h;bl=b4h=-76idiv
bl;商al=f3h=-13;余ah=24h=36操作60符號擴(kuò)展指令CBW
;AL的符號擴(kuò)展至AH ;如AL的最高有效位是0,則AH=00;AL的最高有效位為1,則AH=FFH。AL不變。CWD
;AX的符號擴(kuò)展至DX ;如AX的最高有效位是0,則DX=00;AX的最高有效位為1,則DX=FFH。AX不變。什么是符號擴(kuò)展符號擴(kuò)展指令常用于獲得倍長的數(shù)據(jù),如被除數(shù)符號擴(kuò)展指令不影響標(biāo)志位實(shí)例介紹61符號擴(kuò)展的概念符號擴(kuò)展是指用一個(gè)操作數(shù)的符號位(即最高位)形成另一個(gè)操作數(shù),后一個(gè)操作數(shù)的各位是全0(正數(shù))或全1(負(fù)數(shù))。符號擴(kuò)展不改變數(shù)據(jù)大小。例如:對于數(shù)據(jù)64H(表示數(shù)據(jù)100),其最高位D7為0,符號擴(kuò)展后高8位都是0,成為0064H(仍表示數(shù)據(jù)100)。對于數(shù)據(jù)ff00H(表示有符號數(shù)-256),其最高位D15為1,符號擴(kuò)展后高16位都是1,成為ffffff00H(仍表示有符號數(shù)-256)。62例2.23:符號擴(kuò)展moval,80h ;al=80hcbw ;ax=ff80haddal,255 ;al=7fhcbw ;ax=007fh63例2.24:有符號數(shù)除法AX÷BXcwdidiv
bx本例中,利用符號擴(kuò)展指令得到了除法指令所需要的倍長于除數(shù)的被除數(shù)DX.AX。
對無符號數(shù)除法應(yīng)該采用直接使高8位或高16位清0的方法,獲得倍長的被除數(shù)。
64十進(jìn)制調(diào)整指令十進(jìn)制數(shù)調(diào)整指令對BCD碼運(yùn)算的結(jié)果進(jìn)行十進(jìn)制調(diào)整,以得到正確的BCD碼運(yùn)算結(jié)果。
BCD碼運(yùn)算分壓縮和非壓縮兩種,它們的調(diào)整方法不同。壓縮BCD碼:一個(gè)字節(jié)中容納兩個(gè)BCD碼,其范圍為:00H~99H。非壓縮BCD碼: 一個(gè)字節(jié)中僅容納1個(gè)BCD碼,其范圍為:00H~09H。65BCD碼一位十進(jìn)制數(shù)用4位二進(jìn)制編碼來表示:二進(jìn)制編碼的十進(jìn)制數(shù)(BCD:BinaryCodedDecimal)
常用的是BCD碼是8421BCD碼,它用4位二進(jìn)制編碼中的0000~1001來表示“0”~“9”這10個(gè)數(shù)碼。8086支持壓縮BCD碼和非壓縮BCD碼的調(diào)整運(yùn)算。真值8(1位十進(jìn)制)64(2位十進(jìn)制) 二進(jìn)制編碼08H
40H
壓縮BCD碼08H
64H
非壓縮BCD碼08H
0604H66壓縮BCD碼加/減調(diào)整指令(ADDAL,i8/r8/m8)(ADCAL,i8/r8/m8) DAA
;AL←將AL的加和調(diào)整為壓縮BCD碼(SUBAL,i8/r8/m8)(SBBAL,i8/r8/m8) DAS
;AL←將AL的減差調(diào)整為壓縮BCD碼使用DAA或DAS指令前,應(yīng)先執(zhí)行以AL為目的操作數(shù)的加法或減法指令DAA和DAS指令對OF標(biāo)志無定義,其他標(biāo)志受影響,例如CF反映壓縮BCD碼相加或減的進(jìn)位或借位狀態(tài)請看實(shí)例67壓縮BCD碼的加減運(yùn)算實(shí)現(xiàn)壓縮BCD碼加法:68+28=96
moval,68h ;al=68h,壓縮BCD碼表示真值68movbl,28h ;bl=28h,壓縮BCD碼表示真值28addal,bl ;二進(jìn)制加法:al=68h+28h=90hdaa ;十進(jìn)制調(diào)整:al=96h
實(shí)現(xiàn)壓縮BCD碼減法:68-28=40moval,68h ;al=68h,壓縮BCD碼表示真值68movbl,28h ;bl=28h,壓縮BCD碼表示真值28subal,bl ;二進(jìn)制減法:al=68h-28h=40hdas ;十進(jìn)制調(diào)整:al=40h操作68非壓縮BCD碼加、減調(diào)整指令(ADDAL,i8/r8/m8)(ADCAL,i8/r8/m8) AAA
;AL←將AL的加和調(diào)整為非壓縮BCD碼 ;AH←AH+調(diào)整的進(jìn)位(SUBAL,i8/r8/m8)(SBBAL,i8/r8/m8) AAS
;AL←將AL的減差調(diào)整為非壓縮BCD碼 ;AH←AH-調(diào)整的借位使用AAA或AAS指令前,應(yīng)先執(zhí)行以AL為目的操作數(shù)的加法或減法指令A(yù)AA和AAS指令在調(diào)整中產(chǎn)生了進(jìn)位或借位,則AH要加上進(jìn)位或減去借位,同時(shí)CF=AF=1,否則CF=AF=0;他們對其他標(biāo)志無定義請看實(shí)例69非壓縮BCD碼的加減運(yùn)算實(shí)現(xiàn)非壓縮BCD碼加法:68+9=77movax,0608h ;ax=0608h,非壓縮BCD碼表示真值68movbl,09h ;bl=09h,非壓縮BCD碼表示真值9addal,bl ;二進(jìn)制加法:al=08h+09h=11haaa ;十進(jìn)制調(diào)整:ax=0707h實(shí)現(xiàn)非壓縮BCD碼減法:68-09=59movax,0608h ;ax=0608h,非壓縮BCD碼表示真值68movbl,09h ;bl=09h,非壓縮BCD碼表示真值9subal,bl ;二進(jìn)制減法:al=08h-09h=ffhaas ;十進(jìn)制調(diào)整:ax=0509h操作70非壓縮BCD碼乘、除調(diào)整指令(MULr8/m8) AAM
;AX←將AX的積調(diào)整為非壓縮BCD碼(DIVr8/m8) AAD
;AX←將AX中的商調(diào)整為非壓縮BCD碼AAM指令跟在字節(jié)乘MUL之后,將乘積調(diào)整為非壓縮BCD碼AAD指令跟在字節(jié)除DIV之前,先將非壓縮BCD碼的被除數(shù)調(diào)整為二進(jìn)制數(shù)AAM和AAD指令根據(jù)結(jié)果設(shè)置SF、ZF和PF,但對OF、CF和AF無定義請看實(shí)例71非壓縮BCD碼的乘除運(yùn)算實(shí)現(xiàn)非壓縮BCD碼乘法:8×9=72movax,0608h
;ax=0608h,非壓縮BCD碼表示真值68movbl,09h
;bl=09h,非壓縮BCD碼表示真值9mul
bl
;二進(jìn)制乘法:al=08h×09h=0048haam
;十進(jìn)制調(diào)整:ax=0702h實(shí)現(xiàn)非壓縮BCD碼除法:68÷9=7(余5)movax,0608h ;ax=0608h,非壓縮BCD碼表示真值68movbl,09h ;bl=09h,非壓縮BCD碼表示真值9aad ;二進(jìn)制擴(kuò)展:ax=68=0044hdivbl ;除法運(yùn)算:商al=07h,余數(shù)ah=05h操作722.4節(jié)總結(jié)四則運(yùn)算是計(jì)算機(jī)經(jīng)常進(jìn)行的一種操作。算術(shù)運(yùn)算指令也是經(jīng)常使用的一類指令。這一節(jié)要重點(diǎn)掌握:
ADD/ADCSUB/SBBINC/DECCMP8086除直接支持二進(jìn)制數(shù)的算術(shù)運(yùn)算;還提供對BCD碼運(yùn)算的調(diào)整指令,實(shí)現(xiàn)了間接的十進(jìn)制算術(shù)運(yùn)算操作。請看表2.3,進(jìn)行簡單的綜合。73表2.38086支持的4種數(shù)據(jù)類型的算術(shù)運(yùn)算742.5位操作類指令以二進(jìn)制位為基本單位進(jìn)行數(shù)據(jù)的操作1、邏輯運(yùn)算: AND
OR
XOR
NOT
TEST
2、移位: SHL
SHR
SAR
3、循環(huán)移位:ROL
ROR
RCL
RCR常用指令,應(yīng)該特別熟悉;同時(shí),注意這些指令對標(biāo)志位的影響。75邏輯與指令A(yù)ND邏輯與運(yùn)算:與1相“與”結(jié)果不變,與0相“與”結(jié)果為0;結(jié)果送目的操作數(shù)。
ANDreg,imm/reg/mem ;reg←reg∧imm/reg/mem
ANDmem,imm/reg ;mem←mem∧imm/regAND指令設(shè)置CF=OF=0,根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對AF未定義。屏蔽作用——對指定位置076邏輯或指令OR邏輯或運(yùn)算:與0相“或”結(jié)果不變,與1相“或”結(jié)果為1;結(jié)果送目的操作數(shù)。
OR
reg,imm/reg/mem ;reg←reg∨imm/reg/mem
OR
mem,imm/reg ;mem←mem∨imm/regOR指令設(shè)置CF=OF=0,根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對AF未定義。對指定位置177邏輯異或指令XOR邏輯異或運(yùn)算:與0相“異或”結(jié)果不變,與1相“異或”的結(jié)果取反。結(jié)果送目的操作數(shù)。
XORreg,imm/reg/mem
;reg←reg⊕imm/reg/mem XORmem,imm/reg
;mem←mem⊕imm/regXOR指令設(shè)置CF=OF=0,根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對AF未定義。對指定位取反78邏輯非指令NOT邏輯非運(yùn)算:按位取反。原來是“0”的位變?yōu)椤?”;原來是“1”的位變?yōu)椤?”。
NOTreg/mem
;reg/mem←~reg/mem單操作數(shù)指令邏輯非指令NOT易與NEG指令混淆
79邏輯運(yùn)算moval,45handal,31h;邏輯與al=01hmoval,45horal,31h;邏輯或al=75hmoval,45hxoral,31h;邏輯異或al=74hmoval,45hnotal;邏輯非al=bah45h0100010131h0011000180邏輯指令的應(yīng)用AND指令可用于復(fù)位某些位(同0相與),不影響其他位
andbl,11110110B ;將BL中D3和D0位清0,其他位不變OR指令可用于置位某些位(同1相或),不影響其他位
or
bl,00001001B
;將BL中D3和D0位置1,其他位不變XOR指令可用于求反某些位(同1相異或),不影響其他位
xorbl,00001001B
;將BL中D3和D0位求反,其他位不變81測試指令TEST對兩個(gè)操作數(shù)執(zhí)行邏輯與運(yùn)算:只有相“與”的兩位都是1,結(jié)果才是1;否則,“與”的結(jié)果為0。測試指令進(jìn)行邏輯與的結(jié)果不回送目的操作數(shù)。 TESTreg,imm/reg/mem
;reg∧imm/reg/mem TESTmem,imm/reg
;mem∧imm/regTEST指令設(shè)置CF=OF=0,根據(jù)結(jié)果設(shè)置SF、ZF和PF狀態(tài),而對AF未定義。82例2.30:測試某些位為0或1 testal,01h ;測試AL的最低位D0
jnzthere ;標(biāo)志ZF=0,即D0=1
;則程序轉(zhuǎn)移到there ... ;否則ZF=1,即D0=0,順序執(zhí)行there:...TEST指令通常用于檢測一些條件是否滿足,但又不希望改變原操作數(shù)的情況。這條指令之后,一般都是條件轉(zhuǎn)移指令,目的是利用測試條件轉(zhuǎn)向不同的程序段。83移位指令(shift)移位指令將操作數(shù)移動一位或多位,分成邏輯移位和算術(shù)移位,分別具有左移或右移操作
SHLreg/mem,1/CL ;邏輯左移,LSB補(bǔ)0,MSB進(jìn)CF SHRreg/mem,1/CL ;邏輯右移,LSB進(jìn)CF,MSB補(bǔ)0
SALreg/mem,1/CL ;算術(shù)左移,LSB補(bǔ)0,MSB進(jìn)CF SARreg/mem,1/CL ;算術(shù)右移,LSB進(jìn)CF,MSB不變算術(shù)左移SAL與邏輯左移SHL實(shí)為同一條指令
移位指令的功能見圖2.7
reg/mem是被移位的操作數(shù) 1/CL表示移位次數(shù)
移位指令對標(biāo)志的影響
移位指令的實(shí)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球農(nóng)業(yè)張力計(jì)行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球便攜式激光測風(fēng)雷達(dá)行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球軍用聚脲防護(hù)涂料行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球室溫固化環(huán)氧膠行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國戰(zhàn)術(shù)靶標(biāo)系統(tǒng)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 硅礦開采合同書
- 股票期權(quán)協(xié)議書合同協(xié)議
- 個(gè)人房屋買賣合同協(xié)議書模板
- 鐵礦設(shè)備買賣合同
- 2025隧道施工合同
- 中職安全管理方案
- 百詞斬托福詞匯excel版本
- 高考寫作指導(dǎo)常見議論文論證方法知識梳理與舉例解析課件27張
- (完整word版)高中英語3500詞匯表
- 玻璃反應(yīng)釜安全操作及保養(yǎng)規(guī)程
- 高中英語新課標(biāo)詞匯表(附詞組)
- 2023年心理咨詢師之心理咨詢師基礎(chǔ)知識考試題庫附完整答案【有一套】
- 證券公司信用風(fēng)險(xiǎn)和操作風(fēng)險(xiǎn)管理理論和實(shí)踐中金公司
- 一級建造師繼續(xù)教育最全題庫及答案(新)
- 2022年高考湖南卷生物試題(含答案解析)
- GB/T 20909-2007鋼門窗
評論
0/150
提交評論