匯編試題題庫(kù)_第1頁(yè)
匯編試題題庫(kù)_第2頁(yè)
匯編試題題庫(kù)_第3頁(yè)
匯編試題題庫(kù)_第4頁(yè)
匯編試題題庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩123頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

以下加*的題不要求;加**的題本學(xué)期不要求。

L顯示數(shù)據(jù)區(qū)中的一個(gè)字符

DATASEGMENT

ADBy

DATAENDS

STACKSEGMENTSTACK

DB200DUP(O)

STACKENDS

CODESEGMENT

ASSUMEDS:DATA,SS:STACK,CS:CODE

START:MOVAX,DATA

MOVDS,AX

MOVDL,A;取要顯示的字符到DL中

MOVAH,2;調(diào)2號(hào)DOS系統(tǒng)功能調(diào)用顯示一位二進(jìn)制碼

INT21H

MOVAH,4cH;利用4CH號(hào)DOS系統(tǒng)功能調(diào)用退回DOS

INT21H

CODEENDS

ENDSTART

2.顯示數(shù)據(jù)區(qū)中的一個(gè)十進(jìn)制數(shù)字

DATASEGMENT

ADB8

DATAENDS

STACKSEGMENTSTACK

DB200DUP(O)

STACKENDS

CODESEGMENT

ASSUMEDS:DATA,SS:STACK,CS:CODE

START:MOVAX,DATA

MOVDS,AX

MOVDL,A;取要顯示的字符到DL中

ADDDL,30H;將十進(jìn)制數(shù)字變成ASCH碼

MOVAH,2;調(diào)2號(hào)DOS系統(tǒng)功能調(diào)用顯示一位二進(jìn)制碼

INT21H

MOVAH,4CH;利用4CH號(hào)DOS系統(tǒng)功能調(diào)用退回DOS

INT21H

CODEENDS

ENDSTART

3.10以內(nèi)的加法程序并顯示結(jié)果

DATASEGMENT

ADB6

BDB3

DATAENDS

STACKSEGMENTSTACK

DB200DUP(O)

STACKENDS

CODESEGMENT

ASSUMEDS:DATA,SS:STACK,CS:CODE

START:MOVAX,DATA

MOVDS,AX

MOVDL,A;取一個(gè)加數(shù)到DL中

ADDDL,B;加另一個(gè)加數(shù)

ADDDL,30H;將和變成ASCII碼

MOVAH,2;調(diào)2號(hào)DOS系統(tǒng)功能調(diào)用顯示一位二進(jìn)制碼

INT21H

MOVAH,4CH;利用4CH號(hào)DOS系統(tǒng)功能調(diào)用退回DOS

INT21H

CODEENDS

ENDSTART

4.以二進(jìn)制形式顯示一個(gè)字符的ASCII碼

DATASEGMENT

ADB'A,

BDB

CDBB,0DH,0AH,$

DATAENDS

STACKSEGMENTSTACK

DB200DUP(O)

STACKENDS

CODESEGMENT

ASSUMEDS:DATA,SS:STACK,CS:CODE

START:MOVAX,DATA

MOVDS,AX

LEADX,B;取“<A)=$"'首地址至ijDX中

MOVAH,9;利用9號(hào)DOS系統(tǒng)功能調(diào)用顯示(A)=

INT21H

MOVBL,A;取要顯示的字符到BL中

MOVCL,8;循環(huán)8次,每次顯示一位

NEXT:MOVDL,0;2號(hào)DOS系統(tǒng)功能調(diào)用要求將欲顯示的

;字符的ASCII碼放至DL中

SALBL,1;欲顯示的字符左移一位,移出部分到CF中

RCLDL,1;移出到CF中的部分移到DL中

ADDDL,30H;移入DL的可能是1,也可能是0,變成ASCII碼

MOVAH,2;調(diào)2號(hào)DOS系統(tǒng)功能調(diào)用顯示一位二進(jìn)制碼

INT21H

DECCL;循環(huán)次數(shù)減1

JNENEXT;如果減1后不到0,轉(zhuǎn)NEXT

LEADX,C;取變量C的首地址到DX中

MOVAH,9;利用9號(hào)DOS系統(tǒng)功能調(diào)用顯示單位“B”及回車(chē)換行

INT21H

MOVAH,4CH;利用4CH號(hào)DOS系統(tǒng)功能調(diào)用退回DOS

INT21H

CODEENDS

ENDSTART

5.二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)

將DO起字單元中存放的16位二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),并將其ASCII碼存入DI所指向的

緩沖區(qū)BUF中,最后顯示出來(lái)。

程序如下所示:

DATASEGMENT

BUFDB5DUP(?);預(yù)留5單元空間

DODW2A5H

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

MOVDI,OFFSETDO;將DI指向BUF的下一單元

MOVAX,DO;取要用來(lái)變十進(jìn)制數(shù)的數(shù)到AX

MOVBX,10;準(zhǔn)備除以10

MOVCX,0;準(zhǔn)備統(tǒng)計(jì)余數(shù)的個(gè)數(shù)

CHANGE10:DECDI;準(zhǔn)備存放余數(shù),往前倒存

INCCX

MOVDX,0;將除數(shù)的高16位(在DX中)清0,DX也將用來(lái)存放余數(shù)

DIVBX;DX,AX除以BX(BX=10)

ADDDL,30H;余數(shù)變?yōu)锳SCII碼值

MOVBYTEPTR[DI],DL;存儲(chǔ)十進(jìn)制數(shù)

CMPAX,0;是否為0?

JNZCHANGE10;不為0轉(zhuǎn)CHANGE10

CHANGE11:MOVDL,BYTEPTR[DI];取出存放在BUF中的卜進(jìn)制數(shù)到DL供顯示

MOVAH,2;顯示1個(gè)字符

INT21H

INCDI

LOOPCHANGE11

MOVAH,4CH;程序結(jié)束并返回DOS

INT21H

CODEENDS

ENDSTART

6.ASCII碼表示的十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)并顯示

將SI指向的緩沖區(qū)BUF中保存的五位ASCII碼卜進(jìn)制數(shù)(0-65535)轉(zhuǎn)換成對(duì)應(yīng)的二進(jìn)制

數(shù)并存放在DX中,再以二進(jìn)制形式顯示。

DATASEGMENT

BUFDB25092,

CDB,B;0DH,0AH;$,

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

MOVSLOFFSETBUF;將BUF的地址放到SI中

MOVDX,0;清DX為0;

MOVCX,5;置循環(huán)次數(shù)為5

MOVBX,10

GET_ASC:MOVAL,[SI];取出一個(gè)字符

CMPAL;0,;必須保證5個(gè)數(shù)都是十進(jìn)制數(shù)(0-9)

JBEXIT

CMPAL,*9'

JAEXIT;判斷是否是“0”-“9”

DEC_BIN:SUBAL,30H;減30H變二進(jìn)制數(shù)

MOVAH,0

PUSHAX;轉(zhuǎn)換為對(duì)應(yīng)的數(shù)并置于AX中,轉(zhuǎn)存堆棧

MOVAX,DX

MULBX;AX內(nèi)容乘10

MOVDX,AX

POPAX

ADDDX,AX;(DX)-(DX)*10+(AX)

INCSI;使指針SI指向下一個(gè)字符

DECex

JNZGET_ASC

MOVBX,DX;取要顯示的字符到BL中

MOVCL,16;移16次,最大數(shù)64000

NEXT:MOV「DX,0

SALBX,1

RCLDX,1

ADDDX,30H

MOVAH,2

INT21H

DECCL

JNENEXT

LEADX,C;取C的地址,以便顯示單位B與回車(chē)換行

MOVAH,9

INT21H

EXIT:MOVAH,4CH

INT21H

CODEENDS

ENDSTART

7.二進(jìn)制數(shù)到十六進(jìn)制數(shù)的轉(zhuǎn)換

二進(jìn)制整數(shù)轉(zhuǎn)換為ASCII碼十六進(jìn)制數(shù)的基數(shù)為16,顯示時(shí)注意從9到A,ASCII碼跳了7!

其他類(lèi)似于例4.8。

DATASEGMENT

BUFDB5DUP(?);預(yù)留5單元空間

DODW100010011010001IB

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

MOVDI,OFFSETDO;將口1指向BUF的下一單元

MOVCX,0

MOVAX,DO;取要用來(lái)變十六進(jìn)制數(shù)的數(shù)到AX

MOVBX,16;準(zhǔn)備除以16

CBUF10:DECDI;準(zhǔn)備存放余數(shù),往前倒存

INCCX

MOVDX,0;將除數(shù)的高16位(在DX中)清0,DX也將用來(lái)存放余數(shù)

DIVBX;DX,AX除以BX(BX=16)

ADDDL,30H;余數(shù)變?yōu)锳SCII碼值

MOVBYTEPTR[DI],DL;存儲(chǔ)十六進(jìn)制數(shù)

CMPAX,0;是否為0?

JNZCBUF10;不為0轉(zhuǎn)CBUF10

CHANGE11:MOVDL,BYTEPTR[DI];取出存放在BUF中的十六進(jìn)制數(shù)到DL供顯示

CMPDL,3AH;是否小于10?

JBCHANGE12;如果小于10轉(zhuǎn)顯示

ADDDL,7;否則為A到F之間數(shù),加7

CHANGE12:MOVAH,2;顯示1個(gè)字符

INT21H

INCDI

LOOPCHANGE11

MOVAH,4cH;程序結(jié)束并返回DOS

INT21H

CODEENDS

ENDSTART

8.ASCII碼表示的十六進(jìn)制數(shù)到二進(jìn)制數(shù)的轉(zhuǎn)換

從鍵盤(pán)輸入四位十六進(jìn)制數(shù),將其轉(zhuǎn)換十六位二進(jìn)制數(shù),并保存在DX寄存器中,再顯示。

程序分析:十六進(jìn)制數(shù)的數(shù)字符為0-9和a-f(或A-F),輸入后以ASCII碼30H-39H和

61H-66H(或41H-46H)存入AL。明顯,如是數(shù)字鍵0-9,其ASCII碼減去30H,即是該位十

六進(jìn)制數(shù)對(duì)應(yīng)的四位二進(jìn)制值。而如是字符鍵a-f或A-F,其ASCII碼則要分別減去57H和

37H,得到的差才是所輸入的十六進(jìn)制數(shù)字符對(duì)應(yīng)的四位二進(jìn)制值。

CODESEGMENT

ASSUMECS:CODE

START:MOVDX,0

MOVBL,4;輸入字符個(gè)數(shù)

INPUT:MOVAH.01H

INT21H;鍵盤(pán)輸入

SUBAL,30H

JLNEXT1;輸入的是十六進(jìn)制數(shù)外其它字符

CMPAL,0AH

JLCHANGE;輸入0-9

SUBAL,07H

CMPAL,0AH

JLNEXT1;輸入的是十六進(jìn)制數(shù)外其它字符

CMPAL,0FH

JLECHANGE;輸入A-F

SUBAL,20H

CMPAL,0AH

JLNEXT1;輸入的是十六進(jìn)制數(shù)外其它字符

CMPAL,0FH

JLECHANGE;輸入a-f

JMPNEXT1;輸入的是十六進(jìn)制數(shù)外其它字符

CHANGE:MOVCL,4

SHLDX,CL

MOVAH,0

ADDDX,AX;(DX)*-(DX)*16+(AX)

DECBL

JNZINPUT

NEXT1:MOVBX,DX;取要顯示的字符到BL中

MOVCL,16;移16次

NEXT2:MOVDX,0

SALBX,1

RCLDX,1

ADDDX,30H

MOVAH,2

INT21H

DECCL

JNENEXT2

MOVDL,B

MOVAH,2

INT21H

EXIT:MOVAH,4CH

INT21H

CODEENDS

ENDSTART

9.求計(jì)算二個(gè)字類(lèi)型無(wú)符號(hào)數(shù)的和并以十進(jìn)制形式顯示。設(shè)和的大小不超過(guò)16位二

進(jìn)制數(shù)。

DATASEGMENT

BUFDB5DUP(?)

ADW2598

BDW6234

DATAENDS

STACKSEGMENTSTACK

DB200DUP(O)

STACKENDS

CODESEGMENT

ASSUMEDS:DATA,SS:STACK,CS:CODE

START:MOVAX,DATA

MOVDS,AX

MOVAX,A

ADDAX,B

MOVDI,OFFSETA;將DI指向BUF的下一單元

MOVBX,10;準(zhǔn)備除以10

MOVCX,0;準(zhǔn)備統(tǒng)計(jì)余數(shù)的個(gè)數(shù)

CHANGE10:DECDI;準(zhǔn)備存放余數(shù),往前倒存

INCex

MOVDX,0;將除數(shù)的高16位(在DX中)清0,DX也將用來(lái)存放余數(shù)

DIVBX;DX,AX除以BX(BX=10)

ADDDL,30H;余數(shù)變?yōu)锳SCII碼值

MOVBYTEPTR[DI],DL;存儲(chǔ)十進(jìn)制數(shù)

CMPAX,0;是否為0?

JNZCHANGE10;不為0轉(zhuǎn)CHANGEI0

CHANGE11:MOVDL,BYTEPTRfDI];取出存放在BUF中的十進(jìn)制數(shù)到DL供顯示

MOVAH,2;顯示1個(gè)字符

INT21H

INCDI

LOOPCHANGE11

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

(1)將A、B改為:ADW2A5AH

BDW623FH

10.求B+C的和并以十六進(jìn)制形式顯示。

本程序段要求在數(shù)據(jù)區(qū)設(shè)置變量BUF與A,BUF設(shè)置情況為:DB5DUP(?)

A為其下的一個(gè)變量名。

DATASEGMENT

BUFDB5DUP(?)

ADW?

BDW2598

CDW6234

DATAENDS

STACKSEGMENTSTACK

DB200DUP(O)

STACKENDS

CODESEGMENT

ASSUMEDS:DATA,SS:STACK,CS:CODE

START:MOVAX,DATA

MOVDS,AX

MOVAX,B

ADDAX,C

MOVDI,OFFSETA;將DI指向BUF的下一單元

MOVCX,0

MOVBX,16;準(zhǔn)備除以16

CBUF10:DECDI;準(zhǔn)備存放余數(shù),往前倒存

INCCX

MOVDX,0;將除數(shù)的高16位(在DX中)清0,DX也將用來(lái)存放余數(shù)

DIVBX;DX,AX除以BX(BX=16)

ADDDL,30H;余數(shù)變?yōu)锳SCII碼值

MOVBYTEPTR[DI],DL;存儲(chǔ)十六進(jìn)制數(shù)

CMPAX,0;是否為0?

JNZCBUF10;不為0轉(zhuǎn)CBUF10

CHANGE11:MOVDL.BYTEPTR[DI];取出存放在BUF中的十六進(jìn)制數(shù)到DL供顯示

CMPDL,3AH;是否小于10?

JBCHANGE12;如果小于10轉(zhuǎn)顯示

ADDDL,7;否則為A到F之間數(shù),加7

CHANGE12:MOVAH,2;顯示1個(gè)字符

INT21H

INCDI

LOOPCHANGE11

EXIT:MOVAH,4CH;程序結(jié)束并返回DOS

INT21H

CODEENDS

ENDSTART

11.檢查4個(gè)輸入的數(shù),如果是16進(jìn)制數(shù)字就保留并顯示,否則停止輸入并退出。

CODESEGMENT

ASSUMECS:CODE

START:MOVDX,0

MOVBL,4;輸入字符最多多少個(gè)的個(gè)數(shù)

INPUT:MOVAH,01H

INT21H;鍵盤(pán)輸入

SUBAL,30H

JLEXIT;如果輸入小于0的字符退出

CMPAL,0AH;和0人相比較

JLCHANGE;如果小于0AH表示輸入的是0-9

SUBAL,07H;看看輸入的是不是大寫(xiě)的A-F

CMPAL,0AH;如果減07H后小于0AH表示比大寫(xiě)的A小

JLEXIT;小于表示輸入的是其它字符,退出

CMPAL,0FH;如果減07H后大于OFH,表示比F大

JLECHANGE;小于等于表示輸入的數(shù)在A-F之間,存到DX中去

SUBAL,20H;如果大于大寫(xiě)F,再看是否是a-f

CMPAL,0AH

JLEXIT;如果小于a,說(shuō)明輸入的是其它字符,退出

CMPAL,0FH;再看是否大于f

JLECHANGE;小于等于表示輸入的是a-f,存到DX中去

JMPEXIT;輸入其它字無(wú)條件退出

CHANGE:MOVCL,4

SHLDX,CL;DX中數(shù)左移4位(因?yàn)槭?6進(jìn)制數(shù))

MOVAH,0;清AH,只保留AL,再將DX中原來(lái)的數(shù)和AX中新數(shù)相加

ADDDX,AX;(DX)-(DX)*16+(AX)

DECBL;BL減1,控制做4次循環(huán)

JNZINPUT;再輸下一個(gè)數(shù)直到4個(gè)數(shù)

EXIT:MOVAH,4CH;程序結(jié)束并返回DOS

INT21H

CODEENDS

ENDSTART

12.求一個(gè)數(shù)X的9-X并顯示

從鍵盤(pán)上輸入1到9中任一自然數(shù)X,計(jì)算9-X的值并輸出。

DATASEGMENT

INPUTDBPLEASEINPUTX(0???9):$'

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA;數(shù)據(jù)段寄存器的裝填

MOVDS,AX;送段地址

MOVAH,09H

MOVDX,OFFSETINPUT

INT21H;輸出提示字符串INPUT

MOVAH,01H

INT21H;從鍵盤(pán)輸入一個(gè)X對(duì)應(yīng)的字符:(“0”-“9”)

ANDAL,0FH;將輸入的字符“0”一“9”轉(zhuǎn)換為數(shù)據(jù)X:0—9

MOVDL,9

SUBDL,AL;計(jì)算9—X

MOVAH,02H

ADDDL,30H

INT21H;輸出9-X

MOVAH,4CH

INT21H;程序正常結(jié)束并返回DOS

CODEENDS

ENDSTART

13.求解二元一次方程組:A1X+B1Y=C1

A2X+B2Y=C2

假設(shè)各系數(shù)均為字節(jié)類(lèi)型無(wú)符號(hào)數(shù),解均為一位十進(jìn)制數(shù)。

DATASEGMENT

AlDB27

BlDB81

ClDB243

A2DB54

B2DB30

C2DB222

MESSIDB,XW?加

MESS2DB0DH,0AH;y=',?;$,

DATAENDS

STACKSEGMENTSTACK

DB200DUP(O)

STACKENDS

CODESEGMENT

ASSUMECS:CODE,SS:STACK,DS:DATA,ES:DATA

START:MOVAX,DATA

MOVDS,AX

MOVAL,Al

MULB2

MOVSI,AX;al*b2放到SI中

MOVAL,A2

MULBl;a2*bl

SUBSI,AX;al*b2-a2*bl

MOVAL,Cl

MULB2

MOVBX,AX;cl*b2

MOVAL,C2

MULBl

SUBBX,AX;cl*b2-c2*bl

MOVAX,BX

CWD;符號(hào)擴(kuò)展,AX中符號(hào)擴(kuò)到DX中

IDIVSI;帶符號(hào)除法(cl*b2-c2*bl)/(al*b2-a2*bl)

ADDAL,30H;變成ASCII碼

MOVDI,2;在MESSI的第2字節(jié)預(yù)留有放結(jié)果的地方

MOVMESSI[DI],AL;將X的解放到MESS1的第2字節(jié)處

MOVDX,OFFSETMESSI

MOVAH,9;調(diào)用9號(hào)功能顯示X=***

INT21H

MOVAL,Al

MULC2

MOVDX,AX;al*C2放到DX中

MOVAL,A2

MULCl

SUBDX,AX;al*C2-a2*Cl

MOVAX,DX

CWD;符號(hào)擴(kuò)展,AX中符號(hào)擴(kuò)到DX中

IDIVSI;帶符號(hào)除法(al*C2-a2*Cl)/(al*b2-a2*bl)

ADDAL,30H;變成ASCII碼

MOVDI,4;在MESS2的第4字節(jié)預(yù)留有放結(jié)果的地方

MOVMESS2[DI],AL;將Y的解放到MESS2的第4字節(jié)處

MOVDX,OFFSETMESS2

MOVAH,9;調(diào)用9號(hào)功能顯示Y=***

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

14.回答注釋中提出的問(wèn)題。

DATASEGMENT

ADW35H,9AC9H

DB34H

BDW4CBEH,8872H

DB34H

CDD8A607H

DB34H

DDD98AB457H

DB34H

EDB-48H

DATAENDS

STACKSEGMENTSTACK

DB200DUP(O)

STACKENDS

CODESEGMENT

ASSUMEDS:DATA,SS:STACK,CS:CODE

START:MOVAX,DATA;數(shù)據(jù)段在那里?怎樣看數(shù)據(jù)段中的內(nèi)容?

MOVDS,AX

MOVAX,OFFSETA+2;AX中值是多少?意義是什么?

LEAAX,A+2;AX中值是多少?意義是什么?

MOVAX,A+2

ADDAX,B+2;多少加多少,結(jié)果在那里?等于多少?有沒(méi)有標(biāo)志改變?

MOVBX,A

ADCBX,B;多少加多少,結(jié)果在那里?等于多少?有沒(méi)有標(biāo)志改變?

MOVAX,WORDPTRC

ADDAX,WORDPTRD;多少加多少

MOVAX,WORDPTRC+2

ADCAX,WORDPTRD+2;多少加多少

MOVAL,E

MOVBL,-3

MULBL;多少乘多少,結(jié)果在那里?等于多少?有沒(méi)有標(biāo)志改變?為什么?

MOVAL,E

MOVBL,-3

IMULBL;多少乘多少,結(jié)果在那里?等于多少?有沒(méi)有標(biāo)志改變?為什么?

MOVAL,E

MOVBL,-1

IMULBL;多少乘多少,結(jié)果在那里?等于多少?有沒(méi)有標(biāo)志改變?為什么?

MOVAH,4cH

INT21H

CODEENDS

ENDSTART

15.檢查下面那些指令是錯(cuò)誤的,說(shuō)明原因并改正。

DATASEGMENT

BUFDB3

DAIDB?

CDBB,0DH,0AH,$

COUNTEQU$-C

DATAENDS

STACKSEGMENTSTACK

DB200DUP(O)

STACKENDS

CODESEGMENT

ASSUMEDS:DATA,SS:STACK,CS:CODE

START:MOVAX,DATA

MOVDS,AX

MOVDL,255H

INCCOUNT

MOVCS,DX

CMP280,BL

PUSHDX

LEAAL,C

MOVBX,DA1[DX]

SUB[D1J4SIJ

ADD[DX],BX

MOV80H,AX

MOVDAI,AX

ADDIDI],1OH

MOVBX,OFFSETDAI

MOV[SI+DI],BX

INCCS

MOVES,DS

POPAH

ROLAX,2

MOVBX,DA1[DI]

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

16.十進(jìn)制數(shù)的ASCII碼轉(zhuǎn)換為壓縮型BCD碼

令數(shù)據(jù)段中自ASC_BUF開(kāi)始的緩沖區(qū)內(nèi)存放著若干個(gè)ASCII碼表示的十進(jìn)制數(shù)(每個(gè)單

元存放一位十進(jìn)制數(shù)),要求將這些ASCII碼表示的卜進(jìn)制數(shù)轉(zhuǎn)換為BCD碼,并把兩個(gè)相鄰

單元的BCD碼合并在一個(gè)存儲(chǔ)單元(若ASCII碼的個(gè)數(shù)為奇數(shù),則將首地址單元的十進(jìn)制數(shù)

對(duì)應(yīng)的BCD碼單獨(dú)存放一個(gè)單元,其余的按統(tǒng)一的方法處理)。應(yīng)用DEBUG跟蹤執(zhí)行程序,

當(dāng)程序執(zhí)行到語(yǔ)句MOVAH,4CH時(shí),查看數(shù)據(jù)區(qū)的內(nèi)容,分析運(yùn)行結(jié)果。通過(guò)執(zhí)行過(guò)

程深入理解內(nèi)存儲(chǔ)器分段的概念。

DATASEGMENT

ASC_BUFDB“71542185”

COUNTEQU$-ASC_BUF

BCDBUFDB10DUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:DATA

START:MOVAX,DATA

MOVDS,AX

MOVSLOFFSETASC_BUF

MOVDLOFFSETBCDBUF

MOVCX,COUNT

MOVBX,CX

SHRBX,1;BX右移一位,等效于除2

JNCEVEN1;(CF)=0,則CX為偶數(shù)

MOVBL,[SI];對(duì)首位單獨(dú)進(jìn)行處理

ANDBL,0FH

MOV[DIJ,BL

DECex

INCSI

INCDI

EVEN1:MOVAL,[S1J

ANDAL,0FH;清高4位為0

MOVBL,LSI+1]

ANDBL,0FH;清高4位為0

MOVDL,16

MULDL

ADDAL,BL

MOV[DI],AL

ADDSI,2

INCDI

DECex

JNZEVEN1

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

17.壓縮BCD碼轉(zhuǎn)換為十進(jìn)制數(shù)的ASCII碼

將數(shù)據(jù)段中字節(jié)變量BCD_BUF為首地址的緩沖區(qū)中一個(gè)八位十進(jìn)制數(shù)對(duì)應(yīng)的壓縮BCD碼

轉(zhuǎn)換為ASCII碼,并顯示。

DATASEGMENT

BCD_BUFDB34H,25H,12H,97H;十進(jìn)制數(shù)97122534

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

MAIN:MOVAX,DATA

MOVDS,AX

MOVCX,4

MOVSI,OFFSETBCD_BUF

ADDSI,3

MOVDH,0

CHG_OUT1:PUSHCX

MOVAL,[SI];取壓縮BCD碼

DECSI;修改指針

MOVBL,AL;保存AL

MOVCL,4

RORAL,CL

ANDAL,0FH;取高半字節(jié)BCD碼

ADDAL,30H性成ASCII碼

MOVDL,AL

MOVAH,2

INT21H;標(biāo)準(zhǔn)設(shè)備輸出

MOVAL,BL;從BL所保存的AL恢復(fù)AL

ANDAL,0FH;取低半字節(jié)BCD碼

ADDAL,30H性成ASCII碼

MOVDL,AL

MOVAH,2

INT21H;標(biāo)準(zhǔn)設(shè)備輸出

POPCX

DECCX

JNZCHG_OUT1

CODEENDS

ENDMAIN

18.二進(jìn)制數(shù)轉(zhuǎn)換為壓縮BCD碼

將DX寄存器中存放的無(wú)符號(hào)二進(jìn)制數(shù)(0-65535)轉(zhuǎn)換為壓縮BCD碼(在程序中自行加

一條語(yǔ)句,將一個(gè)數(shù)保存到DX中),保存在BCD_BUF緩沖區(qū)中。應(yīng)用DEBUG跟蹤執(zhí)行

程序,查看數(shù)據(jù)區(qū)的內(nèi)容,分析運(yùn)行結(jié)果

DATASEGMENT

BCD_BUFDB3DUP(O)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

MAIN:MOVAX,DATA

MOVDS,AX

MOVDI,OFFSETBCD_BUF

MOVAL,0

MOVCX,5

CLEAR_BUF:MOV[DI],AL;初始化緩沖區(qū)

INCDI

DECex

JNZCLEAR_BUF

MOVDLOFFSETBCD_BUF

CHG_BCD1:MOVAX,DX;轉(zhuǎn)換開(kāi)始

MOVDX,0

MOVex,10

DIVex

MOVBL,DL

MOVDX,0

MOVex,10

DIVex

MOVCL,4

SHLDL,CL;左移4位,等效于乘以16

ANDDL,0F0H

ORDL,BL;組合BCD碼

MOV[DI],DL;存儲(chǔ)BCD碼

INCDI

MOVDX,AX

CMPDX,0

JNZCHG_BCD1

CODEENDS

ENDMAIN

19.壓縮BCD碼轉(zhuǎn)換為二進(jìn)制數(shù)

將BX寄存器中的四位壓縮型BCD碼轉(zhuǎn)換為二進(jìn)制數(shù),并存放到DX中。

CODESEGMENT

ASSUMECS:CODE

START:MOVBX,3698H

MOVSI,BX

XORAX,AX

MOVCX,4;BCD碼共4位

CHG_AGAIN1:MOVDI,0;分析:本程序未寫(xiě)DS,是正確的嗎,為什么?

PUSHCX

MOVCX,4;每個(gè)BCD碼對(duì)應(yīng)四位2進(jìn)制數(shù)

CHG_AGAIN2:SHLSI,1;SI左移,最高位送CF

RCLDI,1;CF最高位送DI

DECCX

JNZCHG_AGAIN2;將某位BCD碼送DI

MOVCX,10

MULCX

ADDAX,DI;二進(jìn)制數(shù)合并

POPCX

DECCX

JNZCHG_AGAIN1

MOVDX,AX

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

20.分析每次運(yùn)算結(jié)果及對(duì)標(biāo)志位的影響。

DATASEGMENT

ADW000AH

CDW,AB,;CD,;EF',,GH';IJ,;KL,

DATAENDS

STACKSEGMENTSTACK

DB200DUP(O)

STACKENDS

CODESEGMENT

ASSUMEDS:DATA,SS:STACK,CS:CODE

START:MOVAX,DATA

MOVDS,AX

MOVAHJ0001000B

MOVAL,00001100B

ADDAH,AL

PUSHF

POPAX;分析運(yùn)算結(jié)果及對(duì)標(biāo)志位的影響

MOVAH,11001HOB

MOVALJ1000100B

ADDAH,AL

PUSHF

POPAX;分析運(yùn)算結(jié)果及對(duì)標(biāo)志位的影響

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

21.分析以下程序功能是什么?分析其每一次算術(shù)運(yùn)算對(duì)標(biāo)志位的影響。

DATASEGMENT

ADWOOOAH

CDW,AB\'CD';EF,;GH,;IJ,;KL,

DATAENDS

STACKSEGMENTSTACK

DB200DUP(O)

STACKENDS

CODESEGMENT

ASSUMEDS:DATA,SS:STACK,CS:CODE

START:MOVAX,DATA

MOVDS,AX

MOVAH,0A7H

MOVAL,84H

ADDAH,AL

MOVAH,35H

MOVAL,0A4H

SUBAH,AL

MOVAX,085AH

MOVDX,0A357H

ADDAX,DX

MOVAX,085AH

MOVDX,0A357H

SUBAX,DX

MOVAX,0A57H

MOVDX,0

MOVCX,4

MULCX

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

22.已知DN1與DN2均為雙字,求計(jì)算DN1+DN2,將結(jié)果放到DSUM中,并以16進(jìn)

制形式在屏幕上顯示。假設(shè)DN1為:0D3453A59H,DN2為:3E6D135FH。

雙字相加如有進(jìn)位不考慮。

DATASEGMENT

DN1DW3A59HQD345H

DN2DW135FH,3E6DH

DSUMDW0,0

BUFDB5DUP(0)

ADB?

DATAENDS

STACKSEGMENTSTACK

DB200DUP(O)

STACKENDS

CODESEGMENT

ASSUMEDS:DATA,CS:CODE,SS:STACK

STARTMOVAX,DATA

MOVDS,AX

MOVAX,WORDPTRDN1

ADDAX,WORDPTRDN2

MOVWORDPTRDSUM,AX

MOVDX,WORDPTRDN1+2

ADCDX,WORDPTRDN2+2

MOVWORDPTRDSUM+2,DX

MOVAX,WORDPTRDSUM+2

CALLCHANTH16

MOVAX,WORDPTRDSUM

CALLCHANTH16

MOVAH,4CH

INT21H

CHANTH16PROC

MOVDI,OFFSETA;將DI指向BUF的下一單元

MOVCX,0

MOVBX,16;準(zhǔn)備除以16

CBUF10:DECDI;準(zhǔn)備存放余數(shù),往前倒存

INCCX

MOVDX,0;將除數(shù)的高16位(在DX中)清0,DX也將用來(lái)存放余數(shù)

DIVBX;DX,AX除以BX(BX=16)

ADDDL,30H;余數(shù)變?yōu)锳SCII碼值

MOVBYTEPTR[DI],DL;存儲(chǔ)十六進(jìn)制數(shù)

CMPAX,0;是否為0?

JNZCBUF10

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論