章數(shù)據(jù)運(yùn)算與輸入輸出教學(xué)_第1頁
章數(shù)據(jù)運(yùn)算與輸入輸出教學(xué)_第2頁
章數(shù)據(jù)運(yùn)算與輸入輸出教學(xué)_第3頁
章數(shù)據(jù)運(yùn)算與輸入輸出教學(xué)_第4頁
章數(shù)據(jù)運(yùn)算與輸入輸出教學(xué)_第5頁
已閱讀5頁,還剩116頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第4章數(shù)據(jù)運(yùn)算與輸入輸出4.1算術(shù)運(yùn)算4.2邏輯運(yùn)算4.3移位和循環(huán)移位4.4CPU控制指令4.5字符的輸入與輸出2024/1/281匯編語言程序設(shè)計(jì)

掌握算術(shù)運(yùn)算指令,掌握邏輯運(yùn)算指令和移位指令,以及編程完成有關(guān)數(shù)值計(jì)算和表達(dá)式計(jì)算,進(jìn)一步熟練上機(jī)操作,并在DEBUG下運(yùn)行和觀察程序運(yùn)行結(jié)果。在掌握了字符的輸入和輸出后,應(yīng)能在程序中完成將計(jì)算結(jié)果直接在屏幕上輸出。本章要點(diǎn)第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/282匯編語言程序設(shè)計(jì)4.1算術(shù)運(yùn)算一、加法指令二、減法指令三、乘法指令四、除法和符號(hào)擴(kuò)展指令五、表達(dá)式計(jì)算第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/283匯編語言程序設(shè)計(jì)對(duì)操作數(shù)的要求尤其應(yīng)注意算術(shù)運(yùn)算指令對(duì)標(biāo)志位的影響無符號(hào)數(shù)和有符號(hào)數(shù)的區(qū)別

學(xué)習(xí)算術(shù)運(yùn)算指令應(yīng)注意4第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.1算術(shù)運(yùn)算CF=1,則表示無符號(hào)數(shù)運(yùn)算產(chǎn)生溢出OF=1,則表示有符號(hào)數(shù)運(yùn)算產(chǎn)生溢出區(qū)別主要表現(xiàn)在對(duì)溢出的判斷:2024/1/2842024/1/282024/1/2842024/1/28

ADD(ADDition)加法指令格式:ADDDST,SRC

執(zhí)行的操作:(DST)<——(SRC)+(DST)說明:目的操作數(shù):8/16/32位的寄存器/存儲(chǔ)器源操作數(shù):與目的操作數(shù)同類型的reg/mem/imm一、加法指令指令執(zhí)行的結(jié)果影響標(biāo)志位AF、CF、OF、PF、SF和ZF。5.1算術(shù)運(yùn)算5第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28

[例1]ADDAH,BH指令執(zhí)行前,設(shè)AH=56H,BH=24H。指令執(zhí)行

01010110 AH + 00100100 BH 01111010 AH

指令執(zhí)行后,AH=7AH,BH=24H,CF=OF=SF=ZF=PF=AF=0。

4.1算術(shù)運(yùn)算6第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28

[例2]ADDWORDPTR[BX],9F76H

指令執(zhí)行前,設(shè)DS=2000H,BX=1000H,(21000H)=88H,(21001H)=0A9H。 指令執(zhí)行:

1010100110001000 + 1001111101110110 1 0100100011111110指令執(zhí)行后,(21000H)=0FEH,(21001H)=48H,CF=OF=1,ZF=SF=PF=AF=0。

4.1算術(shù)運(yùn)算7第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28

ADC(ADdwithCarry)帶進(jìn)位加法指令格式:ADCDST,SRC 執(zhí)行的操作:(DST)<——(SRC)+(DST)+CF這條指令主要用于多字節(jié)(或多字)相加。[例3]兩個(gè)無符號(hào)的雙精度數(shù)(雙字)的加法的指令序列。

ADDAX,CX ;低位字相加

ADCDX,BX ;高位字帶進(jìn)位相加4.1算術(shù)運(yùn)算8第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28

INC(INCrement)加1指令格式:INCOPR

執(zhí)行的操作:(OPR)<——(OPR)+1說明:其中OPR可以是reg/mem,但不能是立即數(shù)和段寄存器操作數(shù)。

這條指令一般用于在循環(huán)指令中修改指針和循環(huán)次數(shù)用。該指令影響OF、SF、ZF、PF和AF,但是CF標(biāo)志位不受影響。4.1算術(shù)運(yùn)算9第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28

SUB(SUBtruction)減法指令格式:SUBDST,SRC

執(zhí)行的操作:(DST)<——(DST)-(SRC)說明:DST和SRC的尋址方式的規(guī)定同ADD指令

二、

減法指令指令執(zhí)行的結(jié)果影響標(biāo)志位AF、CF、OF、PF、SF和ZF。4.1算術(shù)運(yùn)算10第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28SBB(SuBtructwithBorrow) 帶借位減法格式:SBBDST,SRC

執(zhí)行的操作:(DST)<——(DST)-(SRC)-CF

主要用于多字節(jié)相減。

指令執(zhí)行的結(jié)果影響條件標(biāo)志位。

4.1算術(shù)運(yùn)算11第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28DEC(Decrement)減1指令格式:DECOPR 執(zhí)行的操作:(OPR)<——(OPR)-1說明:其中OPR可以是寄存器和存儲(chǔ)器操作數(shù),但不能是立即數(shù)和段寄存器操作數(shù)。 該指令影響OF、SF、ZF、PF和AF,但是CF標(biāo)志位不受影響(同INC)。 這條指令一般用于在循環(huán)指令中修改指針和循環(huán)次數(shù)用。(同INC)4.1算術(shù)運(yùn)算12第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28NEG(Negate)求補(bǔ)指令格式:NEGOPR

執(zhí)行的操作:(OPR)<——(OPR)補(bǔ) 或(OPR)<——0--(OPR)

影響6個(gè)標(biāo)志位,只有對(duì)0求補(bǔ)時(shí),CF=0,其余CF=1。對(duì)操作數(shù)的規(guī)定同INC指令4.1算術(shù)運(yùn)算13第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28CMP(Compare)比較指令格式:CMPOPR1,OPR2執(zhí)行的操作:(OPR1)-(OPR2)

該指令同SUB指令一樣執(zhí)行減法運(yùn)算,唯一不同的是,該指令不保存結(jié)果。 指令執(zhí)行的結(jié)果影響標(biāo)志位。

4.1算術(shù)運(yùn)算14第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28MUL無符號(hào)數(shù)乘法指令格式:MUL SRC ;B/W執(zhí)行的操作:AXAL(SRC) ;字節(jié)操作

DX、AXAX(SRC)

;字操作其中:隱含目的操作數(shù)

SRC可以是寄存器操作數(shù)和內(nèi)存操作數(shù)

SRC不能使用立即數(shù)和段寄存器

IMUL帶符號(hào)數(shù)乘法指令參加乘法運(yùn)算的是有符號(hào)數(shù),格式、操作方法和規(guī)定同MUL指令三、乘法指令4.1算術(shù)運(yùn)算15第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28雙操作數(shù)帶符號(hào)乘法指令格式:IMUL DST,SRC ;W/DW執(zhí)行的操作:DST(DST)(SRC)

其中:DES為reg16或reg32,

SRC為reg16/men16或reg32/mem32。

三操作數(shù)帶符號(hào)乘法指令格式:IMUL DST,SRC,imm ;W/DW執(zhí)行的操作:DST(SRC)imm

其中:DES為reg16或reg32,

SRC為reg16/men16或reg32/mem32。286以后增加的乘法指令*4.1算術(shù)運(yùn)算16第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28乘法指令對(duì)標(biāo)志位的影響除CF、OF以外無定義。對(duì)MUL: 乘積的高一半是0,CF=OF=0,否則為1。對(duì)IMUL

乘積的高一半是低一半的符號(hào)擴(kuò)展,CF=OF=0, 否則為1。對(duì)2操作數(shù)或3操作數(shù)的IMUL

乘積的結(jié)果正常,CF=OF=0;若結(jié)果溢出,CF=OF=1。4.1算術(shù)運(yùn)算17第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28乘法指令舉例[例4] MUL BL指令執(zhí)行前,AL=B4H=180,BL=11H=17指令執(zhí)行后,AX=0BF4H=3060,BL=11H,CF=OF=1[例5] IMUL BL指令執(zhí)行前,AL=B4H=-76,BL=11H=17指令執(zhí)行后,AX=FAF4H=-1292,BL=11H,CF=OF=1(指令的執(zhí)行:先將AL去掉符號(hào),即76=4CH,4CH11H=050CH,正負(fù)得負(fù),將050CH取補(bǔ),得到結(jié)果。)[例6] MUL BL指令執(zhí)行前,AL=04H=4,BL=11H=17指令執(zhí)行后,AX=0044H=68,BL=11H,CF=OF=0[例7] IMUL BL指令執(zhí)行前,AL=FBH=-5,BL=11H=17指令執(zhí)行后,AX=FFABH=-85,BL=11H,CF=OF=04.1算術(shù)運(yùn)算18第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28DIV無符號(hào)數(shù)除法指令(unsignedDIVide)IDIV帶符號(hào)數(shù)除法指令(sIgnedDIVide)CBW字節(jié)轉(zhuǎn)換為字指令(ConvertBytetoWord)CWD字轉(zhuǎn)換為雙字指令(ConvertWordtoDoubleword)

四、除法和符號(hào)擴(kuò)展指令4.1算術(shù)運(yùn)算19第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28除法指令

DIV無符號(hào)數(shù)除法指令格式:DIV SRC ;B/W執(zhí)行的操作:ALAX/(SRC)的商 ;字節(jié)操作

AH

AX/(SRC)的余數(shù)

AX

DXAX/(SRC)的商 ;字操作

DX

DXAX/(SRC)的余數(shù)其中:SRC的規(guī)定同乘法指令

DIV指令的被除數(shù)、除數(shù)、商和余數(shù)都是無符號(hào)數(shù)。

4.1算術(shù)運(yùn)算20第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28除法指令

IDIV

帶符號(hào)數(shù)除法指令格式:IDIV SRC ;B/W執(zhí)行的操作:與DIV相同,即:

ALAX/(SRC)的商 ;字節(jié)操作

AH

AX/(SRC)的余數(shù)

AX

DXAX(SRC)的商 ;字操作

DX

DXAX(SRC)的余數(shù)其中:SRC的規(guī)定同乘法指令

IDIV指令的被除數(shù)、除數(shù)、商和余數(shù)都是帶符號(hào)數(shù)

余數(shù)的符號(hào)同被除數(shù)的符號(hào)4.1算術(shù)運(yùn)算21第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28除法指令對(duì)標(biāo)志位的影響標(biāo)志位AF、CF、OF、PF、SF、ZF均無定義4.1算術(shù)運(yùn)算22第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28除法指令的幾點(diǎn)注意1.用IDIV指令時(shí),商的范圍應(yīng)在-128~127或32768~32767。若超出該范圍則作為除數(shù)為0處理,產(chǎn)生0號(hào)中斷,而不會(huì)使OF=1。2.用IDIV指令時(shí),余數(shù)的符號(hào)一定要和被除數(shù)相同。例如-308,得到商為-3,余數(shù)為-6,而不是商-4,余2。4.1算術(shù)運(yùn)算23第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28除法指令的幾點(diǎn)注意3.除法運(yùn)算中,要求16位數(shù)除以8位數(shù),當(dāng)被除數(shù)只有8位時(shí),必須將此8位數(shù)據(jù)放在AL中,并對(duì)高8位AH進(jìn)行符號(hào)擴(kuò)展。同樣,要求32位數(shù)除以16位數(shù),當(dāng)被除數(shù)只有16位時(shí),必須將此16位數(shù)據(jù)放在AX中,并對(duì)高16位DX進(jìn)行符號(hào)擴(kuò)展。如果不對(duì)AH或DX進(jìn)行符號(hào)擴(kuò)展,可能會(huì)得到錯(cuò)誤的結(jié)果。例如,4812:

MOV AL,30H ;被除數(shù)48(30H)用AL存放已足夠

MOV BL,12 ;或MOV BL,0CH DIV BL ;如果AH中有非0數(shù)據(jù),則結(jié)果錯(cuò)誤正確: MOV AL,30H MOV AH,0 ;無符號(hào)數(shù)

MOV BL,12 DIV BL或: MOV AL,30H CBW ;適用于無/有符號(hào)數(shù)

MOV BL,12 DIV BL4.1算術(shù)運(yùn)算24第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28除法指令的幾點(diǎn)注意4.除法運(yùn)算中的符號(hào)擴(kuò)展:對(duì)于無符號(hào)數(shù)除法指令DIV:

只要將AH或DX寄存器清0即可對(duì)于帶符號(hào)數(shù)除法指令I(lǐng)DIV:

AH或DX的擴(kuò)展就是低位字節(jié)(AL)或低位字(AX)的符號(hào)擴(kuò)展,具體是: 把AL中的最高位擴(kuò)展到AH的8位中(正數(shù)為00H,負(fù)數(shù)為FFH); 把AX中的最高位擴(kuò)展到DX的16位中(正數(shù)為0000H,負(fù)數(shù)為FFFFH);專門的符號(hào)擴(kuò)展指令CBW和CWD

4.1算術(shù)運(yùn)算25第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28除法指令舉例[例8] DIV BL指令執(zhí)行前,AX=0400H=1024,BL=B4H=180指令執(zhí)行后,AH=7C4H=124(余數(shù)),AL=05H(商), 不影響標(biāo)志位[例9] IDIV BL指令執(zhí)行前,AX=0400H=1024,BL=B4H=-76指令執(zhí)行后,AH=24H=36(余數(shù)),AL=F3H=-13(商), 不影響標(biāo)志位,注意余數(shù)與被除數(shù)同號(hào)。(指令的執(zhí)行:先將BL求補(bǔ),即為4CH=76,0400H4CH得商0DH=13、余數(shù)24H=36,正數(shù)除以負(fù)數(shù),商應(yīng)為負(fù)數(shù),所以對(duì)結(jié)果0DH求補(bǔ),得到商的結(jié)果F3H=-13,余數(shù)符號(hào)不變。)帶符號(hào)數(shù)的除法同帶符號(hào)的乘法指令一樣,先求補(bǔ)變成無符號(hào)數(shù),結(jié)果商再求補(bǔ),余數(shù)符號(hào)同被除數(shù)。4.1算術(shù)運(yùn)算26第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28CBW字節(jié)轉(zhuǎn)換為字指令(ConvertBytetoWord)格式:CBW執(zhí)行的操作:AL中的符號(hào)位擴(kuò)展到8位的AH中。若AL中 最高位為0,則AH=00H;若AL中最高位為1, 則AH=FFH;CWD字轉(zhuǎn)換為雙字指令(ConvertWordtoDouble-word)格式:CBW執(zhí)行的操作:AX中的符號(hào)位擴(kuò)展到16位的DX中。若AX中 最高位為0,則DX=0000H;若AX中最高位 為1,則DXH=FFFFH;

符號(hào)擴(kuò)展指令4.1算術(shù)運(yùn)算27第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28符號(hào)擴(kuò)展指令不影響標(biāo)志位CDQ雙字轉(zhuǎn)換為四字指令(ConvertDouble-wordtoQuad-word)格式:CDQ執(zhí)行的操作:EAX中的符號(hào)位擴(kuò)展到EDX,形成EDX:EAX的64位數(shù)據(jù)。CWDE字轉(zhuǎn)換為雙字指令(ConvertWordtoExtendedDoubleword)格式:CBWE執(zhí)行的操作:AX中的內(nèi)容擴(kuò)展為EAX。4.1算術(shù)運(yùn)算28第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28

利用算術(shù)運(yùn)算指令根據(jù)優(yōu)先級(jí)順序進(jìn)行。注意操作數(shù)的類型、執(zhí)行指令所使用的寄存器,以及中間結(jié)果的存放。

五、表達(dá)式計(jì)算4.1算術(shù)運(yùn)算29第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28[例10] 計(jì)算(V-(X

Y+Z-540))/X其中X、Y、Z、V均為16位帶符號(hào)數(shù),已分別裝入X、Y、Z、V字單元中。要求計(jì)算結(jié)果的商存人AX中,余數(shù)存人DX中。 MOV AX,X IMUL Y MOV CX,AX MOV BX,DX MOV AX,Z CWD ADD CX,AX ADC BX,DX SUB CX,540 SBB BX,0 MOV AX,V CWD SUB AX,CX SBB DX,BX IDIV X4.1算術(shù)運(yùn)算30第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28[例11]A、B、C、D均為有符號(hào)字變量,計(jì)算:Z=確定計(jì)算順序如下:A+B→(A+B)/2→暫存中間結(jié)果;A-C→暫存中間結(jié)果;B+C→(B+C)*3→(B+C)*3/(A-C)→(B+C)*3/(A-C)+

(A+B)/2→保存最終結(jié)果。確定各次運(yùn)算的數(shù)據(jù)類型:A+B擴(kuò)展為32b,(A+B)/2結(jié)果為16b;(B+C)*3結(jié)果為32b,A-C結(jié)果為16b,(B+C)*3/(A-C)

結(jié)果為16b,最終結(jié)果為16b。4.1算術(shù)運(yùn)算31第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28MOV AX,A ;取操作數(shù)AADD AX,B ;進(jìn)行運(yùn)算“A+B”CWD ;把被除數(shù)擴(kuò)展為32bMOV BX,2 ;除數(shù)轉(zhuǎn)入寄存器IDIV BX ;進(jìn)行運(yùn)算(A+B)/2MOV BX,AX ;把商轉(zhuǎn)存到BXMOV CX,A ;取分母第一個(gè)操作數(shù)SUB CX,C ;進(jìn)行運(yùn)算“A-C”MOV AX,B ;取分子第一個(gè)操作數(shù)ADD AX,C ;進(jìn)行運(yùn)算“B+C”MOV DX,3 ;乘數(shù)轉(zhuǎn)入寄存器IMUL DX ;進(jìn)行運(yùn)算(B+C)*3IDIV CX ;進(jìn)行運(yùn)算(B+C)*3/(A-C)ADD AX,BX ;運(yùn)算(B+C)*3/(A-C)+(A+B)/2MOV Z,AX ;保存最終結(jié)果4.1算術(shù)運(yùn)算32第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2BCD數(shù)運(yùn)算* (十進(jìn)制調(diào)整指令)一、壓縮BCD數(shù)運(yùn)算二、非壓縮BCD數(shù)運(yùn)算第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/2833匯編語言程序設(shè)計(jì)

算術(shù)運(yùn)算指令都是二進(jìn)制數(shù)的運(yùn)算,為了便于十進(jìn)制運(yùn)算,8088指令系統(tǒng)有一組用于十進(jìn)制調(diào)整的指令,將二進(jìn)制的運(yùn)算結(jié)果調(diào)整得到十進(jìn)制的結(jié)果。 BCD碼(BinaryCodedDecimal)用4位二進(jìn)制數(shù)表示1位十進(jìn)制數(shù),又稱8421碼。十進(jìn)制數(shù)與BCD碼對(duì)應(yīng)表0 00011 00012 00103 0011: :9 1001十進(jìn)制調(diào)整指令

BCD碼34第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2BCD數(shù)運(yùn)算2024/1/28342024/1/28

在PC機(jī)中有壓縮的BCD碼和非壓縮的BCD碼兩種格式表示。壓縮的BCD碼 用4位二進(jìn)制數(shù)表示一個(gè)十進(jìn)制數(shù)位,整個(gè)十進(jìn)制數(shù)形成為一個(gè)順序的以4位為一組的數(shù)串。如

4567的壓縮型BCD碼表示為4567H或 0100010101100111B非壓縮的BCD碼 以8位二進(jìn)制數(shù)表示一個(gè)十進(jìn)制數(shù)位,8位中的低4位表示BCD碼,而高4位沒有意義。如

4567的非壓縮型BCD碼表示為04050607H等或

0100

0101

0110

0111B4.2BCD數(shù)運(yùn)算35第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28BCD運(yùn)算的調(diào)整原理

[例12]用BCD碼計(jì)算27 27H+ 00110110 36H————————— 01011101 低4位大于9(冗余碼)+ 00000110 加6調(diào)整————————— 01100011 63 正確結(jié)果4.2BCD數(shù)運(yùn)算36第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28BCD運(yùn)算的調(diào)整原理

[例13]用BCD碼計(jì)算19 19H+ 00101000 28H————————— 01000001 低4位向高位產(chǎn)生進(jìn)位+ 00000110 加6調(diào)整————————— 01000111 47 正確結(jié)果4.2BCD數(shù)運(yùn)算37第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28BCD運(yùn)算的調(diào)整原理[例14]用BCD碼計(jì)算56 56H+ 01110111 77H————————— 11001101 低4位大于9+ 00000110 加6調(diào)整————————— 11010011 高4位大于9+ 01100000 高位加6調(diào)整—————————100110011 133 結(jié)果正確4.2BCD數(shù)運(yùn)算38第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28BCD碼運(yùn)算調(diào)整規(guī)則

1.凡是對(duì)應(yīng)位運(yùn)算結(jié)果大于9時(shí),則該位加6調(diào)整。

2.若該位和數(shù)有向高位進(jìn)位時(shí),也在該位加6調(diào)整。3.低位調(diào)整結(jié)果使高位大于9時(shí),高位進(jìn)行加6調(diào)整。4.2BCD數(shù)運(yùn)算39第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28一、壓縮型BCD調(diào)整指令

DAA(DecimalAdjustforAddition)

DAS(DecimalAdjustforSubtraction)4.2BCD數(shù)運(yùn)算40第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28加法的十進(jìn)制調(diào)整指令

DAA(DecimalAdjustforAddition)格式:DAA執(zhí)行的操作:(DAA指令前必須先執(zhí)行ADD或ADC 的加法指令將兩個(gè)壓縮型BCD碼相加, 且結(jié)果在AL中)

AL

把AL中的和調(diào)整到壓縮型BCD格式對(duì)標(biāo)志位的影響:對(duì)OF無定義,但影響其它標(biāo)志

4.2BCD數(shù)運(yùn)算41第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28[例15] ADD AL,BL DAA指令執(zhí)行前,AL=28H,BL=68H先執(zhí)行ADD指令:

00101000 AL+ 01101000 BL————————— 10010000 低4位向高位產(chǎn)生進(jìn)位再執(zhí)行DAA指令:

ALAL+6

得到AL=96H,為壓縮的BCD碼96d,十進(jìn)制加法的結(jié)果。4.2BCD數(shù)運(yùn)算42第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28減法的十進(jìn)制調(diào)整指令DAS(DecimalAdjustforSubtraction)格式:DAS執(zhí)行的操作:(DAS指令前必須先執(zhí)行SUB或SBB 的加法指令將兩個(gè)壓縮型BCD碼相減, 且結(jié)果在AL中)

AL

把AL中的差調(diào)整到壓縮型BCD格式對(duì)標(biāo)志位的影響:對(duì)OF無定義,但影響其它標(biāo)志

4.2BCD數(shù)運(yùn)算43第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28[例16] SUB AL,BL DAS指令執(zhí)行前,AL=86H,BL=07H先執(zhí)行SUB指令:

10000110 AL+ 00000111 BL————————— 01111111 低4位向高位有借位再執(zhí)行DAS指令:

ALAL-6

得到AL=79H,為壓縮的BCD碼79d,十進(jìn)制減法的結(jié)果。4.2BCD數(shù)運(yùn)算44第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28二、非壓縮型BCD調(diào)整指令

AAA(AsciiAdjustforAddition)AAS(AsciiAdjustforSubtraction)AAM(AsciiAdjustforMultiplication)AAD(AsciiAdjustforDivision)4.2BCD數(shù)運(yùn)算45第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28加法的ASCII調(diào)整指令

AAA(AsciiAdjustforAddition)格式:AAA執(zhí)行的操作:(AAA指令前必須先執(zhí)行ADD或ADC 的加法指令將兩個(gè)非壓縮型BCD碼相加, 且結(jié)果在AL中)

AL

把AL中的和調(diào)整到非壓縮型BCD格式

AHAH+調(diào)整中產(chǎn)生的進(jìn)位值(0或1)對(duì)標(biāo)志位的影響:影響AF和CF,其余標(biāo)志位無定義

4.2BCD數(shù)運(yùn)算46第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28[例17] ADD AL,BL AAA指令執(zhí)行前,AX=0535H,BL=39H先執(zhí)行ADD指令:

00110101 AL,5的ASCII碼+ 00111001 BL,9的ASCII碼————————— 01101110 低4位大于9再執(zhí)行DAS指令:

ALAL+6

AHAH+1,AF置1,AL高4位清0,AF送CF。得到AX=0604H,為非壓縮的BCD碼55+9=64的正確結(jié)果。

4.2BCD數(shù)運(yùn)算47第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28兩個(gè)數(shù)的加法要分4次進(jìn)行。最低2位數(shù)的加法(78+66)用ADD指令相加,DAA指令調(diào)整。其余三次加法用ADC指令相加,DAA指令調(diào)整。上面的4次運(yùn)算可以用循環(huán)實(shí)現(xiàn)。運(yùn)算前通過指令“ADDAL,0”把CF清零,4次加法統(tǒng)一使用ADC指令實(shí)現(xiàn)。[例18]用BCD數(shù)進(jìn)行運(yùn)算:12345678EP401.ASM4.2BCD數(shù)運(yùn)算48第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28DATA SEGMENTA DD 12345678H B DD 33445566HX DD ?DATA ENDS4.2BCD數(shù)運(yùn)算49第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28CODE SEGMENT ASSUME DS:DATA,CS:CODESTART: MOVAX,DATA MOV DS,AX MOV DI,0 ;設(shè)置指針初值

MOV CX,4 ;循環(huán)次數(shù)

ADD AL,0 ;CF清零,CLC,AND等NEXT: MOVAL,BYTEPTRA[DI];取出A的兩位BCD數(shù)

ADC AL,BYTEPTRB[DI];與B的對(duì)應(yīng)兩位相加

DAA ;BCD加法調(diào)整

MOV BYTEPTRX[DI],AL ;保存結(jié)果

INC DI ;修改指針

LOOP NEXT ;計(jì)數(shù)和循環(huán)控制

MOV AX,4C00H INT 21HCODE ENDS END STARTEP401.ASM4.2BCD數(shù)運(yùn)算50第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算邏輯與指令 AND邏輯或指令 OR邏輯非指令 NOT邏輯異或指令 XOR測(cè)試指令 TEST第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/2851匯編語言程序設(shè)計(jì)1.按位操作2.NOT為單操作數(shù)指令,不允許立即數(shù)和段寄存器。3.其余為雙操作數(shù)指令,操作數(shù)的規(guī)定同算術(shù)運(yùn)算指令。邏輯運(yùn)算指令的特點(diǎn)

4.2邏輯運(yùn)算52第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28邏輯指令對(duì)標(biāo)志位的影響NOT指令不影響標(biāo)志位AND、OR、XOR、TEST指令:使CF=OF=0,AF無定義影響SF、ZF、PF。53第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算格式:AND DST,SRC ;B/W執(zhí)行的操作:(DST)

(DST)AND(SRC)

用途: 使某操作數(shù)中的若干位不變、若干位清0,稱之為屏蔽某些位。1. AND邏輯與指令54第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算邏輯運(yùn)算指令舉例

[例19] 要求屏蔽一字節(jié)中的0、1位,可用

AND AL,0FCH指令執(zhí)行前,AL=0B9H 10111001 AND 11111100 ————————— 10111000 指令執(zhí)行后:AL=0B8H,達(dá)到屏蔽的目的。55第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算邏輯運(yùn)算指令舉例

[例20] 要求屏蔽一字節(jié)中的高4位,可用

AND AL,0FH指令執(zhí)行前,AL=39H 00111001 AND 00001111 ————————— 00001001

指令執(zhí)行后:AL=09H,達(dá)到屏蔽的目的。56第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算格式:OR DST,SRC ;B/W執(zhí)行的操作:(DST)

(DST)OR(SRC) 用途: 使某操作數(shù)中的若干位不變、若干位置1。 也可以對(duì)兩個(gè)操作數(shù)進(jìn)行組合。2. OR邏輯或指令57第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算邏輯運(yùn)算指令舉例

[例21] 要求將AL中的內(nèi)容最高位置1,可用

OR AL,80H指令執(zhí)行前,AL=2BH 00101011 OR 10000000 ————————— 10101011 指令執(zhí)行后:AL=0ABH58第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算格式:XOR DST,SRC ;B/W執(zhí)行的操作:(DST)

(DST)XOR(SRC)

用途: 可使某操作數(shù)清0,同時(shí)使CF=0; 也可使某個(gè)操作數(shù)中的若干位不變、若干位取反。3. XOR邏輯異或指令59第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算邏輯運(yùn)算指令舉例

[例22] 要求將AL中的操作數(shù)0、1位變反,其它位保持不變。

XOR AL,3指令執(zhí)行前,AL=0B9H 10111001 XOR 00000011 ————————— 10111010 指令執(zhí)行后:AL=0BAH60第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算邏輯運(yùn)算指令舉例

[例23] 要求將AX寄存器的內(nèi)容清0,可用

XOR AX,AX指令執(zhí)行后,AX=0,且CF=OF=0。

00101011 XOR 00101011 ————————— 00000000 注意:與MOVAX,0的區(qū)別。61第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算格式:NOT OPR ;B/W執(zhí)行的操作: (OPR)

(OPR)取反

注意: 不允許立即數(shù)和段寄存器; 不影響標(biāo)志位。4. NOT邏輯非指令62第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算邏輯運(yùn)算指令舉例

[例24] NOT AL指令執(zhí)行前,AL=65H=01100101B指令執(zhí)行后,AL=10011010B=9AH63第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算格式:TEST DST,SRC ;B/W執(zhí)行的操作:

(DST)AND(SRC),不回送結(jié)果,影響標(biāo)志位 用途: 在不希望改變?cè)械牟僮鲾?shù)的情況下,用來檢測(cè)某一位或某幾位是否滿足條件,可作為條件轉(zhuǎn)移指令的先行指令。64第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算5.TEST測(cè)試指令邏輯運(yùn)算指令舉例

[例25] 若要檢測(cè)AL中的最高位是否為1,若為1則轉(zhuǎn)到EXIT去執(zhí)行,否則繼續(xù)順序執(zhí)行。

TEST AL,80H JNZ EXIT

EXIT: :65第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算邏輯運(yùn)算指令舉例

[例26] 判斷AL中的無符號(hào)數(shù)是否為偶數(shù),若為奇數(shù)則將其改變?yōu)榕紨?shù)。

TEST AL,1 JZ DOWN AND AL,0FEH DOWN:66第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算*386及以后機(jī)型增加的指令,簡單了解:

位測(cè)試

BT位測(cè)試并置1 BTS位測(cè)試并置0 BTR位測(cè)試并變反 BTC正向位掃描 BSF反向位掃描 BSR67第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.2邏輯運(yùn)算4.3移位和循環(huán)移位第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/2868匯編語言程序設(shè)計(jì)一般移位指令

SHLSHRSALSLR循環(huán)移位

ROLRORRCLRCR雙精度移位指令(386以上)

SHLD SHRDSHL(SHiftlogicalLeft) 邏輯左移

SHR(SHiftlogicalRight) 邏輯右移

SAL(ShiftArithmeticLeft) 算術(shù)左移

SAR(ShiftArithmeticRight) 算術(shù)右移

ROL(ROtateLeft) 循環(huán)左移

ROR(ROtateRight) 循環(huán)右移

RCL(RotateLeftthroughCarry)帶進(jìn)位循環(huán)左移

RCR(RotateRightthroughCarry)帶進(jìn)位循環(huán)右移

SHLD(ShiftLeftDouble) 雙精度左移

SHRD(ShiftRightDouble) 雙精度右移69第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.3移位和循環(huán)移位移位指令的格式

(以SHL邏輯左移指令為例,適用于所有的移位指令)格式:SHL OPR,CNT ;B/W其中:

OPR為通用寄存器和內(nèi)存操作數(shù),不允許立即數(shù)和段寄存器;移位次數(shù)由CNT決定,CNT可取1或CL寄存器數(shù)(8086),32位機(jī)CNT可取8位立即數(shù),從1~31,例3.68。SHL AL,1 ;CNT=1每執(zhí)行一次只以一位MOV CL,7SHL AL,CL;CNT為CL移位次數(shù)大于1,應(yīng)在移位指令前,把移位次數(shù)置于CL寄存器中。70第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.3移位和循環(huán)移位雙精度移位指令的格式

(以SHLD邏輯左移指令為例,適用于所有的移位指令)格式:SHLD DST,REG,CNT ;W/DW其中:

DST為除立即數(shù)以外的字或雙字操作數(shù);

REG為寄存器操作數(shù),長度同DST;移位次數(shù)由CNT決定,CNT可取1到31或CL寄存器數(shù);執(zhí)行后REG內(nèi)容不變。例: SHLD EBX,ECX,16執(zhí)行前,(EBX)=12345678H,(ECX)=13572468H執(zhí)行后,(EBX)=56781357H,(ECX)=13572468H,CF=071第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.3移位和循環(huán)移位移位指令執(zhí)行的操作圖示

SHL和SAL兩條指令的功能完全一樣;在DBUG下,只使用SHL;雙精度移位指令的操作見圖3.15。72第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.3移位和循環(huán)移位移位指令對(duì)標(biāo)志位的影響一般移位指令影響標(biāo)志位CF、OF、PF、SF和ZF。循環(huán)移位指令只影響CF和OF。AF無定義OF位只有當(dāng)CNT=1時(shí)才有效。在執(zhí)行一位移位后,如果移位前后符號(hào)位發(fā)生了變化,則OF=1,否則OF=0。73第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.3移位和循環(huán)移位移位指令舉例

[例27] SAL AH,1指令執(zhí)行前,AH=0A5H=10100101B指令執(zhí)行后,AL=01001010B=4AH,且CF=1,OF=1,ZF=0,SF=0,PF=0。74第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.3移位和循環(huán)移位移位指令舉例

[例28] MOV CL,5 SAR WORDPTR[DI],CL指令執(zhí)行前,DS=2000H,DI=0100H,(20100H)=64H,(20101H)=00H。指令執(zhí)行后,(20100H)=03H,(20101H)=00H,且CF=0,OF=0。相當(dāng)于100/32=375第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.3移位和循環(huán)移位移位指令的主要用途

循環(huán)移位可以改變操作數(shù)中所有位的位置。移位指令常用來做乘以2或除以2操作:

帶符號(hào)數(shù): SAL用來乘以2 SAR用來除以2

無符號(hào)數(shù): SHL用來乘以2 SHR用來除以2移位指令也常用于數(shù)據(jù)的組合。76第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.3移位和循環(huán)移位移位指令舉例

[例29] AX=0012H,BX=0034H,要求把它們裝配在一起形成AX=1234H。

MOV AX,0012H MOV BX,0034H MOV CL,8 ROL AX,CL ;ROR,SHL,SAL OR AX,BX ;ADD[例30] 兩個(gè)非壓縮型BCD碼AH=05H,AL=09H,要求把它們組合成壓縮型BCD碼,結(jié)果放在AL中。

MOV CL,4 ROL AH,CL ;ROR,SHL,SAL OR AL,AH ;ADD77第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.3移位和循環(huán)移位4.4CPU控制指令一、標(biāo)志處理指令二、處理器控制指令第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/2878匯編語言程序設(shè)計(jì)一、標(biāo)志處理指令

7條處理標(biāo)志位的指令,直接對(duì)CF、DF、IF進(jìn)行操作,改變標(biāo)志位的狀態(tài)。都是無操作數(shù)指令。CLI IF0STI IF1CLC CF0STC CF1CMC CF取反CLD DF0STD DF14.4CPU控制指令79第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28二、處理器控制指令

也都是無操作數(shù)指令HLT:暫停指令:使CPU暫停程序執(zhí)行,進(jìn)入暫停狀態(tài)。復(fù)位信號(hào)RESET可使CPU退出暫停狀態(tài)。NOP:空操作:不執(zhí)行如何對(duì)數(shù)據(jù)的操作,但是使用了3個(gè)時(shí)鐘周期,1個(gè)字節(jié),并使IP加1。用于軟件延時(shí)或者在程序調(diào)試時(shí)取代其他指令的位置。4.4CPU控制指令80第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出一、字符的輸出二、字符的輸入2024/1/2881匯編語言程序設(shè)計(jì)第4章數(shù)據(jù)運(yùn)算與輸入輸出一、字符的輸出向顯示器輸出信息有三種方法:

通過操作系統(tǒng)的服務(wù)程序(INT21H)輸出;通過“基本輸入輸出系統(tǒng)(BIOS)”輸出;把顯示內(nèi)容(ASCII代碼)直接寫入“顯示存儲(chǔ)器(VideoRAM,VRAM)”,由顯示器接口電路轉(zhuǎn)換輸出。本章首先介紹使用DOS功能調(diào)用進(jìn)行輸出的方法。82第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出(1)輸出單個(gè)字符例:下面的程序在顯示器上輸出數(shù)字字符“9”:

MOV AH,2 ;功能號(hào)02H MOV DL,39H ;字符“9”的ASCII代碼

INT 21H ;調(diào)用21H號(hào)系統(tǒng)服務(wù)程序DL←待輸出字符的ASCII代碼AH←02HINT21H字符“9”顯示在光標(biāo)(Cursor)位置,光標(biāo)向右移動(dòng)一個(gè)字符位置。83第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出[例31]在顯示器上輸出文字“Hello!”CODE SEGMENTASSUME CS:CODESTART: LEA BX,STRING MOV CX,7ONE: MOV DL,CS:[BX] ;取一個(gè)字符的ASCII碼

MOV AH,2 ;單個(gè)字符輸出的功能號(hào)

INT 21H ;DOS調(diào)用,輸出一個(gè)字符

INC BX ;修改指針

LOOP ONE ;計(jì)數(shù)與循環(huán)控制

MOV AX,4C00H INT 21HSTRING DB “Hello!”CODE ENDS END STARTEP402A.ASM84第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出MOV CX,11……STRING DB 0DH,0AH,“Hello!”,0DH,0AHSTRING在代碼段里定義,取字符需要增加段跨越前綴“CS:[BX]”,否則會(huì)到“DS:[BX]”處取字符,輸出不確定的內(nèi)容。代碼為0DH的字符稱為“回車(CarriageReturn,CR)”,把光標(biāo)移動(dòng)到本行的第一個(gè)字符位置,代碼為0AH的字符稱為“換行(LineFeed,LF)”,把光標(biāo)移動(dòng)到下一行的相同位置上。EP402B.ASM85第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出(2)輸出一個(gè)字符串

字符串以字符“$”為結(jié)束標(biāo)志,該字符本身不輸出。DS:DX←待輸出字符串的首地址AH←09HINT 21H86第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出CODE SEGMENT ASSUME CS:CODE,DS:CODESTART: MOVAX,CODE

MOV DS,AX LEA DX,STRING MOV AH,9 INT 21H MOV AX,4C00H INT 21HSTRING DB0AH,0DH,“Hello!”,0AH,0DH,‘$’CODE ENDS END STARTEP402C.ASM87第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出[例32]在顯示器上用十進(jìn)制格式輸出單字節(jié)無符號(hào)數(shù)的值。DATA SEGMENTX DB10110111BC10 DB10DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODESTART: MOVAX,DATA MOVDS,AX MOVCX,3 ;循環(huán)次數(shù)

MOVAL,XEP403.ASM88第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出ONE: MOV AH,0 ;高8位清零

DIV C10 ;執(zhí)行16b÷8b除法

PUSHAX ;把余數(shù)(在AH中)壓入堆棧

LOOPONE MOV CX,3 ;重新裝載CXTWO: POP DX ;從堆棧中彈出余數(shù)(在DH中)

XCHGDH,DL ;把余數(shù)交換到DL OR DL,30H ;轉(zhuǎn)換成數(shù)字的ASCII代碼

MOVAH,2 INT 21H ;向顯示器輸出一個(gè)字符

LOOPTWO MOVAX,4C00H INT21HCODE ENDS ENDSTART89第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出二、字符的輸入(1) AH←01 INT 21H

鍵盤輸入字符后返回,ASCII碼在AL中,并回顯。(2) AH←07 INT 21H

鍵盤輸入字符后返回,ASCII碼在AL中,無回顯。(3)AH←08 INT 21H

鍵盤輸入字符后返回,ASCII碼在AL中,無回顯。同時(shí)檢測(cè)Ctrl+Break和Ctrl+C鍵的組合。(1)輸入一個(gè)字符90第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出[例33]從鍵盤輸入5個(gè)個(gè)位數(shù)字,求它們的和,存入SUM。DATA SEGMENTSUM DB ?DATA ENDS;---------------------------------------------CODE SEGMENTASSUME DS:DATA,CS:CODESTART: MOVAX,DATA MOV DS,AX EP404A.ASM91第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出 MOV CX,5 ;循環(huán)次數(shù)

MOV SUM,0 ;累加器清零ONE: MOV AH,1 ;輸入單個(gè)字符的功能號(hào)

INT 21H ;輸入一個(gè)字符,ASCII碼在AL中

AND AL,0FH ;ASCII碼轉(zhuǎn)換成二進(jìn)制數(shù)

ADD SUM,AL ;累加

LOOP ONE ;計(jì)數(shù)與循環(huán)

MOV AX,4C00H INT 21HCODE ENDS END START92第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出DS:DX←輸入緩沖區(qū)首地址AH←0AHINT 21H第一字節(jié):輸入字符存放區(qū)的大小。第二字節(jié):由系統(tǒng)填入實(shí)際輸入的字符個(gè)數(shù),不包括回車。第三字節(jié)之后:輸入字符存放區(qū),存放輸入的字符和回車。BUFFERDB81,?,81DUP(?)輸入緩沖區(qū)格式:(2)輸入一個(gè)字符串如果從鍵盤上輸入“ABCDE↙”,返回后,緩沖區(qū)各字節(jié)依次為:81,5,41H,42H,43H,44H,45H,0DH,……。93第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出[例34]從鍵盤輸入最多5個(gè)個(gè)位數(shù)字,求它們的和,存入SUM。DATA SEGMENTSUM DB ?BUFFER DB 6,?,6DUP(?)DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART: MOV AX,DATA MOV DS,AX LEA DX,BUFFER ;裝載輸入緩沖區(qū)首地址

MOV AH,0AH ;行輸入功能代號(hào)

INT 21H ;調(diào)用系統(tǒng)服務(wù)EP404B.ASM94第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出 MOV SUM,0 ;累加器清零

MOV CL,BUFFER+1;循環(huán)次數(shù)

MOV CH,0 LEA BX,BUFFER+2;裝載字符存放區(qū)首地址ONE: MOV AL,[BX] ;取出一個(gè)字符

AND AL,0FH ;ASCII碼轉(zhuǎn)換成二進(jìn)制數(shù)

ADD SUM,AL ;累加

INC BX ;修改指針

LOOP ONE ;計(jì)數(shù)與循環(huán)

MOV AX,4C00H INT 21HCODE ENDS END START95第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出[例35]從鍵盤上輸入不大于65535的十進(jìn)制數(shù),轉(zhuǎn)換成二進(jìn)制數(shù)。DATA SEGMENTBUFFER DB6,?,6DUP(?)C10 DW10X DW?DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODESTART: MOVAX,DATA MOVDS,AX LEA DX,BUFFER ;裝載輸入緩沖區(qū)首地址

MOV AH,0AH ;行輸入功能代號(hào)

NT 21H ;輸入一個(gè)數(shù),以回車結(jié)束。EP405.ASM96第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出2024/1/28962024/1/282024/1/28962024/1/282024/1/28962024/1/28 MOV AX,0 ;累加器清零

MOV CL,BUFFER+1 ;循環(huán)次數(shù)

MOV CH,0 LEA BX,BUFFER+2 ;字符存放區(qū)首地址ONE: MUL C10 ;P=P×10 MOV DL,[BX] ;取出一個(gè)字符

AND DL,0FH ;轉(zhuǎn)換成二進(jìn)制數(shù)

ADD AL,DL ;累加

ADC AH,0 INC BX ;修改指針

LOOP ONE ;計(jì)數(shù)與循環(huán)

MOV X,AX ;保存結(jié)果

MOV AX,4C00H INT 21HCODE ENDS END START4.5輸入與輸出97第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/28[例36]用查表法將一個(gè)32位二進(jìn)制無符號(hào)數(shù)按十六進(jìn)制數(shù)顯示。EP406.ASM98第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/284.5輸入與輸出2024/1/28982024/1/282024/1/28982024/1/282024/1/28982024/1/28注意使用32位尋址第4章 小結(jié)第4章數(shù)據(jù)運(yùn)算與輸入輸出2024/1/2899匯編語言程序設(shè)計(jì)

算術(shù)、邏輯、移位指令數(shù)量較多,主要用于數(shù)值計(jì)算和表達(dá)式計(jì)算,應(yīng)該注意每條指令對(duì)標(biāo)志位的影響。其中的CMP和TEST指令,在下一章的分支和循環(huán)程序中也經(jīng)常用到。

字符的輸入輸出,特別是1、2、9、10號(hào)功能調(diào)用應(yīng)熟練掌握,靈活使用。謝謝!2024/1/28100匯編語言程序設(shè)計(jì)第4章數(shù)據(jù)運(yùn)算與輸入輸出8、串操作指令

字符串連續(xù)地存貯在內(nèi)存儲(chǔ)器中,每個(gè)字符的編碼占用一個(gè)字節(jié)。2024/1/28101匯編語言程序設(shè)計(jì)一、與無條件重復(fù)前綴配合使用的串指令二、與有條件重復(fù)前綴配合使用的指令串操作指令的共同特點(diǎn):

2024/1/28102匯編語言程序設(shè)計(jì)源操作數(shù)由DS:[SI]提供(有時(shí)也可以由AL、AX、EAX提供);

目的操作數(shù)由ES:[DI]提供每執(zhí)行一次串操作,自動(dòng)修改SI和(或)DI,使其指向下一個(gè)字節(jié)、字或雙字方向標(biāo)志DF控制對(duì)SI、DI遞增或是遞減

指令STD將DF置1,指令CLD將DF清0一、與無條件重復(fù)前綴REP配合使用的指令

2024/1/28103匯編語言程序設(shè)計(jì)1.MOVS字符串傳送指令格式:MOVSB/MOVSW/MOVSD

執(zhí)行的操作:

(1)目的操作數(shù)單元←源操作數(shù),即ES:[DI]←DS:[SI](2)修改SI和DI值2024/1/28104匯編語言程序設(shè)計(jì)2.REP串重復(fù)操作前綴格式:

REP串操作指令

執(zhí)行的操作:重復(fù)執(zhí)行串操作指令,直到CX的值為零如果(CX)≠0:(1)(CX)=(CX)-1

(2)執(zhí)行串指令(3)轉(zhuǎn)向(1)如果(CX)=0,結(jié)束本指令操作2024/1/28105匯編語言程序設(shè)計(jì)[例1]把長度為100的字符串str1復(fù)制到str2開始的存儲(chǔ)單元中:假設(shè)已經(jīng)執(zhí)行如下指令,裝載了DS:SI和ES:DI。

MOVAX,SEGstr1 ;源數(shù)據(jù)的段地址

MOVDS,AX ;送入DS LEASI,str1 ;源數(shù)據(jù)的起始偏移地址送入SI MOVAX,SEGstr2 ;目的數(shù)據(jù)的段地址

MOVES,AX ;送入ES LEADI,str2 ;目的數(shù)據(jù)的起始偏移地址送入DI2024/1/28106匯編語言程序設(shè)計(jì)

MOVCX,100 ;字符串長度送入CXAGAIN:MOVAL,[SI] ;從源數(shù)據(jù)區(qū)取出一個(gè)字節(jié)

MOVES:[DI],AL ;存入目的數(shù)據(jù)區(qū)

INCSI ;修改源數(shù)據(jù)區(qū)指針

INCDI ;修改目的數(shù)據(jù)區(qū)指針

LOOPAGAIN ;重復(fù)上面的操作100次(1)用循環(huán)控制方法編寫的程序2024/1/28107匯編語言程序設(shè)計(jì)

CLD ;方向標(biāo)志DF清0 MOVCX,100 ;字符串長度送人CX REPMOVSB ;執(zhí)行100次MOVSB指令(2)用字符串傳送指令編寫的程序

MOVCX,100 ;字符串長度送入CXAGAIN:MOVSB ;從源數(shù)據(jù)傳送一個(gè)字節(jié)到目的數(shù)據(jù)區(qū)

LOOPAGAIN ;重復(fù)上面的操作100次(3)用帶重復(fù)前綴的字符串傳送指令編寫的程序2024/1/28108匯編語言程序設(shè)計(jì)格式:STOSB/STOSW/STOSD執(zhí)行的操作:(1)目的存儲(chǔ)單元←累加器字節(jié)操作:ES:[DI]←(AL)字操作:ES:[DI]←(AX)雙字操作:ES:[DI]←(EAX)(2)修改DI值IN

3.STOS存字符串指令2024/1/28109匯編語言程序設(shè)計(jì)MOV DI,1000HMOV CX,100XOR AL,ALREP STOSBSTOS可以與REP聯(lián)用MOV DI,1000HMOV CX,50MOV AX,0FFHREP STOSW兩組指令序列分別執(zhí)行后的結(jié)果有什么不同?2024/1/28110匯編語言程序設(shè)計(jì)格式:LODSB/LODSW/LODSD執(zhí)行的操作:(1)累加器←源存儲(chǔ)單元字節(jié)操作:(AL)←DS:[SI]

字操作:(AX)←DS:[SI]

雙字操作:(EAX)←DS:[SI]

(2)修改SI值4.LODS取字符串指令LODS一般不與REP聯(lián)用二、與有條件重復(fù)前綴配合使用的指令

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論