版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
微型計(jì)算機(jī)原理及應(yīng)用匯編語(yǔ)言與匯編程序23指令的格式操作數(shù)的尋址方式常用指令1機(jī)器指令——用二進(jìn)制編碼形式下達(dá)的指示和命令。如:1100110100100001
機(jī)器語(yǔ)言編寫程序煩瑣,難記憶,不易理解,易出錯(cuò)符號(hào)指令——由助記符、符號(hào)組成,它與機(jī)器指令一一對(duì)應(yīng)。1100110100100001
INT21H
匯編——機(jī)器只能識(shí)別機(jī)器指令,所以需要將符號(hào)指令翻譯成機(jī)器指令,翻譯的過(guò)程稱作匯編。匯編程序——完成匯編任務(wù)的程序。1E PUSHDS2BC0 SUBAX,AX50 PUSHAXB84D14 MOVAX,144DH8ED8 MOVDS,AX
匯編語(yǔ)言源程序匯編程序目標(biāo)文件匯編語(yǔ)言源程序——用符號(hào)指令書寫的程序。學(xué)習(xí)要點(diǎn)正確定義各種符號(hào),熟練使用地址表達(dá)式熟練掌握符號(hào)指令的尋址方式掌握符號(hào)指令匯編語(yǔ)言源程序的格式熟練掌握系統(tǒng)功能調(diào)用基本格式:
[標(biāo)號(hào):]操作碼助記符目的操作數(shù),源操作數(shù)[;注釋]標(biāo)號(hào):為該條指令所在內(nèi)存單元的符號(hào)地址,后面要跟冒號(hào)。標(biāo)號(hào)一般由字母開(kāi)頭,后跟字母、數(shù)字或特殊字符,不允許使用保留字。操作碼助記符:指示CPU執(zhí)行什么樣的操作。操作數(shù):分目的操作數(shù)和源操作數(shù)兩種。目的操作數(shù)是指令結(jié)果存放的位置,源操作數(shù)是指令操作的對(duì)象。注釋:說(shuō)明本條指令或一段程序的功能,使程序可讀性強(qiáng)。匯編程序?qū)ζ洳贿M(jìn)行處理。(1)標(biāo)號(hào)是給該指令所在地址取的名字,必須后跟冒號(hào)“:”,它可以缺省,是可供選擇的標(biāo)識(shí)符。86系列匯編語(yǔ)言中可使用的標(biāo)識(shí)符必須遵循下列規(guī)則:①標(biāo)識(shí)符由字母(a~z,A~Z)、數(shù)字(0~9)或某些特殊字符(@,-,?)組成。②第一個(gè)字符必須是字母(a~z,A~Z)或某些特殊的符號(hào)(@,-,?),但“?”不能單獨(dú)作標(biāo)識(shí)符。③標(biāo)識(shí)符有效長(zhǎng)度為31個(gè)字符,若超過(guò)31個(gè)字符,則只保留前面的31個(gè)字符為有效標(biāo)識(shí)符。下面是有效的標(biāo)識(shí)符:
START:MY-CODE:ALPHA:
NUM@-1:LOOP1:X:
?MORE-350:BETA-1:DELAYIS:下面是無(wú)效的標(biāo)識(shí)符:
4LOOP:MAIN
A/B:
BETA*:START=3:GAMA$1:
NUM+1:?:ONE*TWO:(2)指令助記符是指令名稱的代表符號(hào),它是指令語(yǔ)句中的關(guān)鍵字,不可缺省,它表示本指令的操作類型,必要時(shí)可在指令助記符的前面加上一個(gè)或多個(gè)“前綴”,從而實(shí)現(xiàn)某些附加操作。(3)操作數(shù)是參加本指令運(yùn)算的數(shù)據(jù),有些指令不需要操作數(shù),可以缺??;有些指令需要兩個(gè)操作數(shù),這時(shí)必須用逗號(hào)(,)將兩個(gè)操作數(shù)分開(kāi);有些操作數(shù)可以用表達(dá)式來(lái)表示。(4)注釋部分是可選項(xiàng),允許缺省,如果帶注釋則必須用分號(hào)(;)開(kāi)頭,注釋本身只用來(lái)對(duì)指令功能加以說(shuō)明,給閱讀程序帶來(lái)方便,匯編程序不對(duì)它做任何處理。以字母開(kāi)頭的一串字符為了區(qū)別符號(hào)和數(shù)據(jù),以字母開(kāi)頭的十六進(jìn)制數(shù),其前面要加一個(gè)前導(dǎo)0如:0FFH數(shù)據(jù)
FFH符號(hào)
符號(hào)匯編中的各種符號(hào)由偽指令定義,有常量、變量和標(biāo)號(hào)三類1符號(hào)指令中的表達(dá)式常用的有二進(jìn)制數(shù)、十進(jìn)制數(shù)、十六進(jìn)制數(shù)和ASCII字符如:1010B,10,0AH,’A’,’$’,’ABC’1.常量
—在匯編時(shí)已有確定數(shù)值的量ASCII字符做數(shù)值常量時(shí),需加單引號(hào)1.1常量和數(shù)值表達(dá)式(1)數(shù)值常量程序中為經(jīng)常使用的數(shù)值取的名。用EQU或“=”偽指令定義,如:PEQU314P=314注:匯編時(shí),匯編程序不給符號(hào)常量分配存儲(chǔ)單元(2)符號(hào)常量1.1常量和數(shù)值表達(dá)式數(shù)據(jù)存放規(guī)律字節(jié)數(shù)據(jù)---一個(gè)字節(jié)單元存放字?jǐn)?shù)據(jù)---二個(gè)字節(jié)單元存放雙字?jǐn)?shù)據(jù)---四個(gè)字節(jié)單元存放規(guī)定:(1)“低對(duì)低,高對(duì)高”(2)低位字節(jié)的地址為字的地址1、變量存儲(chǔ)區(qū)中數(shù)據(jù)的存放1.2變量在數(shù)據(jù)段或附加數(shù)據(jù)段中用偽指令定義[變量名]DB
表達(dá)式[,……];定義字節(jié)變量[變量名]DW
表達(dá)式[,……];定義字變量[變量名]DD
表達(dá)式[,……];定義雙字變量[變量名]DQ
表達(dá)式[,……];定義四字變量[變量名]DT
表達(dá)式[,……];定義六字節(jié)變量[變量名]DT
表達(dá)式[,……];定義十字節(jié)變量數(shù)據(jù)定義偽指令指明了變量的類型表達(dá)式確定變量的初值。表達(dá)式有如下6種:2.變量的定義1.2變量(1)表達(dá)式為常量或數(shù)值表達(dá)式→存入數(shù)值如:W1
DW
1(2)表達(dá)式為ASCII字符串→存入ASCII值如:W2
DW
’AB’
;用DW定義時(shí),串長(zhǎng)不可大于2
B2
DB
’AB$’;用DB定義時(shí),串長(zhǎng)可大于2(3)表達(dá)式為重復(fù)子句格式:NDUP(表達(dá)式)如:B3
DB
2
DUP(0)
B4
DB
2
DUP(5,’A’)1.3變量例:BDB3
W
DW1122H
1.3變量W2DW
1994HB2DB2DUP(-5,-1)DB1DUP(10,E);重復(fù)因子1不能省DB13,1,3例畫出數(shù)據(jù)的存儲(chǔ)形式1.3變量W2DW
1994HB2DB2DUP(-5,-1)DB1DUP(10,E);重復(fù)因子1不能省DW1,3例畫出數(shù)據(jù)的存儲(chǔ)形式1.3變量匯編語(yǔ)言與匯編程序13符號(hào)指令中的表達(dá)式操作數(shù)的尋址方式常用指令2符號(hào)指令的格式:
操作助記符[目的操作數(shù)][,源操作數(shù)]
;注釋操作助記符——指明指令進(jìn)行什么操作源操作數(shù)指明操作數(shù)據(jù)的地址;目的操作數(shù)既指明操作數(shù)據(jù)的地址,還指明(操作后)數(shù)據(jù)的存放地址尋址方式——根據(jù)操作數(shù)尋找操作數(shù)據(jù)(或數(shù)據(jù)的存放)地址的方式2
操作數(shù)的尋址方式操作數(shù)即為操作數(shù)據(jù),操作數(shù)據(jù)就在指令中立即尋址方式只能用于源操作數(shù),主要用來(lái)給寄存器或存儲(chǔ)器賦初值例:MOV5,AL╳
立即數(shù)沒(méi)有類型屬性1.立即尋址例:MOVAL,5;將字節(jié)05H送AL,AL=05HMOVAX,18;將字0012H送AX,AX=0012HMOVBL,-1;將字節(jié)FFH送BL,BL=0FFH操作數(shù)據(jù)在指定的寄存器中2.
寄存器尋址
例:AX=2035H,BX=0178HMOVBX,AX;BX=AX=2035HADDAL,BL;AL=ADH,BL=78HAH,AL,BH,BL,CH,CL,DH,DL→8位通用寄存器AX,BX,CX,DX,SI,DI,BP,SP→16位通用寄存器EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP→32位通用寄存器傳送指令助記符目的操作數(shù)源操作數(shù)操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址由指令直接給出(地址表達(dá)式中只有變量名和常量)3.直接尋址地址表達(dá)式為:變量名或常量或變量名+常量變量名:段地址默認(rèn)在DS中
例:MOVAX,W該指令的源操作數(shù)的地址為DS:OFFSETW常量:段地址默認(rèn)在DS中例:MOV AX,[2000H]如果DS=3000H,則執(zhí)行情況如圖所示。執(zhí)行結(jié)果為:AX=2040H直接尋址常用已定義的變量表示
例:W2DW-5,1994H
MOVAX,W2;AX=FFFBHMOVBX,W2+2;BX=1994H區(qū)分立即尋址與直接尋址從變量中取數(shù)據(jù)屬于直接尋址方式,注意與符號(hào)常量區(qū)別例:AAEQU10MOVAX,AA;立即尋址,AX=000AHMOVBX,AA+5;立即尋址,BX=000FH若BX=0124H,
MOV
CX,[BX];間接尋址,CX=1958HMOV
AX,BX
;寄存器尋址,AX=0124H
操作數(shù)為帶方括號(hào)的寄存器:[SI],[DI],[BX],[BP],[EAX]…[ESP]寄存器的內(nèi)容為操作數(shù)據(jù)的偏移地址4.間接尋址間接尋址只有一種形式[寄存器]間接尋址屬于存儲(chǔ)器尋址,寄存器內(nèi)容為操作數(shù)據(jù)的偏移地址。寄存器尋址中,寄存器內(nèi)容即為操作數(shù)據(jù)。只有SI,DI,BX,BP和32位的寄存器可用于間接尋址。
例:MOVAX,[ECX]MOVAX,[CX]
╳
若用BP間址,約定段寄存器為SS;否則,約定段寄存器為DS。
例:MOVAX,[BX];(DS:[BX])→AX
例:MOVAX,[BP];(SS:[BP])→AX
操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為基址寄存器(BX或BP或32位的寄存器)的內(nèi)容與變量的偏移地址、常量之和:
[變量名+基址寄存器+常量]
或變量名[基址寄存器+常量]例:MOVBL,2[BX]或MOVBL,[BX+2]
;(DS:[BX+2])→BL例:MOV6[BP],AX或MOV[BP+6],AX;AX→SS:[BP+6]段寄存器的確定,首先由變量確定;若無(wú)變量,則由寄存器確定,寄存器確定的原則同間址。4.1基址尋址4.2.變址尋址操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為變址寄存器(SI、DI或32位的寄存器)的內(nèi)容與變量的偏移地址、常量之和。
例:MOVAX,2[SI]或MOVAX,[SI+2]執(zhí)行的操作是(DS:[SI+2])→AX段寄存器的確定,首先由變量確定;若無(wú)變量,則由寄存器確定,寄存器確定的原則同間址。
如果指令執(zhí)行前DS=3000H,SI=2000H,COUNT的偏移地址為3000H,指令執(zhí)行情況如圖所示。指令執(zhí)行結(jié)束后,AX=3412H。MOV AX,[COUNT+SI]4.3.基址變址尋址例:MOVAX,4[BX+DI]
或MOVAX,[BX+DI+4];(DS:[BX+DI+4])→AX段寄存器的確定,首先由變量確定;若無(wú)變量,則由基址寄存器確定,基址寄存器確定的原則同間址。
基址寄存器和變址寄存器的位數(shù)要相同。操作數(shù)據(jù)在存儲(chǔ)器中,其偏移地址為指令中指定的基址寄存器和變址寄存器的內(nèi)容與變量的偏移地址、常量之和。例:W為一字變量,B為一字節(jié)變量,則:
MOVAL,W[BX]╳
MOVAL,BYTEPTRW[BX]√
MOVAX,B[SI+5]╳MOVAX,WORDPTRB[SI+5]√在符號(hào)指令中的基址,變址,基址變址三種尋址中,其位移量可以是常數(shù)或符號(hào)常量,還可以是變量名。若是變量名,它給出變量所在段的偏移地址,其意義是取變量單元中的數(shù)據(jù),所以其類型要與另一操作數(shù)的類型一致。
例:將立即數(shù)35H存入字節(jié)變量BUF+5單元中直接尋址:MOVBUF+5,35H間接尋址:MOVBX,OFFSETBUF+5MOVBYTEPTR[BX],35H基址尋址:MOVBX,5MOVBUF[BX],35H;常用間址、基址/變址訪問(wèn)一片連續(xù)的單元
例:B1DB’AB$’MOVAL,B1[BX];AL=41HMOVAH,B1[BX+1];AH=42H(2)存儲(chǔ)器尋址中段寄存器的確定存儲(chǔ)器尋址時(shí)段寄存器的基本約定和段更換見(jiàn)下表:存儲(chǔ)器存取方式約定段寄存器段更換偏移地址取指令CS不允許IP、EIP堆棧操作SS不允許SP、ESP數(shù)據(jù)存取(BP、EBP和ESP間址、基址除外)DS另外5個(gè)段寄存器EABP、EBP和ESP間址、基址數(shù)據(jù)存取SS另外5個(gè)段寄存器EA字符串處理指令的源串DSESCSSSSI、ESI字符串處理指令的目的串ES不允許DI、EDI有效地址EA(EffectiveAddress)是匯編程序計(jì)算后得到的地址表達(dá)式的偏移地址。匯編語(yǔ)言與匯編程序1符號(hào)指令中的表達(dá)式操作數(shù)的尋址方式常用指令23數(shù)據(jù)傳送指令加減運(yùn)算指令邏輯運(yùn)算指令移位指令其他常用指令注:學(xué)習(xí)時(shí)注意指令格式及功能3常用指令1.通用數(shù)據(jù)傳送指令格式:MOVdest,source
目的操作數(shù)源操作數(shù)功能:將一個(gè)字節(jié)或一個(gè)字或一個(gè)雙字?jǐn)?shù)據(jù)從源傳送至目的地址中,源保持不變3.1數(shù)據(jù)傳送類指令指令特點(diǎn):將數(shù)據(jù)從一個(gè)部位傳送到另一部位。不影響標(biāo)志寄存器中的狀態(tài)標(biāo)志位。MOV指令的9種形式:MOVREG,REGMOVREG,IMMMOVMEM,IMMMOVMEM,REGMOVREG,MEMMOVSEGREG,REG;CS除外MOVREG,SEGREGMOVSEGREG,MEM;CS除外MOVMEM,SEGREG3.1數(shù)據(jù)傳送類指令一個(gè)指令中,兩操作數(shù)類型必須一致至少1個(gè)操作數(shù)的類型要明確,不能出現(xiàn)二義性代碼段寄存器CS和立即數(shù)均不能作為目的操作數(shù)源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)存儲(chǔ)器操作數(shù)的類型由地址表達(dá)式的變量名確定立即數(shù)的類型不明確,不含變量名的地址表達(dá)式的類型也不明確。在立即數(shù)送存儲(chǔ)器的指令中,若存儲(chǔ)器操作數(shù)是不含變量名的地址表達(dá)式,則必需使用PTR來(lái)明確其中一個(gè)操作數(shù)的類型。注意:3.1數(shù)據(jù)傳送類指令(1)字節(jié)、字和雙字交換指令格式:XCHGdest,source
功能:將源地址與目的地址中的內(nèi)容互換
XCHGREG,REGXCHGREG,MEMXCHGMEM,REG2.數(shù)據(jù)交換指令3.1數(shù)據(jù)傳送類指令例如,數(shù)據(jù)段中有兩個(gè)字變量W1和W2,編寫程序段將兩個(gè)字變量互換
W1DW1234HW2DW5678H①用數(shù)據(jù)交換指令實(shí)現(xiàn):
MOVAX,W1;AX=1234HXCHGAX,W2;AX=5678H,W2=1234HMOVW1,AX;W1=5678H②僅用MOV指令實(shí)現(xiàn):
MOVAX,W1MOVBX,W2MOVW1,BXMOVW2,AX3.1數(shù)據(jù)傳送類指令3.棧操作指令堆棧的概念堆棧中數(shù)據(jù)的存取遵循“先進(jìn)后出”的原則。堆棧的活動(dòng)端稱為棧頂,固定端稱為棧底。80x86的堆棧的伸展方向是從高地址向低地址。堆棧操作都是字或雙字操作,進(jìn)棧時(shí)SP自動(dòng)減2/4,出棧時(shí)SP自動(dòng)加2/4。3.1數(shù)據(jù)傳送類指令(1)進(jìn)棧指令格式:PUSHsourceSP→0040HSP→003FHSP→003EH1234例:AX=1234HPUSHAX執(zhí)行AXAHAL1234執(zhí)行過(guò)程如下圖:3.1數(shù)據(jù)傳送類指令(2)出棧指令格式:POPdestBXBHBLSP→0040HSP→003FH12SP→003EH34執(zhí)行1234例:POPBX執(zhí)行過(guò)程如下圖:3.1數(shù)據(jù)傳送類指令使用棧操作指令實(shí)現(xiàn)將數(shù)據(jù)段中兩個(gè)字變量W1和W2互換的程序段如下:PUSHW1PUSHW2POPW1POPW23.1數(shù)據(jù)傳送類指令加減運(yùn)算的操作數(shù):注:兩操作數(shù)需類型相同,不能同為存儲(chǔ)器加減法指令執(zhí)行后的結(jié)果將影響狀態(tài)標(biāo)志
3.2加減運(yùn)算指令
1.加法類指令
(1)加法指令A(yù)DD格式:ADDdest,source操作:source+dest→dest
即將源操作數(shù)據(jù)與目的操作數(shù)據(jù)相加,結(jié)果存入目的地址中,源地址內(nèi)容不變(2)加進(jìn)位的加法指令A(yù)DC格式:ADCdest,source操作:dest+source+CF→dest
;CF為前面指令產(chǎn)生的CF例3個(gè)32位無(wú)符號(hào)數(shù)12345678H、8765ABCDH和2468FEDCH相加,其和(仍為32位無(wú)符號(hào)數(shù))存入雙字變量EQ中。用16位通用寄存器編寫的程序段如下程序段如下:
MOVDX,1234HMOVAX,5678HADDAX,0ABCDHADCDX,8765HADDAX,0FEDCHADCDX,2468HMOVWORDPTREQ,AXMOVWORDPTREQ+2,DX用32位通用寄存器編寫的程序段如下:MOVEAX,12345678HADDEAX,8765ABCDHADDEAX,2468FEDCHMOVEQ,EAX
格式:INCdest操作:dest+1→dest
例:MOVBX,1INCBX;BX=0002H該指令不影響CF,對(duì)其它標(biāo)志位的影響同ADDdest,1操作數(shù)只能為REG和MEM,類型要明確。例:INCCL√INC[SI]
×類型不明確→INCBYTEPTR[SI]
INC2000H
×立即數(shù)沒(méi)有類型該指令常用于修改偏移地址和計(jì)數(shù)次數(shù)(3)增量指令I(lǐng)NC
格式:DECdest
操作:dest-1→dest(1)減法指令SUB
2.減法類指令格式:SUBdest,source操作:dest-source→dest(2)帶借位減指令SBB格式:SBBdest,source操作:dest-source-CF
→dest;CF為前面指令產(chǎn)生的進(jìn)位(借位)(3)減量指令DEC例:2個(gè)32位無(wú)符號(hào)數(shù)8765ABCDH和2468FEDCH相減,其差放雙字變量EQ中。用16位通用寄存器編寫的程序段如下:MOVAX,0ABCDHSUBAX,0FEDCHMOVDX,8765HSBBDX,2468HMOVWORDPTREQ,AXMOVWORDPTREQ+2,DX用32位通用寄存器編寫的程序段如下:MOVEAX,8765ABCDHSUBEAX,2468FEDCHMOVEQ,EAX
(3)比較指令CMP
格式:CMPdest,source
操作:dest-source執(zhí)行減操作,只影響標(biāo)志,不改變操作數(shù)主要用來(lái)判斷兩數(shù)的大小與是否相等后面常跟條件轉(zhuǎn)移指令,根據(jù)比較結(jié)果實(shí)現(xiàn)程序的分支
1.求補(bǔ)指令格式:NEGdest操作:將操作數(shù)中的內(nèi)容求補(bǔ)后再送入操作數(shù)中單操作數(shù)指令,操作數(shù)只能是REG,MEM該指令是求補(bǔ)指令,而不是求補(bǔ)碼指令影響標(biāo)志,影響規(guī)律同減法指令3.3邏輯運(yùn)算指令若將執(zhí)行求補(bǔ)指令前后的數(shù)均視為補(bǔ)碼數(shù),則求補(bǔ)指令將該數(shù)變?yōu)榻^對(duì)值相等符號(hào)相反的另一個(gè)數(shù)。例:MOVAX,0FFFBH;AX=FFFBH
NEGAX;AX=0005H例:MOVBX,000AH;BX=000AHNEGBX;BX=FFF6H
格式:NOTdest操作:將操作數(shù)中的內(nèi)容逐位取反后再送回操作數(shù)中注:?jiǎn)尾僮鲾?shù)指令,操作數(shù)只能是REG,MEM該指令只是執(zhí)行求反操作,而不是求反碼指令,對(duì)符號(hào)位也求反
該指令不影響標(biāo)志位2.求反指令
格式:ANDdest,source操作:dest∧source→dest作用:取出目的操作數(shù)中與源操作數(shù)的“1”對(duì)應(yīng)的位例:MOVAX,0F6E5HANDAX,000FH;AX=0005H3.邏輯與指令
格式:ORdest,source
操作:dest∨source→dest
作用:將目的操作數(shù)和源操作數(shù)中的所有“1”位拼合在一起例:MOVBX,7B00H
ORBX,0056H;BX=7B56H→對(duì)應(yīng)“1”位置1,對(duì)應(yīng)“0”位則不變4.邏輯或指令
格式:XORdest,source
操作:dest⊕source→dest,
作用:將REG清0,也可將目的操作數(shù)中的某些位取反
例:MOVCX,35EBH
XORCX,00FFH;CX=3514H思考:用什么方法可以實(shí)現(xiàn)對(duì)通用寄存器清0?
XORAX,AXMOVAX,0SUBAX,AXANDAX,0
5.邏輯異或指令A(yù)ND、OR、XOR指令均為雙操作數(shù)指令,對(duì)源操作數(shù)和目的操作數(shù)的要求同加減指令,如下圖所示:AND、OR、XOR三條邏輯指令均將標(biāo)志位CF和OF清0,對(duì)PF、SF、ZF的影響同加操作此類指令常用于拆字、拼字例:將AX的高4位,CX的中間8位,BX的低4位拼合起來(lái),程序段如下:如:AX=1234H,BX=5678H,CX=9ABCH→AX=ACCBHANDAH,0F0H;取AX高4位,AH=10HANDBL,0FH;取BX低4位,BL=08HANDCX,0FF0H;取CX中間8位,CX=0AB0HORCH,AH;拼字CH=1AHORCL,BL;CL=0B8HCX=1AB8H目的操作數(shù)僅可以是REG或MEM源操作數(shù)為移位的次數(shù),只能是CL或立即數(shù)1~31,8086微處理器的立即數(shù)只能是1。
以CL為源操作數(shù)的移位指令執(zhí)行以后,CL的值不變移位指令為雙操作數(shù)指令,用于將目的操作數(shù)中的二進(jìn)制數(shù)移位3.4移位指令
格式:SHRdest,source操作:;最后移出位移至CF用0填補(bǔ)已空出的位
例:AL=abcdefghSHRAL,1;執(zhí)行后,AL=0abcdefg,CF=h例:AL=abcdefgh,CL=3SHRAL,CL;執(zhí)行后,AL=000abcde,CF=fdestCF01.邏輯右移SHR
格式:SARdest,source操作:;最后移出位移至CF,最高位向右移動(dòng)同時(shí)保持不變例:AL=abcdefghSARAL,1;執(zhí)行后,AL=aabcdefg,CF=hdestCF2.算術(shù)右移SAR注:邏輯右移SHR一位,等于對(duì)無(wú)符號(hào)數(shù)除以2運(yùn)算
例:MOVAL,0CH;AL=12SHRAL,1;AL=6算術(shù)右移SAR一位,等于對(duì)符號(hào)數(shù)除以2運(yùn)算
例:MOVCH,80H;CH=80H→-128SARCH,1;CH=C0H→-64
格式:SHLdest,sourceSALdest,source操作:;最后移出位移至CF用0填補(bǔ)已空出位
例:AL=abcdefghSHLAL,1;執(zhí)行后,AL=bcdefgh0,CF=adestCF03.算術(shù)/邏輯左移SAL/SHL
格式:RORdest,source操作:;右邊移出位移入CF,同時(shí)移入左邊空出位例:AL=abcdefghRORAL,1
執(zhí)行后,AL=habcdefg,CF=hdestCF4.循環(huán)右移ROR
格式:ROLdest,source操作:;左邊移出位移入CF,同時(shí)移入右邊空出位例:將相鄰字節(jié)變量B1(低地址)和B2中的兩個(gè)8位二進(jìn)制數(shù)交換
MOVCL,8ROLWORDPTRB1,CLdestCF5.循環(huán)左移ROL
格式:RCRdest,source操作:;前面指令產(chǎn)生的CF移至最高位
例:AL=abcdefgh,CF=i,CL=4RCRAL,CL執(zhí)行后,AL=fghiabcd,CF=edestCF6.帶進(jìn)位循環(huán)右移RCR
格式:RCLdest,source操作:;前面指令產(chǎn)生的CF移至最低位
例:AL=abcdefgh,CF=iRCLAL,1執(zhí)行后,AL=bcdefghi,CF=adestCF7.帶進(jìn)位循環(huán)左移RCL例1編寫程序段實(shí)現(xiàn)將字變量W中的無(wú)符號(hào)數(shù)除以8,商和余數(shù)分別放入字變量QUOT和字節(jié)變量REMA中思路:用邏輯右移1位的指令,將被除數(shù)按低位到高位的順序1次移1位.每次移入CF中的余數(shù),用帶進(jìn)位的循環(huán)右移指令移入字節(jié)變量REMA中.3位余數(shù)都移入字節(jié)變量REMA中后再用邏輯右移指令右移5位將3位余數(shù)從D7~D5移至D2~D0.3.4指令應(yīng)用舉例W DW65525QUOTDW0REMADB0MOVAX,W;AX=1111111111110101BSHRAX,1;AX=0111111111111010B,CF=1RCRREMA,1;REMA=10000000BSHRAX,1;AX=0011111111111101B,CF=0RCRREMA,1;REMA=01000000BSHRAX,1;AX=0001111111111110B,CF=1RCRREMA,1;REMA=10100000BMOVQUOT,AX;QUOT=0001111111111110BMOVCL,5SHRREMA,CL;REMA=00000101B移位過(guò)程如下圖所示:
還可以先取出余數(shù),再連續(xù)邏輯右移3位得商:
MOVREMA,7;最低3位的邏輯尺(7)
MOVAX,WANDREMA,AL;取余數(shù)
MOVCL,3SHRAX,CLMOVQUOT,AX使用32位指令編寫的程序段如下:MOVZXEAX,WROREAX,3MOVDWORDPTRQUOT,EAXROLWORDPTRREMA,3思路:(W)×10=(W)×(23+2)=(W)×23+(W)×216位無(wú)符號(hào)數(shù)乘以2和乘以8分別用左移1位和左移3位實(shí)現(xiàn)16位無(wú)符號(hào)乘以2有可能大于16位無(wú)符號(hào)數(shù)的最大值65535,因此要將它擴(kuò)展為32位的無(wú)符號(hào)數(shù)再乘以2,即用邏輯左移雙字來(lái)實(shí)現(xiàn)乘以2的操作
例2編寫程序段將字變量W中的無(wú)符號(hào)數(shù)乘以10,乘積存入變量J2中W DW65525J2DW0,0MOVAX,WXORDX,DX ;DX清0,擴(kuò)展為32位SHLAX,1 ;乘以2RCLDX,1MOVJ2+2,DX;保存乘以2的結(jié)果MOVJ2,AXSHL,AX,1 ;W中的內(nèi)容乘以4RCLDX,1SHLAX,1 ;W中的內(nèi)容乘以8RCLDX,1ADDJ2,AX ;2(W)+8(W)ADCJ2+2,DX該程序的移位指令的執(zhí)行過(guò)程如圖所示:
使用32位指令編寫的程序段如下:W DW65525J2 DD0MOVZXEAX,WSHLEAX,1MOVEDX,EAXSHLEAX,2 ADDEAX,EDXMOVJ2,EAX
例3字變量NUMW中有一無(wú)符號(hào)數(shù),編寫程序,計(jì)算(NUMW)16+30并將結(jié)果送入NUMW+2和NUMW
NUMWDW1234H,0 MOVCL,4ROLNUMW,CL
;將NUMW字單元中的1234H變成2341H
MOVAX,000FH ANDAX,NUMW;取低位字的最低4位AX=0001H
ANDNUMW,0FFF0H;清低位字的最低4位(NUMW)=2340H
ADDNU
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度網(wǎng)絡(luò)安全應(yīng)急響應(yīng)托管服務(wù)合同2篇
- 二零二五年度綠色建筑評(píng)價(jià)標(biāo)識(shí)工程聯(lián)營(yíng)協(xié)議3篇
- 二零二五年度大貨車司機(jī)職業(yè)風(fēng)險(xiǎn)防范合同范本3篇
- 網(wǎng)絡(luò)安全文化傳播與防范意識(shí)強(qiáng)化研究
- 2025版實(shí)訓(xùn)基地學(xué)生實(shí)習(xí)就業(yè)安全保障合同2篇
- 小學(xué)教育中的數(shù)學(xué)創(chuàng)新思維培養(yǎng)
- 清遠(yuǎn)廣東清遠(yuǎn)陽(yáng)山縣紀(jì)委監(jiān)委招聘政府購(gòu)買服務(wù)人員筆試歷年參考題庫(kù)附帶答案詳解
- 杭州浙江杭州市湖墅學(xué)校編外教師招聘筆試歷年參考題庫(kù)附帶答案詳解
- 二零二五年度智能家具制造承包合作協(xié)議3篇
- 2025年牛津譯林版選擇性必修1地理下冊(cè)月考試卷
- 肩袖損傷的護(hù)理查房課件
- 2023屆北京市順義區(qū)高三二模數(shù)學(xué)試卷
- 公司差旅費(fèi)報(bào)銷單
- 梁山伯與祝英臺(tái)小提琴譜樂(lè)譜
- 我國(guó)全科醫(yī)生培訓(xùn)模式
- 2021年上海市楊浦區(qū)初三一模語(yǔ)文試卷及參考答案(精校word打印版)
- 八年級(jí)上冊(cè)英語(yǔ)完形填空、閱讀理解100題含參考答案
- 八年級(jí)物理下冊(cè)功率課件
- DBJ51-T 188-2022 預(yù)拌流態(tài)固化土工程應(yīng)用技術(shù)標(biāo)準(zhǔn)
- 《長(zhǎng)津湖》電影賞析PPT
- 銷售禮儀培訓(xùn)PPT
評(píng)論
0/150
提交評(píng)論