




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第2章8086/8088指令系統(tǒng)本章內(nèi)容8086的指令格式與編碼18086的尋址方式28086的指令系統(tǒng)380X86的擴充指令42023/1/141.8086的指令格式與編碼機器指令:指令的二進制代碼形式。如:89D8H匯編指令:助記符形式的指令。如:MOVAX,BX語法結(jié)構(gòu)符合人類語言的共同特點—動作+對象指令操作碼→動作:怎么做?指令操作數(shù)→對象:做什么?2023/1/141.8086的指令格式與編碼操作碼助記符:與動作一一對應(yīng)例: MOVAX,BX目/源操作數(shù):可能有多種組合2023/1/141.8086的指令格式與編碼匯編語言指令操作碼:由CPU設(shè)計人員定義。每一種操作唯一對應(yīng)一個操作碼。操作碼用來規(guī)定計算機應(yīng)該做什么樣的操作:例:加法操作助記符ADD;數(shù)據(jù)傳送操作助記符MOV;比較操作助記符CMP操作數(shù):可由編程人員采用不同方式給出。指令格式:指令中對操作碼、操作數(shù)的編碼方式。2023/1/141.8086的指令格式與編碼操作數(shù)1)8086指令中操作數(shù)的個數(shù)可以有以下幾種情況:無操作數(shù)指令,例:等待指令WAIT單操作數(shù)指令,例:加1指令I(lǐng)NCAL雙操作數(shù)指令,例:減法指令SUBAL,BL2023/1/141.8086的指令格式與編碼2)8086指令中根據(jù)不同的作用分以下兩類:源操作數(shù):后者(BL)目的操作數(shù):前者(AL)例:數(shù)據(jù)傳送指令MOVAL,BL一些特殊情況,例:壓棧指令PUSHAX;省略(隱含)目的操作數(shù)加1指令I(lǐng)NCAL;源和目的操作數(shù)一樣空指令NOP
;沒有操作數(shù) 2023/1/141.8086的指令格式與編碼3)操作數(shù)存放地點,可以有以下幾種:立即數(shù):操作數(shù)直接包含在指令中。 例:MOVAL,50H寄存器操作數(shù):操作數(shù)存放在寄存器中。 例:INCAL內(nèi)存操作數(shù):操作數(shù)存放在內(nèi)存單元中。 例:MOVAL,[2000H]
I/O操作數(shù):操作數(shù)來自I/O端口。例:INAL,28H
隱含操作數(shù):操作數(shù)固定。例:PUSHAX2023/1/141.8086的指令格式與編碼指令的書寫格式
操作碼[[操作數(shù)1],[操作數(shù)2]](操作碼:必備;操作數(shù):可以是1個、2個或沒有,可以是8位或16位)指令的編碼格式采用變長編碼格式,屬于CISC。便于書寫可讀性強由機器識別和執(zhí)行低端
高端指令前綴操作碼字段尋址方式字段操作數(shù)字段1字節(jié)1字節(jié)1字節(jié)1~4字節(jié)2023/1/14本章內(nèi)容8086的指令格式與編碼18086的尋址方式28086的指令系統(tǒng)380X86的擴充指令42023/1/142.8086的尋址方式尋址方式:尋找操作數(shù)(地址)的方式2023/1/142.8086的尋址方式2.2.1立即尋址2.2.2寄存器尋址2.2.3直接尋址2.2.4寄存器間接尋址2.2.5變址尋址2.2.6基址尋址2.2.7基址變址尋址2.2.8尋址方式中的操作數(shù)2023/1/142.8086的尋址方式非存儲器尋址方式存儲器尋址方式其它方式立即數(shù)尋址寄存器尋址(寄存器直接尋址)直接尋址(絕對尋址)間接尋址(寄存器間接尋址)基址尋址變址尋址基址+變址尋址隱含尋址(固定尋址)I/O尋址直接尋址(長格式尋址)間接尋址(短格式尋址)2023/1/142.8086的尋址方式2.2尋址方式(P48)
非存儲器尋址方式2.2.1立即數(shù)尋址
操作數(shù)直接放于指令中,跟在操作碼之后。操作數(shù)以8位或16位常數(shù)的形式出現(xiàn)。 例:MOVAL,29H ;源操作數(shù)立即數(shù)尋址方式常用于給寄存器賦初值,且僅用于源操作數(shù)。
【注意】目標操作時通常是寄存器;源操作數(shù)的位數(shù)必須與目標操作數(shù)寄存器匹配;段寄存器不能為目標操作數(shù);2023/1/142.2.2寄存器(直接)尋址操作數(shù)放在寄存器中。操作數(shù)以8位或16位寄存器名出現(xiàn)。 例:MOVAL,BL ;源操作數(shù)和目的操作數(shù)寄存器尋址方式可以縮短指令長度,提高指令執(zhí)行速度,使用非常頻繁?!咀⒁狻吭床僮鲾?shù)的位數(shù)必須與目標操作數(shù)寄存器匹配;2023/1/142.8086的尋址方式存儲器尋址方式直接尋址(絕對尋址)間接尋址(寄存器間接尋址)
基址尋址
變址尋址
基址加變址尋址
在這類方式中,操作對象總是存放在某存儲單元,計算機將根據(jù)指令中的操作數(shù)字段計算出存儲單元地址。
注意這里均用方括號表示取地址所在的內(nèi)容2023/1/142.8086的尋址方式2.2.3直接尋址
操作數(shù)在內(nèi)存單元中,而指令中給出的是操作數(shù)的有效地址EA(操作對象所在單元的段內(nèi)偏移量)。指令中直接給出的8位或16位數(shù)值(用方括號括?。┘词怯行У刂稥A,即:EA=指令給出的數(shù)值。一般默認在數(shù)據(jù)段DS尋址。指令中固定給出的內(nèi)存地址不可改變,靈活性較差。例:MOVAL,[1000H]
;源操作數(shù)EA=1000H,物理地址=(DS)*16+EAMOVES:[20H],AL
;目的操作數(shù)EA=20H,物理地址=(ES)*16+EA注: MOVAX,1000H
;源操作數(shù)=1000H,是立即數(shù)尋址2023/1/142.8086的尋址方式直接尋址過程示意圖DS(默認段)值0000ES值0000SS值0000CS值0000
Bit19430+)0016H:000000000001011020位物理地址……××××MemoryMOVAX,[0016H]AHAL2023/1/142.8086的尋址方式存儲器尋址中的段超越前綴概念:從DS段外的其它段中尋找操作數(shù)MOVAX,[2000H]
MOVAX,DS:[2000H]MOVAX,SS:[2000H]MOVAX,ES:[2000H]MOVAX,CS:[2000H]
注:給出段符時,確定了操作數(shù)的段屬性注:省略段符時,隱含為DS段2023/1/142.2.4寄存器間接尋址----操作數(shù)包含EA的寄存器特點:允許EA的寄存器:SI,DI,BX,BP如果這四個寄存器中存放了EA,指令中必須用方括號括住寄存器間接尋址允許段超越例DS=5000H,SI-1230HMOVBX,[SI]例SS=1000H,BP=3000H,AX=789AHMOV[BP],AX2023/1/142.8086的尋址方式間接尋址特點
指令中用寄存器和可選的8位或16位位移量給出操作對象所在的段內(nèi)偏移量,而不是操作對象本 身,即:EA=寄存器的值+位移量??梢杂糜陂g接尋址的寄存器只有BX、BP、SI、DI
四個,其中僅當使用BP時默認在堆棧段SS尋址,使用BX、SI、DI時默認在數(shù)據(jù)段DS尋址。位移量也可以用符號地址表示,可以寫在寄存器名前,也可寫在寄存器名后,甚至可以寫在方括號內(nèi)。間接尋址方式使用非常靈活,可用于對一維或二維數(shù)組類數(shù)據(jù)的尋址。2023/1/142.2.5變址尋址----直接尋址和寄存器間接尋址的組合特點:變址寄存器:SI或DI使用SI時,EA=SI+disp,DS:EA使用DI時,EA=DI+disp,DS:EA變址尋址允許段超越MOVBX,[SI][1300H]MOVBX,[SI]1300HMOVBX,1300H[SI]MOVBX,[SI]+[1300H]2023/1/142.2.6基址尋址----與變址尋址相似,但使用寄存器BX或BP特點:能使用寄存器:BX或BP使用BX時,EA=BX+disp,DS:EA使用BP時,EA=BP+disp,SS:EA變址尋址允許段超越MOVAX,[BX][1300H]MOVDX,[BP][1300H]2023/1/142.2.7基址變址尋址----基址尋址與變址尋址的結(jié)合特點:使用一個基址寄存器(BX或BP)和一個變址寄存器(SI或DI)EA=BX或BP+SI或DI+disp如果指令使用了BX,段地址則是DS;指令使用BP,則段地址是SS不允許BX和BP組合在一起不允許SI和DI組合在一起MOVAX,[BX][1300H][SI]MOVDX,[BP][1300H][DI]2023/1/14其他尋址方式:固定尋址
固定尋址方式也稱為隱含尋址方式,操作對象(或其地址)并不在指令中出現(xiàn),而隱含為某一固定內(nèi)容。例:PUSHF
源操作數(shù)為標志寄存器目的操作數(shù)為SS:SP所指示的1字堆??臻g
MOVSB
源操作數(shù)為DS:SI所指字節(jié)單元 目的操作數(shù)為ES:DI所指字節(jié)單元2023/1/14其他尋址方式:端口尋址直接(長格式)尋址:地址以常數(shù)形式直接出現(xiàn)在指令中,可尋址的端口地址范圍為00H~0FFH,共256個字節(jié)端口。例:IN AX,20H ;端口地址20HOUT204,AL ;端口地址204(0CCH)間接(短格式)尋址:地址存放在寄存器DX中。規(guī)定端口地址大于0FFH
時必須使用間接尋址方式。當然,端口地址在0FFH以內(nèi)時也可用間接尋址,即可尋址空間為0000H~0FFFFH,共64K個字節(jié)端口。例:MOVDX,125INAL,DX
;必須使用間接尋址
MOVDX,50H OUTDX,AL ;也可用直接尋址2023/1/142.8086的尋址方式各種尋址方式下段寄存器的使用規(guī)則對指令尋址直接尋址使用BX、SI、DI的間接尋址使用BP的間接尋址默認段寄存器可加的段超越前綴固定搭配的寄存器DSDSSSES:SS:CS:ES:SS:CS:DS:ES:CS:—BX、SI、DIBP堆棧操作源串指針目標串指針指令指針SS—SPDSSIES:SS:CS:—ESDICS—IP2023/1/142.2.8尋址方式中的操作數(shù)立即數(shù)操作數(shù);寄存器操作數(shù);存儲器操作數(shù)
立即尋址
MOVAX,2000H
操作數(shù)在CS段寄存器尋址
MOVAX,BX
操作數(shù)在寄存器中存儲器尋址
MOVAX,[BX]
操作數(shù)在DS段2023/1/141立即數(shù)操作數(shù)使用立即數(shù)的指令:數(shù)據(jù)傳送指令;算術(shù)運算指令(乘法和除法除外);邏輯運算指令立即數(shù)只能作為源操作數(shù)
2023/1/142寄存器操作數(shù)通用寄存器:四個16位寄存器:AX,BX,CX,DX存放字操作數(shù)也可當做8位寄存器:AH,AL,BH,BL,CH,CL,DH,DL存放字節(jié)操作數(shù);算數(shù)和邏輯運算中,可作為累加器使用段寄存器:DS,SS,CS,ES存放當前段地址DS,ES,SS需要置初值時,將立即數(shù)傳送到通用寄存器中(如AX),再傳送到有關(guān)的段寄存器CS不允許用戶賦值2023/1/142存儲器操作數(shù)不允許存儲器到存儲器的操作四個16位寄存器:AX,BX,CX,DX存放字操作數(shù)存儲器操作數(shù)的指令執(zhí)行速度最快,立即數(shù)操作數(shù)指令次之,存儲器操作數(shù)指令執(zhí)行速度最慢存儲器默認的段寄存器允許段超越的寄存器存儲器默認的段寄存器允許段超越的寄存器IPCS無SIDSCS,ES,SSSPSS無DIESCS,ES,SSEADSCS,ES,SSBPSSCS,DS,ES2023/1/14本章內(nèi)容8086的指令格式與編碼18086的尋址方式28086的指令系統(tǒng)380X86的擴充指令42023/1/143.8086的指令系統(tǒng)2.3.1數(shù)據(jù)傳送指令(P56)2.3.2算術(shù)運算指令(P64)2.3.3邏輯運算及移位指令(P73)2.3.4串操作指令(P79)2.3.5轉(zhuǎn)跳指令(P84)2.3.6處理器控制指令(P94)2023/1/143.1數(shù)據(jù)傳送指令
通用數(shù)據(jù)傳送指令MOV
(P56)堆棧操作指令PUSH、POP
(P57)交換指令XCHG
(P60)查表指令XLAT
(P60)地址傳送指令LEA、LDS、LES
(P61)標志傳送指令(P62)
LAHF、SAHF、PUSHF、POPF2023/1/143.1數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令MOV功能:將源操作數(shù)內(nèi)容復(fù)制到目操作數(shù)中MOVdst,src ;(dst)←(src)寄存器(CS不作目的數(shù))立即數(shù)段寄存器存儲器2023/1/143.1數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令MOV例: MOVAX,CS MOVAL,125MOVMEM,15 MOVSI,BX MOVDS,AX MOV[BS]:50H MOVAXDISP[BX][SI]2023/1/143.1數(shù)據(jù)傳送指令注意:不影響標志位;立即數(shù)、CS段寄存器不能做目的操作數(shù);兩個存儲單元之間不能直接進行數(shù)據(jù)傳送;兩個段寄存器之間不能直接進行數(shù)據(jù)傳送;不能直接給段寄存器送立即數(shù);兩操作數(shù)必須等長傳送可通過通用寄存器2023/1/143.1數(shù)據(jù)傳送指令通用寄存器的橋梁作用seg→r→segMOVAX,ESMOVDS,AXimm→r→segMOVAX,2000HMOVDS,AXMOVDS,ESseg←×→segMOVDS,2000Himm×→segm→r→m
MOVAX,[20H]MOV[BX],AXMOV[BX],[20H]m←×→m思考:MOV[BX],20H?2023/1/143.1數(shù)據(jù)傳送指令堆棧操作指令入棧指令PUSH
PUSHsrc;SP←SP-2(SP+1)←src(H)(SP)←src(L)src
reg16mem16seg出棧指令POPPOPdst;dst(L)←(SP)dst(H)←(SP+1)SP←SP+2dstreg16mem16Seg(除CS)例:PUSHAXPUSHWORDPTR[BP]POPESPOPWORDPTR[BP][SI]2023/1/143.1數(shù)據(jù)傳送指令入棧操作示例設(shè)有SS=3200H,SP=0800H,AX=105CH。SP=0800H→32800H……StackPUSHAXSP=SP-1→327FFHSP=SP-1→327FEHSP=07FEH5CHAL10HAH2023/1/143.1數(shù)據(jù)傳送指令出棧操作示例設(shè)有SS=3200H,SP=07FEHPOPAXSP=SP+1→32800HSP=SP+1→327FFHSP=07FEH→327FEH……Stack10H5CHSP=0800HAX=105CHAHAL5CH10H2023/1/143.1數(shù)據(jù)傳送指令一定是16位操作,即壓入和彈出的一定是字單元,且高字節(jié)總是在高地址單元;不允許使用立即數(shù)作為操作數(shù)不能以CS、IP作為目的操作數(shù)因為8086系統(tǒng)的堆棧是向下(低地址端)生成的,并且是實棧頂,所以入棧時總是SP先減2再壓入字,而出棧時總是先彈出字再將SP加2;堆棧中的數(shù)據(jù)總是先進后出;不影響標志位堆棧操作注意2023/1/143.1數(shù)據(jù)傳送指令交換指令XCHG可使用的操作數(shù)類型組合:
XCHGCL,DH ;通用寄存器通用寄存器
XCHGAX,[BP] ;通用寄存器存儲器功能:將源、目操作數(shù)的內(nèi)容互相交換,指令執(zhí)行后源、目操作數(shù)同時被改變指令形式:XCHGop1,op2;(op1)(op2)op1:R,M;op2:R,M立即數(shù)為什么不能做操作數(shù)?寄存器存儲器2023/1/143.1數(shù)據(jù)傳送指令交換指令XCHG注意不能直接交換兩個存儲單元的值;任一個操作數(shù)都不能是段寄存器或立即數(shù);不允許同時為存儲器操作數(shù);不影響標志位2023/1/143.1數(shù)據(jù)傳送指令《例》用MOV、PUSH,POP、XCHG指令
完成兩寄存器AX、BX中數(shù)據(jù)的交換
(討論所用機器碼數(shù)量)
用MOV指令
用PUSH指令
POP
用XCHG指令MOVCX,AXMOVAX,BXMOVBX,CX
6字節(jié)機器碼PUSHAXPUSHBXPOPAXPOPBX
4字節(jié)機器碼XCHGAX,BX
1字節(jié)機器碼2023/1/143.1數(shù)據(jù)傳送指令數(shù)據(jù)查表指令——XLAT
指令格式
指令功能XLAT;(AL)←[(BX)+(AL)]使用XLAT指令前(BX)←表的首地址,(AL)←表的索引值使用XLAT指令使用XLAT指令后(BX)+(AL)地址單元中的字節(jié)數(shù)據(jù)送(AL)2023/1/143.1數(shù)據(jù)傳送指令
如圖,字母A—J共10個字母的ASCⅡ碼表存放在DS段中,執(zhí)行下列程序后,AL中的值變?yōu)槎嗌?MOVBX,2A00HMOVAL,3
XLAT 2023/1/143.1數(shù)據(jù)傳送指令LED七段顯示碼與顯示數(shù)字的關(guān)系顯示數(shù)字顯示碼03FH103H26DH367H87FH977H3FH03H6DH67H7FH77H用AL代表顯示數(shù)字,用XLAT指令查出對應(yīng)顯示碼?!˙X)(AL)=0~9…2023/1/143.1數(shù)據(jù)傳送指令目標地址傳送指令——LEA
指令格式
指令功能
指令應(yīng)用
LEAreg,mem;(reg)←mem的EA將mem的有效地址(16位段內(nèi)偏移地址)傳送給通用寄存器regMOVBX,2130H
立即數(shù)2130H賦給通用寄存器BXLEABX,[2130H]
地址值2130H賦給通用寄存器BX2023/1/143.1數(shù)據(jù)傳送指令符號地址的獲得例:將符號地址BUFF的地址值賦給通用寄存器BX
LEABX,BUFF
指令LEA傳送BUFF的地址值給BXMOVBX,OFFSETBUFF
運算符OFFSET返回BUFF的地址值后賦給BXMOVBX,BUFF
注:將BUFF地址單元中的字數(shù)據(jù)傳送給BX2023/1/143.1數(shù)據(jù)傳送指令注意LEA指令和OFFSET運算符可以完成相同的功能,只是執(zhí)行時間不同;
LEABX,label;程序運行時,取lable的EA到BX中
MOVBX,OFFSETlabel
;匯編時取lable的EA,運行時放入BX中2023/1/143.1數(shù)據(jù)傳送指令《例》查表求數(shù)字0~9的格雷碼格雷碼表18H34H05H06H09H0AH0CH11H12H14HTABLEDS段
0~9的格雷碼從符號地址TABLE開始順序存入。編程序段LEABX,TABLE;表首地址賦BXMOVAL,7;表偏為7XLAT;查表注:AL中有7的格雷碼11H2023/1/143.1數(shù)據(jù)傳送指令全地址指針傳送指令——LDS、LES指令格式指令功能
LDSreg16,mem32;(reg)←[mem32:mem32+1](DS)←[mem32+2:mem32+3]LESreg16,mem32;(reg)←[mem32:mem32+1](ES)←[mem32+2:mem32+3]LDS,32位目標地址送段寄存器DS和通用寄存器regLES,32位目標地址送段寄存器ES和通用寄存器reg2023/1/143.1數(shù)據(jù)傳送指令指令LEA與LDS,LES的區(qū)別
LEAreg,mem
mem
表示存儲器單元地址本身
LDSreg16,mem32LESreg16,mem32
mem
表示存儲器單元地址中的地址值
2023/1/143.1數(shù)據(jù)傳送指令指令LEA與LDS,LES的比較已知:DS=09A0H,BX=0048HLEADI,[BX]LDSDI,[BX]LESDI,[BX]→執(zhí)行后:DI=0048H→執(zhí)行后:DI=003EHDS=0816H→執(zhí)行后:DI=003EHES=0816HDS=09A008H……3EH00H16H0048H0049H004AH004BH2023/1/143.1數(shù)據(jù)傳送指令標志傳送指令——LAHF、SAHF
LAHF;(AH)←(F)低8
讀標志寄存器的低8位到寄存器AH的指令
SAHF;(F)低8←(AH)
將AH的值寫入標志寄存器的低8位的指令
注:字節(jié)傳送方式
16位標志寄存器中的低8位數(shù)據(jù)傳送即狀態(tài)標志位CF、AF、ZF、SF、PF的傳送2023/1/143.1數(shù)據(jù)傳送指令標志傳送指令——PUSHF、POPF
PUSHF
標志寄存器的入棧指令
POPF
標志寄存器的出棧指令注:字傳送方式
16位標志寄存器中的16位數(shù)據(jù)傳送即狀態(tài)標志位OF、CF、AF、ZF、SF、PF的傳送及控制標志位IF、DF、TF的傳送2023/1/14(1)LAHF;AH(2)SAHF;FR低8位(3)PUSHF;SP;[SP+1]
;[SP](4)POPF;FR低8位;FR高8位;SPFR低8位AHSP-2FR高8位FR低8位[SP][SP+1]SP+22023/1/143.1數(shù)據(jù)傳送指令注意
操作數(shù)全部隱含PUSHF和POPF指令一般用于保護FR內(nèi)容;LAHF和SAHF指令一般用于修改FR內(nèi)容:
LAHF ;將FR的低8位送入AH …… ;修改AH的值
SAHF ;將修改后的值重新送回FR上述方法顯然只能處理FR的低8位,如需處理FR中的任一位,可用以下方法:
PUSHF ;將FR的值壓入堆棧
POPAX ;將剛壓入的FR值彈出到AX中
…… ;修改AX的值
PUSHAX ;將修改后的值壓入堆棧
POPF ;將修改后的值彈出到FR中2023/1/143.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送類指令總結(jié)
源、目操作數(shù)長度必須一致。源、目操作數(shù)不能同時是存儲器操作數(shù)。源、目操作數(shù)不能同時是段寄存器。立即數(shù)和代碼段寄存器CS不能作目操作數(shù)。當目操作數(shù)是段寄存器時,源操作數(shù)不能是立即數(shù)??梢允褂枚渭拇嫫鞯闹噶睿篗OV、PUSH、POP。除XCHG指令外,其它數(shù)傳指令僅改變目操作數(shù),源操作數(shù)保持不變。除SAHF、POPF指令外,其它數(shù)傳指令的執(zhí)行不影響標志位。對所有指令都適用!2023/1/14算術(shù)運算類指令加法指令
減法指令
乘法指令
除法指令
ADD,ADC指令、INC指令、DAA,AAA指令SUB,SBB指令、DEC指令、DAS,AAS指令NEG指令、CMP指令MUL,IMUL指令、AAM指令DIV,IDIV指令、AAD指令2023/1/14算術(shù)運算類指令計算機中運算指令的特點對十進制加、減、乘、除的應(yīng)用是小學問題對二進制加、減、乘、除的應(yīng)用是大學問題對有限位二進制加、減、乘、除的應(yīng)用是計算機中必須解決的問題2023/1/14算術(shù)運算類指令計算機中運算指令的特點
除了除法指令及符號擴展指令外,其它算術(shù)運算指令都將影響各狀態(tài)標志,不同的指令對各狀態(tài)標志的影響也不同;加、減法運算時所有數(shù)據(jù)長度相等,乘法運算時結(jié)果長度加倍,除法運算時被除數(shù)長度加倍;乘除法運算時使用隱含操作數(shù);可以使用BCD碼進行算術(shù)運算,并可用相應(yīng)的調(diào)整指令對結(jié)果進行調(diào)整以保證結(jié)果仍為BCD碼;2023/1/14算術(shù)運算類指令運算指令對狀態(tài)標志位的影響無符號數(shù)運算影響狀態(tài)標志位CF
有符號數(shù)運算影響狀態(tài)標志位OF
有符號數(shù)運算結(jié)果的正負值影響狀態(tài)標志位SF
兩數(shù)運算結(jié)果是否為0影響狀態(tài)標志位ZF
兩數(shù)低4位運算影響狀態(tài)標志位AF
兩數(shù)運算結(jié)果中1的量影響狀態(tài)標志位PF2023/1/14算術(shù)運算類指令計算機中兩數(shù)運算后的溢出檢測對無符號數(shù)測狀態(tài)標志位CF
對有符號數(shù)測狀態(tài)標志位OF
CF的特點兩數(shù)運算后CF=0,表示運算結(jié)果未超界,無溢出兩數(shù)運算后CF=1,表示運算結(jié)果己超界,有溢出
OF的特點兩數(shù)運算后OF=0,表示運算結(jié)果未超界,無溢出兩數(shù)運算后OF=1,表示運算結(jié)果己超界,有溢出
注:溢出即加法有進位,減法有借位注:溢出即運算出現(xiàn)錯誤2023/1/14算術(shù)運算類指令二進制數(shù)的表值范圍與標志
8位無符號數(shù)
和在數(shù)0~255內(nèi)CF=0
和在數(shù)0~255外CF=1
8位有符號數(shù)和在數(shù)-128~+127內(nèi)OF=0
和在數(shù)-128~+127外OF=12023/1/14兩個8位二進制數(shù)的加法運算及和的溢出分析表示無符號數(shù)時——無溢出表示有符號數(shù)時——無溢出機內(nèi)二進制數(shù)相加認為無符號數(shù)相加認為有符號數(shù)相加
00000011B+00001100B
3+12
+3++12
00001111B
15<255
+15<+127分析
CF=0,無溢出OF=0,無溢出2023/1/14兩個8位二進制數(shù)的加法運算及和的溢出分析表示無符號數(shù)時——有溢出表示有符號數(shù)時——無溢出機內(nèi)二進制數(shù)相加認為無符號數(shù)相加認為有符號數(shù)相加
00000110B+11111100B
6+252
+6+-4
1←00000010B
258>255
+2<+127分析
CF=1,有溢出OF=0,無溢出2023/1/14兩個8位二進制數(shù)的加法運算及和的溢出分析表示無符號數(shù)時——無溢出表示有符號數(shù)時——有溢出機內(nèi)二進制數(shù)相加認為無符號數(shù)相加認為有符號數(shù)相加
00001000B+01111011B
8+123
+8++123
10000011B
131<255
+131>+127分析
CF=0,無溢出OF=1,有溢出2023/1/14兩個8位二進制數(shù)的加法運算及和的溢出分析表示無符號數(shù)時——有溢出表示有符號數(shù)時——有溢出機內(nèi)二進制數(shù)相加認為無符號數(shù)相加認為有符號數(shù)相加
10000111B+11110101B
135+245
-121+-11
1←01111100B
380>255
-132<-128分析
CF=1,有溢出OF=1,有溢出2023/1/14算術(shù)運算——加法類指令加法指令——ADD
指令特點
指令格式
指令功能
不帶進位的加法指令A(yù)DDdest,src;dest←dest+src用于低字(字節(jié))相加注:無符號數(shù)、有符號數(shù)的加法用相同的指令最常用的加法2023/1/14算術(shù)運算——加法類指令加法指令——ADC
指令特點
指令格式
指令功能
帶進位的加法指令A(yù)DCdest,src;dest←dest+src+CF用于高字(字節(jié))相加2023/1/14算術(shù)運算——加法類指令A(yù)DD、ADC指令的操作數(shù)及類型
OPreg,regOPreg,memOPmem,regOPreg,immOPmem,imm
操作數(shù)
數(shù)據(jù)類型
字節(jié)數(shù)據(jù)類型字數(shù)據(jù)類型2023/1/14算術(shù)運算——加法類指令A(yù)DD與ADC分析影響所有標志位ADC指令的另一個默認操作數(shù)為進位位CF;若進位標志CF=0,則ADD=ADC
無符號數(shù)、有符號數(shù)用相同的加法指令對無符號數(shù)加法時,判斷標志位CF
對有符號數(shù)加法時,判斷標志位OF
2023/1/14算術(shù)運算——加法類指令I(lǐng)NC——加1指令
指令格式
指令功能
影響的標志(不影響的標志)
允許的操作數(shù)
INCoprd;oprd←oprd+1多用于循環(huán)程序中的地址指針加1OF、SF、ZF、PF、AF(CF)reg、mem2023/1/14例:將存放在20000H和21000H地址處的兩個32位 數(shù)相加,結(jié) 果放在21000H地址處。
MOV AX,2000HMOV DS,AX;設(shè)置默認段基址DS=2000HMOV SI,0 ;使SI指向20000H單元MOV DI,1000H;使DI指向21000H單元MOV AX,[SI];將20000H、20001H單元的16位數(shù)送到AX中ADD [DI],AX;將兩個32位數(shù)的低16位相加,結(jié)果放21000H處MOV AX,[SI+2];將20002H、20003H單元的16位數(shù)送到AX中ADC [DI+2],AX;將32位的高16位相加,結(jié)果放21002H處MOV [DI+4],0ADC [DI+4],0;處理高16位的進位2023/1/14《例》兩雙倍精度字1234FEDCH和11228765H相加
DCHFEH34H12H65H87H22H11HDS段1000H2000H編程存儲圖LEASI,[1000H]LEADI,[2000H]MOVAX,[SI]ADDAX,[DI]MOV[SI],AXMOVAX,[SI+2]ADCAX,[DI+2]MOV[SI+2],AX結(jié)果23H57H86H41H2023/1/14算術(shù)運算——加法類指令十進制數(shù)的BCD編碼
用4位二進制數(shù)對1位十進制數(shù)進行編碼8-4-2-1BCD編碼
0000——0、...1001——9組合十進制數(shù)
1字節(jié)含2個BCD編碼的十進制數(shù)非組合十進制數(shù)
1字節(jié)含1個BCD編碼的十進制數(shù)BCDBCD0000BCD2023/1/14算術(shù)運算——加法類指令十進制數(shù)的BCD編碼表示
4位二進制數(shù)的表值范圍
0000B~1111B、0~15、0H~FH
4位二進制數(shù)的BCD編碼表示
0000B~1001B;表示0~9;寫為0H~9H
8位二進制數(shù)含兩個BCD碼,稱組合十進制數(shù)
00000000B~10011001B;表示00~99
寫為00H~99H
8位二進制數(shù)含一個BCD碼,稱非組合十進制數(shù)
00000000B~00001001B;表示0~9
寫為00H~09H2023/1/14調(diào)整原理:計算8+900001000
見右式
+0000100100010001=11
結(jié)果應(yīng)為17,而計算機相加為11,原因在于運算過程中,如遇到低4位往高4位產(chǎn)生進位時(此時AF=1)是按逢十六進一的規(guī)則,但BCD碼要求逢十進一,因此只要產(chǎn)生進位,個位就會少6,這就要進行加6調(diào)正。80這個1代表了16,而實際上僅應(yīng)為10,即多進了6。
2023/1/14實際上當?shù)?位的結(jié)果>9(即A~F之間)時,也應(yīng)進行加6調(diào)正(原因是逢十沒有進位,故用加6的方法強行產(chǎn)生進位)。如對上例的結(jié)果進行加6:
0001000111
+00000110
60001011117
812023/1/14算術(shù)運算——加法類指令半字節(jié)(4位二進制數(shù))BCD碼和的調(diào)整
和≤9
不調(diào)整,或加0調(diào)整
9<和≤15
先加6調(diào)整,后有AF=1(低4位)、CF=1(高4位)
15<和先有AF=1(低4位)、CF=1(高4位),后加6調(diào)整2023/1/14非組合BCD碼調(diào)整指令A(yù)AA(無操作數(shù))何時使用?對什么進行調(diào)整?影響標志位CF、AF組合BCD碼調(diào)整指令DAA(無操作數(shù))何時使用?對什么進行調(diào)整?影響SF、ZF、AF、CF、PF兩個非組合BCD碼相加,想得到非組合BCD碼結(jié)果自動調(diào)整AL中的和,非組合BCD碼的結(jié)果存在AL中。若有進位,則AH+1→AH兩個組合BCD碼相加,希望得到組合BCD碼結(jié)果自動調(diào)整AL中的和,結(jié)果在AL中產(chǎn)生一個組合BCD碼的和。若有進位,則CF=1算術(shù)運算——加法類指令2023/1/14算術(shù)運算——加法類指令A(yù)AA——非組合十進制數(shù)加法調(diào)整指令
指令格式
指令功能
指令特點AAA;對兩非組合十進制數(shù)相加和(AL中)進行調(diào)整調(diào)整后的結(jié)果放在AX中調(diào)整后,AH、AL中均為非組合十進制數(shù)指令隱含源、目的操作數(shù)2023/1/14算術(shù)運算——加法類指令A(yù)AA指令的工作原理
若(AL)&0FH>9或標志AF=1(>15)
則(AL)=(AL)+06H且CF=AF=1
若(AL)&0FH≤9且標志AF=0
不調(diào)整(AL)=(AL)+00H
若AF=1、CF=1
結(jié)果(AL)=(AL)&0FH
(AH)=(AH)+CF2023/1/14算術(shù)運算——加法類指令
DAA——組合十進制數(shù)加法調(diào)整指令
指令格式
指令功能
指令特點00H06H60H66HDAA;(AL)←(AL)+對兩個組合十進制數(shù)相加和(AL中)進行調(diào)整結(jié)果存放在AL中。判斷和值:和≤9、9<和≤15、15<和根據(jù)判斷完成加00H、06H、60H、66H的調(diào)整指令隱含源、目的操作數(shù)2023/1/14算術(shù)運算——加法類指令DAA指令的工作原理
若(AL)&0FH>9或標志AF=1(>15)
則(AL)=(AL)+06H且AF=1若(AL)&F0H>9或標志CF=1(>15)則(AL)=(AL)+60H且CF=12023/1/14算術(shù)運算——加法類指令DAA與AAA的討論
DAA指令
一字節(jié)含兩個BCD編碼的十進制數(shù)調(diào)整在AL中進行,結(jié)果放入AL中影響標志AF、CF
AAA指令一字節(jié)含一個BCD編碼的十進制數(shù),低4位有效、高4位為零調(diào)整在AL中進行,結(jié)果放入AX中注意標志AF、CF的應(yīng)用2023/1/14算術(shù)運算——加法類指令A(yù)AA與DAA分析調(diào)整指令應(yīng)放在加法指令后,并且加法的結(jié)果一定 存放在AL中;使用十進制調(diào)整指令請注意操作數(shù)存放的地方。
AAA指令中沒有AH寄存器清零的動作。AAA指令對CF、AF有影響,對SF、ZF、PF、OF 未定義;而DAA此指令影響CF、AF、SF、 ZF、PF,對OF未作定義;調(diào)整步驟了解即可;2023/1/14
10001001(89)
+ 01110101(75)
11111110(FEH);高低4位均為非法碼,分別加6調(diào)整十進制調(diào)整指令示例+011001101←01100100(164);標志CF反映進位情況兩個非組合十進制數(shù)06+07相加,調(diào)整后得到十進制數(shù)0103
00000110(06)
+ 00000111(07)
00001101(0DH);非法碼
+ 0110
AL 00010011
;組合十進制數(shù),再調(diào)整 ;AF=1 (AF←1)AH(1) ;AH←AH+1AH在原有基礎(chǔ)上加1
00001111
;AL&0FH 00000011;(0103)AH的增加與AL一起反映調(diào)整結(jié)果算術(shù)運算指令兩個組合十進制數(shù)89+75相加,調(diào)整后得到十進制數(shù)16490《例》對兩個用BCD碼表示的十進制數(shù)2964、4758相加,2964放在符號地址BCD1開始的地址單元,4758放在符號地址BCD2開始的地址單元,結(jié)果放在符號地址BCD3開始的地址單元2023/1/14《例》存儲區(qū)示意圖
64H29H58H47H22H77H
BCD1
BCD2
BCD32964+4758=77222023/1/14《例》程序段
MOVAL,BCD1;(AL)=64HADDAL,BCD2;(AL)=BCHDAA;(AL)=22H,AF=1,CF=1MOVBCD3,ALMOVAL,BCD1+1;(AL)=29HADCAL,BCD2+1;(AL)=71H,AF=1DAA;(AL)=77HMOVBCD3+1,AL2023/1/14《例》算式
MOVAL,BCD1
(AL)=64H=01100100BADDAL,BCD2+BCD2=58H=01011000B---------------------------------------------
(AL)=10111100B
9<和≤15、
9
<和≤15DAA+01100110B----------------------------------------------
(AL)=22H=00100010B
CF=1AF=1
2023/1/14《例》算式MOVAL,BCD+1
(AL)=29H=00101001BADCAL,BCD2+1BCD2+1=47H=01000111B+CF=1B---------------------------------------------
(AL)=01110001B
和≤
9AF=1
DAA+00000110B---------------------------------------------
(AL)=77H=01110111BCF=0AF=02023/1/14算術(shù)運算類指令加法指令
減法指令
乘法指令
除法指令
ADD,ADC指令、INC指令、DAA,AAA指令SUB,SBB指令、DEC指令、DAS,AAS指令NEG指令、CMP指令MUL,IMUL指令、AAM指令DIV,IDIV指令、AAD指令2023/1/14算術(shù)運算——減法類指令SUB、SBB、DEC——減法指令
不帶借位的減法指令
SUBdest,src;dest←dest-src
影響所有標志
帶借位的減法指令
SBBdest,src;dest←dest-src–CF
影響所有標志
減1指令
DECsrc;src←src-1影響除CF外的所有標志最常用的減法用于高字(字節(jié))相減常用于修改地址指針2023/1/14算術(shù)運算——減法類指令DAS、AAS——減法調(diào)整指令
DAS——組合十進制數(shù)減法調(diào)整指令
對AL中用BCD編碼的組合十進制數(shù)的差進行調(diào)整,結(jié)果在AL中
AAS——非組合十進制數(shù)減法調(diào)整指令
對AL中用BCD編碼的非組合十進制數(shù)的差進行調(diào)整,結(jié)果在AX中
注:DAA、AAA完成加6調(diào)整
DAS、AAS完成減6調(diào)整2023/1/14算術(shù)運算——減法類指令NEG——取負指令(求補指令)
指令格式
NEGoprd;oprd←0-oprd
指令功能
對操作數(shù)oprd
求補(注意與補碼區(qū)別)
指令應(yīng)用
完成(AX)=100-(AX)
NEGAX;(AX)=0-(AX)
ADDAX,100H;(AX)=0-(AX)+100
;=100-(AX)2023/1/14注:相當于所有位按位取反再加1當op1為0時,CF=0;否則,CF=1;op1的值為80H或8000H時,執(zhí)行后結(jié)果不變,但OF=1;例:求表達式Im-R/M的值。
SUBIm,R/M ;錯誤,立即數(shù)Im不能作被減數(shù)
NEGR/M ;正確,將減法化成加法
ADDR/M,Im 2023/1/14分析2-1=1在計算機內(nèi)的運算原理(假設(shè)機器字長為8位)使用補碼:2-1=2+(-1)(即將符號位交給1使1變成-1)
-1的原碼:1000,0001
按位取反:1111,1110(注意:最高位即符號位不參與取反運算)
-1的補碼:1111,1111
2
:
0000,0010補碼
+
-1:1111,1111補碼
______________________
1,0000,0001補碼->最高位溢出丟棄->0000,0001補碼/原碼
->(1)D2023/1/14分析2-1=1在計算機內(nèi)的運算原理(假設(shè)機器字長為8位)求補運算:2-1=2+(1的相反數(shù))(即減去1等于加上1的相反數(shù))
1的原碼:0000,0001
各位取反:1111,1110
末位加1
:1111,1111(即為-1的補碼,也就是1相反數(shù)的補碼)
2
:
0000,0010補碼
+
-1:1111,1111補碼
______________________
1,0000,0001補碼->最高位溢出丟棄->0000,0001補碼/原碼
->(1)D2023/1/14算術(shù)運算——減法類指令CMP——比較指令
指令格式
指令功能指令操作數(shù)
指令應(yīng)用
CMPdest,src;dest–src
CMP指令與SUB指令的相同點:完成目的操作數(shù)dest
減源操作數(shù)srcCMP指令與SUB指令的不同點:
SUB的差放入dest、CMP的差僅影響標志CMPreg,imm、CMPreg,reg、CMPreg,memCMP用于條件判斷指令前,根據(jù)標志改變程序流程2023/1/14算術(shù)運算——減法類指令討論CMPAL,BL
若(AL)=(BL)
差為0標志位ZF=1
兩數(shù)相等條件判斷指令為JE(Equal)
兩數(shù)差為0條件判斷指令為JZ(Zero)
若(AL)≠(BL)
差不為0標志位ZF=0
兩數(shù)不相等條件判斷指令為JNE
兩數(shù)差不為0條件判斷指令為JNZ2023/1/14算術(shù)運算——減法類指令討論CMPAL,BL
(AL、BL均為無符號數(shù))
若(AL)>(BL)
無借位標志位CF=0(AL)高于(BL)用條件判斷指令為JA(Above)
(AL)不低于(BL)用條件判斷指令為JNB
若(AL)<(BL)
有借位標志位CF=1(AL)低于(BL)用條件判斷指令為JB(Below)
(AL)不高于(BL)用條件判斷指令為JNA2023/1/14算術(shù)運算——減法類指令討論CMPAL,BL
(AL、BL均為有符號數(shù))對于帶符號數(shù)A、B,當OF=0(無溢出),則SF=0A>B;SF=1A<B;當OF=1(溢出),則SF=0A<B;SF=1A>B。為什么?對于帶符號數(shù),最高位是符號位。若A>B,則A-B不需要借位。若A<B,則要向最高位(符號位)借位,剛好使符號位取反,故判斷A、B大小時要先判斷結(jié)果是否有溢出,不能僅看SF。同號想減不會溢出。異號相減相當于同號相加,正正相加表現(xiàn)為負,負負相加表現(xiàn)為正,標志著溢出2023/1/14算術(shù)運算——減法類指令討論CMPAL,BL
(AL、BL均為有符號數(shù))
若(AL)>(BL)
標志位SF⊕OF=0(AL)大于(BL)用條件判斷指令為JG(Greater)
(AL)不小于(BL)用條件判斷指令為JNL
若(AL)<(BL)
標志位SF⊕OF=1(AL)小于(BL)用條件判斷指令為JL(Less)
(AL)不大于(BL)用條件判斷指令為JNG2023/1/14算術(shù)運算——減法類指令與CMP指令有關(guān)的條件判斷指令
無符號、有符號數(shù)判零指令
JZ/JE、JNZ/JNE與標志位ZF有關(guān)
無符號數(shù)比較大小指令
JA/JNB、JB/JNA與標志位CF有關(guān)
有符號數(shù)比較大小指令
JG/JNL、JL/JNG與標志位OF、SF有關(guān)2023/1/14算術(shù)運算類指令加法指令
減法指令
乘法指令
除法指令
ADD,ADC指令、INC指令、DAA,AAA指令SUB,SBB指令、DEC指令、DAS,AAS指令NEG指令、CMP指令MUL,IMUL指令、AAM指令DIV,IDIV指令、AAD指令2023/1/14算術(shù)運算——乘法類指令乘、除法指令與加、減法指令的比較
對加、減法無符號、有符號數(shù)運算用相同的指令
對乘、除法無符號、有符號數(shù)運算用不同的指令
對加、減法寄存器使用不固定
對乘、除法寄存器使用為專用寄存器2023/1/14算術(shù)運算——乘法類指令乘法指令中的專用寄存器
寄存器的使用原則
積、被乘數(shù)、乘數(shù)的數(shù)據(jù)類型
被乘數(shù)專用寄存器AL(8位)或AX(16位)積專用寄存器AX(16位)或DX,AX(32位)積(16位)=被乘數(shù)(8位)*乘數(shù)(8位)積(32位)=被乘數(shù)(16位)*乘數(shù)(16位)2023/1/14算術(shù)運算——乘法類指令MUL——無符號數(shù)乘法指令
指令格式
指令特點
MULsrc
;(AX)←(AL)*src(8位乘數(shù));(DX):(AX)←(AX)*src(16位乘數(shù))
MUL指令僅顯示給出乘數(shù)源操作數(shù)srcMUL指令目的操作數(shù)根據(jù)src的數(shù)據(jù)類型而定若src為8位乘數(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北海市初中數(shù)學試卷
- 豆類項目風險識別與評估綜合報告
- 邊坡錨桿錨索腰梁施工方案
- 浙江油田油管清洗施工方案
- 房屋地面鋪裝工程施工方案
- 三水裝配式檢查井施工方案
- “油茶+N”混交造林模式的技術(shù)創(chuàng)新與應(yīng)用實踐的效益詳述
- 智能制造與供應(yīng)鏈管理的策略及實施路徑
- 數(shù)字化改造的必要性與挑戰(zhàn)
- 變電站巡檢的重要性
- 《5G無線網(wǎng)絡(luò)規(guī)劃與優(yōu)化》 課件 第一章 5G網(wǎng)絡(luò)概述
- 醫(yī)院導視系統(tǒng)方案
- 教科版-六年級科學下冊制作校園生物分布圖課件
- 五年級下冊數(shù)學計算題100道及答案
- 生涯發(fā)展報告介紹職業(yè)發(fā)展規(guī)劃實現(xiàn)職業(yè)目標的具體行動和成果
- 關(guān)于防范遏制礦山領(lǐng)域重特大生產(chǎn)安全事故的硬措施(上)
- 《高一數(shù)學三角函數(shù)誘導公式》課件
- 《如何提高自信心》課件
- 納米材料在環(huán)境污染治理中的應(yīng)用
- 2024版全文:中國二型糖尿病防治全指南
- 《字體設(shè)計第三章》課件
評論
0/150
提交評論