版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章8086的尋址方式和指令系統(tǒng)
第三章8086的尋址方式和指令系統(tǒng)
指令系統(tǒng)是微處理器(CPU)所能執(zhí)行的指令的集合,它與微處理器有密切的聯(lián)系,不同的微處理器有不同的指令系統(tǒng)。在本章中我們主要講解INTEL公司生產(chǎn)的8086/8088CPU的尋址方式以及各種指令系統(tǒng),并通過(guò)具體實(shí)例講述了各條指令的功能和使用方法。第三章8086的尋址方式和指令系統(tǒng)3.18086的尋址方式3.2指令的機(jī)器碼表示方法3.38086的指令系統(tǒng)根據(jù)指令內(nèi)容確定操作數(shù)地址的過(guò)程,稱(chēng)為尋址。根據(jù)尋址方式計(jì)算所得到的地址叫做有效地址EA,也就是段內(nèi)偏移地址。有效地址還需要與相應(yīng)的段基地址組合才是20位的物理地址PA,該工作由CPU完成。操作碼操作數(shù)匯編指令:操作碼:指令操作類(lèi)型;操作數(shù):指令所需操作數(shù)或操作數(shù)的地址;操作數(shù)可以有一個(gè),也可以有兩個(gè),一個(gè)源操作數(shù),一個(gè)目的操作數(shù)。例:MOVAX,CX;將CX的內(nèi)容送入AX中。一、立即尋址方式指令操作數(shù)部分直接給出指令的操作數(shù),操作數(shù)與操作碼一起存入代碼段中。立即數(shù)有8位和16位。例:MOVAL,5;源操作數(shù)為立即尋址指令執(zhí)行后,AL=05H,8位數(shù)據(jù)05H存入AL寄存器。例:MOVAX,3064H;源操作數(shù)為立即尋址指令執(zhí)行后,AX=3064H,16位數(shù)據(jù)3064H存入AX寄存器。注:立即數(shù)只能作為源操作數(shù),不能作為目的操作數(shù)二、寄存器尋址方式寄存器尋址方式的操作數(shù)是寄存器的值,指令中直接使用寄存器名,包括8位或16位通用寄存器和段寄存器。可使用的16位寄存器:AX、BX、CX、DX、SI、DI、SP、BP;其中:AX、BX、CX、DX可分成兩8位使用。例:MOVAX,CX;(AX)(CX)
MOVAL,CL;(AL)(CL)
內(nèi)存尋址方式
c語(yǔ)言intp;int*p;int**p在內(nèi)存尋址方式中,操作數(shù)是某個(gè)內(nèi)存單元的內(nèi)容(值),指令中給出的是內(nèi)存單元的有效地址EA(即偏移地址),段地址通常在隱含的某個(gè)段寄存器中。直接尋址方式的操作數(shù)的形式為:Variable或[Variable]在直接尋址方式中,操作數(shù)的偏移地址(有效地址EA)直接用指令加以指定(有直接地址值和標(biāo)號(hào)兩種形式),它存放在代碼段中指定操作碼之后,但操作數(shù)一般存放在存儲(chǔ)器的數(shù)據(jù)段中,所以必須先求出操作數(shù)的物理地址,然后再訪問(wèn)存儲(chǔ)器才能取得操作數(shù)。段地址隱含的由DS指定,也可以ES指定,但需在指令中指明。最后存儲(chǔ)器地址為:DS:偏移地址或ES:偏移地址。三、直接尋址方式例:MOVAX,ES:[2000H]將ES:2000H單元內(nèi)容送入AX。例:MOVAX,LABLE或MOVAX,[LABEL]將標(biāo)號(hào)為L(zhǎng)ABLE(存放操作數(shù)單元的符號(hào)地址),即DS:LABLE中的內(nèi)容送入AX。
段超越當(dāng)操作數(shù)在內(nèi)存單元時(shí),系統(tǒng)根據(jù)隱含約定,自動(dòng)將寄存器DS的值作為段地址。然而,當(dāng)操作數(shù)段地址不在隱含的段寄存器時(shí),可以使用段超越前綴取代其隱含約定。例如:MOVAX,ES:[BP];段地址在ESMOVAX,CS:[BX][SI];段地址在CS段地址的基本約定和允許超越的情況如表所示:存儲(chǔ)器存取方式約定段允許超越段偏移地址取指令堆棧操作源串目的串BP作基址通用數(shù)據(jù)讀寫(xiě)CSSSDSESSSDS無(wú)無(wú)CS,ES,SS無(wú)CS,DS,ESCS,ES,SSIPSPSIDI有效地址EA有效地址EA四、寄存器間接尋址寄存器間接尋址方式的操作數(shù)形式為:[reg]操作數(shù)的有效地址包含在基址寄存器BX,基址指針BP或一個(gè)變址寄存器(SI或DI)中。寄存器間接尋址要用方括號(hào)括起來(lái),以便與寄存器操作數(shù)相區(qū)別。例:MOVAX,[BX];將由BX決定的存儲(chǔ)單元的內(nèi)容送到AX寄存器。10000100021000310004BBAATAB:AXAHALAABB間接尋址數(shù)據(jù)段0002BXDS=1000操作數(shù)在存儲(chǔ)器中,指令中寄存器內(nèi)容作為操作數(shù)所在單元的有效地址。(BX)(SI)(DI)(BP)有效地址=段寄存器為DS段寄存器為SS物理地址計(jì)算方法:物理地址=(DS)*16+(BX)或(SI)或(DI)物理地址=(SS)*16+(BP)例:已知:(DS)=2100H,(DI)=2000H
指令:MOVAX,[DI];(AX)((DI))物理地址=(DS)*16+(DI)
=2100H*16+2000H=21000H+2000H=23000H
指令結(jié)果:將23000H單元內(nèi)容送AL中,將23001H單元內(nèi)容送AH中。五、寄存器相對(duì)尋址方式操作數(shù)在存儲(chǔ)器內(nèi),指令中寄存器內(nèi)容與指令指定的位移量(DISP)之和作為操作數(shù)所在單元的有效地址。(BX)DISP8
(SI)(DI)(BP)DISP16有效地址=段寄存器為DS段寄存器為SS+物理地址=(DS)*16+(BX)+DISP8(SI)、(DI)、DISP16類(lèi)同。物理地址=(SS)*16+(BP)+DISP16例:如果(DS)=3000H,(SI)=2000H,COUNT=3000H,則執(zhí)行指令MOVAX,COUNT[SI],求出此種尋址方式對(duì)應(yīng)的有效地址和物理地址。有效地址=2000H+3000H=5000H物理地址=(DS)*16+5000H=30000H+5000H=35000H六、基址變址尋址方式:操作數(shù)在存儲(chǔ)器中,指令將基址寄存器(BX或BP)與變址寄存器(SI或DI)內(nèi)容之和作為操作數(shù)所在存儲(chǔ)單元的有效地址。
(BX)(SI)(BP)(DI)有效地址=+物理地址=(DS)*16+(BX)+(SI)或(DI)物理地址=(SS)*16+(BP)+(SI)或(DI)例:MOVAX,[BX+DI]或MOVAX,[BX][DI]DS:(BX)+(DI)字存儲(chǔ)單元內(nèi)容送AX。例:MOVAX,[BP+SI]或MOVAX,[BP][SI]SS:(BP)+(SI)字存儲(chǔ)單元內(nèi)容送AX。例:如果(DS)=2100H,(BX)=0158H,(DI)=10A5H,EA=11FDH,則執(zhí)行指令MOVAL,[BX][DI]有效地址:EA=(BX)+(DI)=0158H+10A5H=11FDH
物理地址:(DS)*16+有效地址=21000H+11FDH=221FDH執(zhí)行結(jié)果:將221FDH單元內(nèi)容送入寄存器AL中。七、相對(duì)基址變址尋址方式操作數(shù)在存儲(chǔ)器內(nèi),指令將基址寄存器(BX或BP)與變址寄存器(SI或DI)的內(nèi)容之和再加上位移量(8位或16位),得到操作數(shù)所在單元的有效地址。(BX)(SI)DISP8
(BP)(DI)DISP16有效地址=++物理地址=(DS)*16+(BX)產(chǎn)生的有效地址物理地址=(SS)*16+(BP)產(chǎn)生的有效地址例:已知:(DS)=3000H,(BX)=2000H,(SI)=1000H,MK=0250H
指令:MOVAX,MK[BX][SI]
或MOVAX,MK[BX+SI]
或MOVAX,[MK+BX+SI]
有效地址:MK+(BX)+(SI)=0250H+2000H+0100H=3250H
物理地址:(DS)*16+有效地址=30000H+3250H=33250H
執(zhí)行結(jié)果:將33250H單元內(nèi)容送AL,33251H內(nèi)容送AH。八、其他I/O端口尋址8086采用輸入/輸出端口與存儲(chǔ)器獨(dú)立編址的方式。訪問(wèn)I/O端口需要專(zhuān)門(mén)指令I(lǐng)N和OUT。(1)直接尋址在指令直接給出I/O端口地址,此地址應(yīng)在0-255(0-FFH)之間
INAL,20H(2)間接尋址由DX給出I/O端口地址,此方式適用0-65535(0-FFFFH)之間的任意值。
OUTDX,AL8086數(shù)據(jù)存儲(chǔ)器尋址方式小結(jié):1、立即尋址,操作數(shù)直接放在指令中。2、寄存器尋址(8個(gè)通用寄存器)3、直接尋址,有效地址由指令直接給出,
有效地址只包含偏移量。4、寄存器間接尋址和寄存器相對(duì)間接尋址(4個(gè)寄存器,BX、BP、SI、DI,位移量)5、基址變址尋址和相對(duì)基址變址尋址(BX、BP,SI、DI,位移量)第三章8086的尋址方式和指令系統(tǒng)3.18086的尋址方式3.2指令的機(jī)器碼表示方法3.38086的指令系統(tǒng)3-2指令的機(jī)器碼表示方法一、機(jī)器語(yǔ)言指令的編碼目的和特點(diǎn)機(jī)器指令:計(jì)算機(jī)能識(shí)別和執(zhí)行的指令的二進(jìn)制代碼。如:1011000001100010
匯編指令:用助記符表示機(jī)器指令的操作碼和操作數(shù),例如上面指令的匯編指令是
MOVAL,62H二、機(jī)器語(yǔ)言指令代碼的編制1、編碼格式說(shuō)明
8086的機(jī)器指令長(zhǎng)度為1-6字節(jié)。opcodemod2位reg3位R/M3位低字節(jié)高字節(jié)低字節(jié)高字節(jié)操作碼方式寄存器位移量立即數(shù)1字節(jié)1字節(jié)(尋址方式)1-2字節(jié)1-2字節(jié)尋址方式編碼尋址方式字節(jié)中存放關(guān)于操作數(shù)類(lèi)型和操作數(shù)尋址的信息。如前圖分為3個(gè)域。操作碼用來(lái)指示該指令的操作,一般一字節(jié)。如
PUSHAX010100001)mod域:即方式域,決定如何解釋r/m域和位移量域。
2)reg域:寄存器域,指定一個(gè)寄存器操作數(shù),也可作為額外的操作碼位。
3)r/m域:當(dāng)mod=11時(shí),本域指示一個(gè)寄存器操作數(shù),當(dāng)mod≠11時(shí),本域指出存儲(chǔ)器操作數(shù)的有效地址計(jì)算方法。位移量指令編碼中的位移量部分給出一個(gè)8位或16位的數(shù)用來(lái)進(jìn)行有效地址計(jì)算。
16位位移量是低字節(jié)在前,高字節(jié)在后。立即數(shù)指令編碼中的立即數(shù)部分給出一個(gè)8位或16位的立即數(shù)。注意:16位數(shù)是低字節(jié)在前,高字節(jié)在后。指令編碼舉例例:MOV[BX+DI-6],CL
機(jī)器碼:
10001000,01001001,11111010=88H,49H,F(xiàn)AH例:ADDAX,BX
機(jī)器碼:0000001111
000
011
操作碼DW尋址AXBX=03H,C3H100010DWModregr/mdisp8第三章8086的尋址方式和指令系統(tǒng)3.18086的尋址方式3.2指令的機(jī)器碼表示方法3.38086的指令系統(tǒng)(1)數(shù)據(jù)傳送指令;(2)算術(shù)運(yùn)算指令;(3)邏輯指令與移位指令;(4)字符串操作指令;(5)控制轉(zhuǎn)移指令;(6)處理器控制指令;3-38086指令系統(tǒng)8086匯編指令系統(tǒng)包括100多條指令,分為6組:(1)數(shù)據(jù)傳送指令;(2)算術(shù)運(yùn)算指令;(3)邏輯指令與移位指令;(4)字符串操作指令;(5)控制轉(zhuǎn)移指令;(6)處理器控制指令;
一、數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令是最簡(jiǎn)單、最常用的一類(lèi)指令,它是負(fù)責(zé)把數(shù)據(jù)、地址、或立即數(shù)傳送到寄存器或存儲(chǔ)單元中。一、數(shù)據(jù)傳送指令共14條,分為4組通用數(shù)據(jù)傳送指令MOVXLATPOPPUSHXCHG輸入輸出地址傳送指令LEAINLDSOUTLES標(biāo)志傳送指令LAHFPUSHFSAHFPOPF1、通用傳送指令
(1)MOV目的,源①源和目的操作數(shù)不能都是存儲(chǔ)單元操作數(shù),一般至少有一個(gè)是寄存器②目的操作數(shù)不能是立即數(shù),也不能是CS寄存器,IP寄存器不能用作源或目的寄存器③不允許兩個(gè)段寄存器之間傳送數(shù)據(jù)④立即數(shù)不能直接送段寄存器⑤不影響標(biāo)志位功能:(源)(目的)例1:MOVAX,10ACH;10ACH(AX)例:錯(cuò)誤的MOV指令如下所示:MOVAX,BL;類(lèi)型不匹配MOVDS,1000H;不允許立即數(shù)送段寄存器MOV[BX],[SI];不允許內(nèi)存操作數(shù)之間傳送MOVES,CS;不允許段寄存器之間傳送MOVCS,AX;CS不能作為目的操作數(shù)例:設(shè)B是已定義的字節(jié)變量,以下是一些錯(cuò)誤和正確的指令。MOVAX,B;錯(cuò)誤,類(lèi)型不匹配MOVAX,0;正確,MASM可以判斷出要送字0(2)PUSH源;壓棧(SP)-2(SP),(源)((SP+1),(SP))(3)POP目的;彈棧((SP+1),(SP))(目的),(SP+2)(SP)①以上2條指令只能對(duì)字操作②不能POPCS下面舉例:例PUSHBXCS=1000H,IP=0030H,SS=2000H,SP=0040H,BX=2340H(4)XCHG目的,源
該指令將源和目的的值互換①兩個(gè)操作數(shù)必須有一個(gè)在寄存器中,可以是字節(jié)或字②可以在寄存器之間或寄存器和存儲(chǔ)器之間交換數(shù)據(jù)③不允許使用段寄存器
例7:XCHG BX,[BP+SI]
若(BX)=6F30H,(BP)=0200H,(SI)=0046H
(SS)=2F00H,(2F246H)=4154H
源操作數(shù)的物理地址=2F000H+0200H+0046H=2F246H
執(zhí)行該指令后:(BX)=4154H,(2F246H)=6F30H(5)XLAT
把一種編碼表示轉(zhuǎn)換為另一種編碼表示。XLAT指令在使用前需將編碼表的首地址裝入BX,將表的一個(gè)索引值裝入AL,索引值為0-255。例8:設(shè)(DS)=A000HA000:001030H(BX)=0010H31H
表的起始地址為A0010H,表中放數(shù)字0-9的ASCII碼
MOV BX,0010HMOV AL,06HXLATA000:001636H
執(zhí)行該程序后,(AL)=36H例:用XLAT指令求數(shù)字5的七段碼值TABLEDB40H,79H,24H,30H,19H;七段碼表格DB12H,02H,78H,00H,18H..MOVAL,5;數(shù)字5的偏移量MOVBX,OFFSETTABLE;表格首地址XLATTABLE;查表得AL=12H(1)IN累加器,端口地址(2)OUT端口地址,累加器以上指令的累加器可為AL或AX當(dāng)端口地址在0-255之間時(shí)可用立即尋址方式,否則需將端口地址先放入DX中,然后使用間接尋址方式。例9:IN AL,20HMOV DX,0AB4H;注意字母不能是開(kāi)頭
OUTDX,AL2輸入輸出指令3、地址傳送指令
(1)LEA目的,源用來(lái)把源操作數(shù)的偏移地址傳送給目的操作數(shù)。LEA指令中目的操作數(shù)必須是16位的通用寄存器。例:LEABX,[BX+DI+6]指令執(zhí)行前若(BX)=1000H,(DI)=0200H則指令執(zhí)行后,(BX)=1206H(2)LDS目的,源將源操作數(shù)指定的存儲(chǔ)器中4個(gè)連續(xù)字節(jié)傳送給目的操作數(shù)和DS。傳送時(shí)低2字節(jié)裝入目的操作數(shù),高2字節(jié)裝入DS。
(3)LES目的,源與LDS相似,只是高字節(jié)裝入ES。例:LDSSI,[DI+100AH]若CS=1000H,IP=0604H,DS=2000H,DI=2400H執(zhí)行完后DS=2230H,SI=0180HLEA指令與MOV指令的區(qū)別:LEASI,BUFF指令是將標(biāo)號(hào)BUFF的偏移地址送入寄存器中;MOVSI,BUFF指令是將標(biāo)號(hào)BUFF所指存儲(chǔ)單元的內(nèi)容送入SI。BUFF=0123454800FEFFLEASI,BUFF;執(zhí)行后:(SI)=0002HMOVSI,BUFF;執(zhí)行后:(SI)=0048H段起始地址
LDS或LES指令將源操作數(shù)指定的4個(gè)連續(xù)字節(jié)單元內(nèi)容分別送入指令指定的寄存器以及DS或ES中。其中:低16位送到一個(gè)指定的字寄存器,高16位送到DS或ES中。57H13H68H24H例:(DS)=C000H,(C2480H)=1357H,(C2482H)=2468HDS:2480HDS:2481HDS:2482HDS:2483H13572468SIDSLDSSI,[2480H]4、標(biāo)志傳送指令(1)LAHF將標(biāo)志寄存器Flag的低字節(jié)傳送到AH(2)SAHF將AH寄存器內(nèi)容送到標(biāo)志寄存器Flag的低字節(jié)(3)PUSHF先將SP的值減2,再將16位的Flag入棧(4)POPF將當(dāng)前棧頂和次棧頂?shù)臄?shù)據(jù)彈出到Flag,再將SP的值加2,以指向新的棧頂?shù)谌?086的尋址方式和指令系統(tǒng)3.18086的尋址方式3.2指令的機(jī)器碼表示方法3.38086的指令系統(tǒng)(1)數(shù)據(jù)傳送指令;(2)算術(shù)運(yùn)算指令;(3)邏輯指令與移位指令;(4)字符串操作指令;(5)控制轉(zhuǎn)移指令;(6)處理器控制指令;二、算術(shù)運(yùn)算指令加法ADD減法SUBADCSBBINCDECAAANEGDAACMP除法DIVAASIDIVDASAAD乘法MULCBWIMULCWDAAM算術(shù)運(yùn)算指令可處理4種類(lèi)型的數(shù)據(jù):
類(lèi)型字節(jié)字不帶符號(hào)的二進(jìn)制數(shù)0-2550-65535帶符號(hào)的二進(jìn)制數(shù)-128-127-32768-32767不帶符號(hào)的壓縮十進(jìn)制數(shù)0-990-9999不帶符號(hào)的非壓縮十進(jìn)制數(shù)0-90-99運(yùn)算數(shù)據(jù)格式和對(duì)標(biāo)志位影響
對(duì)標(biāo)志位的影響:所有算術(shù)運(yùn)算指令都影響狀態(tài)標(biāo)志CF、PF、AF、ZF、SF和OF①當(dāng)無(wú)符號(hào)數(shù)運(yùn)算結(jié)果溢出時(shí),CF=1②當(dāng)有符號(hào)數(shù)運(yùn)算產(chǎn)生溢出時(shí),OF=1③當(dāng)運(yùn)算結(jié)果中低8位有偶數(shù)個(gè)1或0個(gè)1,則PF=1④若加法時(shí)第3位給第4位進(jìn)位,或減法時(shí)第3位從第4位借位,則AF=1⑤若運(yùn)算結(jié)果為0,則ZF=1⑥若運(yùn)算結(jié)果為負(fù)數(shù),則SF=11、加法指令A(yù)DD目的,源;ADDAL,27HADC目的,源;帶進(jìn)位的加法,如實(shí)現(xiàn)多字節(jié)加法,下面是做4字節(jié)的加法
MOVAX,[SI]ADD[DI],AXMOVAX,[SI+2]ADC[DI+2],AXINC目的:自加1,例如:INCAX注:對(duì)ADD和ADC1.這兩條指令的源操作數(shù)和目的操作數(shù)可以是存儲(chǔ)器,寄存器和立即數(shù)。2.目的操作數(shù)只能用寄存器或存儲(chǔ)單元3.但源好目的操作數(shù)不能同時(shí)為存儲(chǔ)器,而且他們的類(lèi)型必須一致(字或字節(jié))例:ADDWORDPTR[BX+106BH],1234HCS=1000H,IP=0300H,DS=2000H,BX=1200HAAA
調(diào)整兩個(gè)非壓縮十進(jìn)制數(shù)相加的結(jié)果,它不能單獨(dú)使用,總是跟在加法指令后,且總是對(duì)AL寄存器操作。結(jié)果是一個(gè)非壓縮十進(jìn)制數(shù),仍放在AL中,如果向高位有進(jìn)位AF=1,則進(jìn)到AH中。DAA
用于對(duì)兩個(gè)壓縮十進(jìn)制數(shù)的相加結(jié)果進(jìn)行調(diào)整,也總是跟在加法指令后。例:求6+7(非壓縮十進(jìn)制數(shù))指令如下:MOV AL,06 MOV BL,07 ADD AL,BL AAA00000110+00000111
(AL)=00001101因?yàn)椋ˋL)>9,要調(diào)整00000110
(AL)=00010011(AH)=1,(AL)=ALAND0FH=03例:求BCD48+BCD29(壓縮的十進(jìn)制數(shù))程序如下:MOV AL,48H ADD AL,29H DAA01001000+0010100101110001AF=1
調(diào)整+0000011001110111
2、減法指令SUB目的,源;不帶借位的減法SBB目的,源;帶借位的減法DEC目的;減1指令NEG目的;求補(bǔ)指令CMP目的,源;結(jié)果不送回,只影響狀態(tài)位AAS;減法的ASCII調(diào)整指令DAS;減法的十進(jìn)制調(diào)整指令例:若(AL)=9AH,執(zhí)行指令
SUB AL,65H后,各標(biāo)志位的值?
解:9AH-65H=9AH+(-65H),這里9AH本身是負(fù)數(shù)補(bǔ)碼
[-65H]補(bǔ)=10011011=9BH10011010+10011011100110101可以根據(jù)以前講過(guò)的溢出判斷方法來(lái)判斷是否溢出。
SF=0,ZF=0,AF=1,PF=1,CF=1,OF=1
運(yùn)算結(jié)果溢出。SBB目的,源;帶借位的減法目的=目的-源-CF求補(bǔ)指令:NEG目的(例24小時(shí)的補(bǔ)數(shù))求補(bǔ)是把操作數(shù)按位求反后,在最低位加1。即FFFFH-(目的)+1(目的)相當(dāng)于0-(目的)(目的)例:若(BX)=6780H,執(zhí)行NEGBX后,(BX)=?0000H
解:-6780HFFFFH-6780H+19880H=0000-6780H=9880H
執(zhí)行指令后,(BX)=9880H,是-6780的補(bǔ)碼
CF=1,OF=0,ZF=0,PF=0,AF=0
即對(duì)+6780求補(bǔ)得到-6780的補(bǔ)碼
比較指令CMP目的,源;目的-源(1)兩個(gè)無(wú)符號(hào)數(shù)比較判斷方法
ZF=1,目的=源
ZF=0,CF=0則目的>源
CF=1則目的<源(2)帶符號(hào)數(shù)比較
ZF=1,目的=源
ZF=0OF=1SF=1
或OF=0SF=0則目的>源
OF=1SF=0
或OF=0SF=1則目的<源
例:比較54與24的大小
解:54-24=54+(-24)
[-24]補(bǔ)=11101000,[54]補(bǔ)=0011011000110110+11101000100011110OF=0,SF=0,則目的>源,即54>24
例:比較120與-74的大小
解:120-(-74)=124+740111100001001010011000010OF=1,SF=1,則目的>源,即120>-74
減法的十進(jìn)制調(diào)整指令DAS和ASCII碼調(diào)整指令A(yù)AS總是緊跟在SUB和SBB指令之后,調(diào)整AL寄存器中的結(jié)果。兩個(gè)非壓縮的十進(jìn)制數(shù)或ASCII碼表示的十進(jìn)制數(shù)相減用AAS指令;兩個(gè)壓縮的十進(jìn)制數(shù)相減用DAS指令。3、乘法指令MUL源;無(wú)符號(hào)數(shù)乘法,只影響標(biāo)志位OF和CF,其他狀態(tài)標(biāo)志在執(zhí)行MUL指令后無(wú)定義。若運(yùn)算結(jié)果高字節(jié)(或高字)有效,則OF=1,CF=1。字節(jié)型乘法,一個(gè)乘數(shù)在AL中,在指令中給出另一個(gè)乘數(shù),結(jié)果放在AX中;字型乘法,一個(gè)乘數(shù)在AX中,指令中給出另一個(gè)乘數(shù),結(jié)果為雙字,高16位在DX中,低16位在AX中。IMUL源;有符號(hào)數(shù)乘法AAM
;兩個(gè)存在AL中的非壓縮十進(jìn)制數(shù)乘法的調(diào)整指令,只能在MUL指令后。調(diào)整算法:AH=AL/10AL=ALMOD10例:MULBYTEPTR[BX+2AH]CS=3000H,IP=0250H,AL=12H,DS=2000H,BX=0234H,源操作數(shù)是字節(jié)變量66H,實(shí)際上做12H×66H運(yùn)算結(jié)果高字節(jié)有效,則OF=1,CF=1,其他4個(gè)標(biāo)志無(wú)定義。例:MUL BL指令執(zhí)行前:AL=B4H=180,BL=11H=17指令執(zhí)行后:AX=0BF4H=3060例:IMUL BL指令執(zhí)行前:AL=B4H=-76,BL=11H=17指令執(zhí)行,先將AL的符號(hào)去掉,即76=4CH,先進(jìn)行4CH×11H=050CH。再進(jìn)行符號(hào)處理,正負(fù)得負(fù),即乘積應(yīng)該是負(fù)數(shù),因此將結(jié)果050CH求補(bǔ)碼:[050CH]求補(bǔ)=FAF4H,真值為-1292指令執(zhí)行后,AX==FAF4H,(-76)×17=-1292,BL=11H例:計(jì)算兩個(gè)非壓縮十進(jìn)制數(shù)9×5,編寫(xiě)程序段。解:AAM指令用來(lái)調(diào)整兩個(gè)非壓縮十進(jìn)制數(shù)相乘的結(jié)果,調(diào)整后得到的非壓縮十進(jìn)制數(shù)其高位放在AH中,低位放在AL中。
MOV AL,09 MOV BL,05 MUL BL AAM執(zhí)行該指令段后:AH=04H,AL=05H4、除法指令DIV源:無(wú)符號(hào)數(shù)除法
8位除法:AX/源的商在AL中,AX/源的余數(shù)在AH中
16位除法:(DX,AX)/源的商在AX中,余數(shù)在DX
IDIV源:有符號(hào)數(shù)除法AAD:調(diào)整非壓縮十進(jìn)制數(shù),調(diào)整被除數(shù),調(diào)整算法:AL=AH*10+ALAH=0CBW:將AL中字節(jié)的符號(hào)位擴(kuò)展到AH中,成為字CWD:將AX中字的符號(hào)位擴(kuò)展到DX中,成為雙字符號(hào)擴(kuò)展指令:字節(jié)擴(kuò)展到字CBW;將寄存器AL中的符號(hào)位擴(kuò)展到寄存器AH字?jǐn)U展到雙字CWD;將寄存器AX中的符號(hào)位擴(kuò)展到寄存器DX70AL70AH015AXDX150CBWCWD例:DIV BL
指令執(zhí)行前,AX=0400H,BL=B4H,即AX為無(wú)符號(hào)數(shù)1024,BL為無(wú)符號(hào)數(shù)180
指令執(zhí)行101商
101101000000010000000000101101001001100001011010001111100余數(shù)指令執(zhí)行后,AH=7CH(余數(shù)),AL=05H(商)例:IDIV BL指令執(zhí)行前,AX=0400H,BL=B4H(補(bǔ)碼),AX為有符號(hào)數(shù)+1024,而B(niǎo)L為有符號(hào)數(shù)-76指令執(zhí)行,先將BL=B4H求補(bǔ),[B4H]求補(bǔ)=4CH=761101商
010011000000010000000000010011000110100001001100011100000100110000100100余數(shù)正數(shù)除以負(fù)數(shù),商為負(fù)數(shù),必須對(duì)除法結(jié)果的商求補(bǔ):(0DH)求補(bǔ)=F3H,其真值為-13;余數(shù)為24H=36D。指令執(zhí)行后,AH=24H=36(余數(shù))
AL=F3H,真值-13(商)例:65/9,十進(jìn)制數(shù)除法只能是非壓縮BCD碼解:指令段如下:
MOV AH,6 MOV AL,5 AAD ;AAD調(diào)整的是被除數(shù)
MOV BL,9 DIV BL結(jié)果:商AL=7
余數(shù)AH=2
例:MULBLAAM;乘法的ASCII調(diào)整
如執(zhí)行指令前,(AL)=07H,(BL)=09H
執(zhí)行MUL后,(AL)=3FH
執(zhí)行AAM后,(AH)=06H,(AL)=03H
例:AAD;除法的ASCII調(diào)整執(zhí)行指令前(AX)=0604H
執(zhí)行指令后(AX)=0040H
三、邏輯運(yùn)算和移位指令1、邏輯運(yùn)算指令NOT目的
;取反指令A(yù)ND目的,源
;按位與指令OR目的,源
;按位或指令XOR目的,源
;按位異或指令TEST目的,源
;測(cè)試指令,與AND指令操作相同,只是不改變目的操作數(shù)的內(nèi)容
例:要求屏蔽一字節(jié)中的高4位(所謂屏蔽,就是將屏蔽位清0),可用ANDAL,0FH來(lái)實(shí)現(xiàn)。指令執(zhí)行前AL=39H
指令執(zhí)行后AL=09H
例:OR AL,80H,使AL中內(nèi)容的最高位置1,其余位不變。指令執(zhí)行前AL=2BH
指令執(zhí)行后AL=ABH
例:使寄存器清零,可以執(zhí)行XORAX,AX,自己與自己異或,結(jié)果為0
若AX=1ADEH
執(zhí)行該指令后,AX=0000H2、移位指令SHL/SAL目的,計(jì)數(shù);邏輯和算術(shù)左移SHR目的,計(jì)數(shù);邏輯右移SAR目的,計(jì)數(shù);算術(shù)右移(除2)ROL目的,計(jì)數(shù);不帶進(jìn)位循環(huán)左移ROR目的,計(jì)數(shù);不帶進(jìn)位循環(huán)右移RCL目的,計(jì)數(shù);帶進(jìn)位循環(huán)左移RCR目的,計(jì)數(shù);帶進(jìn)位循環(huán)右移
注意以下幾點(diǎn):
8086指令中的計(jì)數(shù)是指移位次數(shù),若該次數(shù)為1可直接寫(xiě)在指令中。如:SHRAL,1
若要移位多次,其次數(shù)必須放在CL寄存器中。如:
MOVCL,4 SHRAL,CL;AL的內(nèi)容邏輯右移4次
例:DS=F800H,DI=180AH,(F980AH)=0064H
執(zhí)行指令MOVCL,5SARWORDPTR[DI],CL后,結(jié)果?解:PA=F8000+180AH=F980AH,即對(duì)該單元內(nèi)容0064H算術(shù)右移5次,結(jié)果:(F980AH)=0003H,CF=0
四、字符串處理指令串操作指令對(duì)字節(jié)串或字串進(jìn)行每次一個(gè)元素(字節(jié)或字)的操作,被處理的串長(zhǎng)度可達(dá)64K字節(jié)。串操作指令使用隱含尋址方式,源串地址為DS:SI,目的串地址為ES:DI,待處理串的長(zhǎng)度放在CX中。串操作的重復(fù)前綴包括:REP;REPE/REPZ;REPNE/REPNZ;串操作SI和DI的增長(zhǎng)方向由DF標(biāo)志給出,DF=0地址增量,DF=1地址減量(1)串傳送和串比較指令MOVSB/MOVSW
串傳送指令,如:
MOVCX,100REPMOVSB
連續(xù)傳送100個(gè)字節(jié)CMPSB/CMPSW
串比較指令,例:如右邊的程序段檢測(cè)兩個(gè)串是否完全相同。若相同,程序轉(zhuǎn)到STR_EQUMOVSI,0400HMOVDI,0600HCLDMOVCX,64HREPZCMPSBJZSTR_EQU……STR_EQU:……例:REPMOVSB演示;REP是無(wú)條件重復(fù)DS=1000H,SI=2000H,ES=3000H,DI=1020H,CX=0064H,DF=0(2)串掃描操作指令SCASB/SCASW
串掃描指令,用AL或AX中的字節(jié)或字與ES:DI所指內(nèi)存單元的內(nèi)容比較,根據(jù)比較結(jié)果設(shè)置標(biāo)志位,并修改DI寄存器的值,以指向下一個(gè)串元素。例:尋找字符串中是否有字符‘$’?
CLDMOVCX,100 ;重復(fù)次數(shù)
MOVDI,0400HMOVAL,’$’ ;掃描的值是‘$’REPNESCASB ;找到‘$’,ZF=1JZZER ;若找到,則轉(zhuǎn)移到ZER….ZER:……(3)讀串和寫(xiě)串操作指令LODSB/LODSW;讀串讀串是將DS:SI所指存儲(chǔ)單元的內(nèi)容讀到AL或AX,并修改SI
STOSB/STOSW;寫(xiě)串寫(xiě)串指令,把AL或AX中的值寫(xiě)到ES:DI指定的地址
五、轉(zhuǎn)移指令當(dāng)程序發(fā)生轉(zhuǎn)移時(shí),CS和IP的值可由指令指定。段間轉(zhuǎn)移或段間調(diào)用可用FAR表示段內(nèi)轉(zhuǎn)移或段內(nèi)調(diào)用可用NEAR表示若短距離內(nèi)的轉(zhuǎn)移(-128-127),稱(chēng)為短轉(zhuǎn)移,用SHORT表示1、無(wú)條件轉(zhuǎn)移指令直接轉(zhuǎn)移:轉(zhuǎn)移的目標(biāo)地址直接出現(xiàn)在指令中間接轉(zhuǎn)移:轉(zhuǎn)移的目標(biāo)地址間接存在某一寄存器或某一內(nèi)存單元內(nèi)a段內(nèi)間接轉(zhuǎn)移,CS不變,IP值放在寄存器或內(nèi)存;b段內(nèi)直接轉(zhuǎn)移,CS不變,指令給出新的IP值;c段間直接轉(zhuǎn)移,新的CS和IP值,指令給出全部?jī)蓚€(gè)16位數(shù);d段間間接轉(zhuǎn)移,目標(biāo)地址的CS和IP都放在存儲(chǔ)器的4個(gè)連續(xù)單元中,前2個(gè)是偏移地址,后2個(gè)是段基址。JMP ;無(wú)條件轉(zhuǎn)移例:JMP1025H ;段內(nèi)直接轉(zhuǎn)移
JMP25H ;段內(nèi)直接短轉(zhuǎn)移
JMPBX ;段內(nèi)間接轉(zhuǎn)移
JMP3500H:080BH ;段間直接轉(zhuǎn)移
JMPDWORDPTR[BX+010AH]
;段間間接轉(zhuǎn)移,目標(biāo)地址存放在DS段從BX+010AH開(kāi)始的4個(gè)存儲(chǔ)單元中JMPSHORTOPR;段內(nèi)直接短轉(zhuǎn)移(IP)(IP)+8位位移量
JMPNEARPTROPR;段內(nèi)直接近轉(zhuǎn)移(IP)(IP)+16
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 房屋臨時(shí)出租合同范例
- 工程履約擔(dān)保合同合同范例
- 寄售代銷(xiāo)合同范例
- 常見(jiàn)勞動(dòng)合同模板
- 兼職外賣(mài)員合同范例
- 家裝鍋爐暖氣系統(tǒng)合同范例
- 廣聯(lián)達(dá)合同范例
- 醫(yī)院電力改造合同模板
- 承包金礦合同范例
- 加長(zhǎng)汽車(chē)出售合同范例
- 中職學(xué)生學(xué)習(xí)困難課件
- 外研版五年級(jí)上冊(cè)說(shuō)課標(biāo)說(shuō)教材課件
- 被巡察單位組織人事工作匯報(bào)集合5篇
- 青少年科技創(chuàng)新大賽培訓(xùn)課件
- 新聞編輯學(xué)--新聞稿件的選擇與編輯-54新聞差錯(cuò)的“更正”-課件
- 中學(xué)田徑基礎(chǔ)校本課程教材
- 人教版九年級(jí)英語(yǔ)全一冊(cè)(全套)課件
- 廣播操比賽打分表
- 學(xué)生奶培訓(xùn)課件
- 安全生產(chǎn)專(zhuān)項(xiàng)檢查及整改臺(tái)賬
- 商務(wù)部專(zhuān)員績(jī)效考核指標(biāo)量表
評(píng)論
0/150
提交評(píng)論