版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 美發(fā)銷(xiāo)售思維課程設(shè)計(jì)
- 2025年度商家入駐智能設(shè)備銷(xiāo)售平臺(tái)專項(xiàng)合同3篇
- 二零二五年度設(shè)備采購(gòu)合同的詳細(xì)規(guī)定2篇
- 二零二五年網(wǎng)絡(luò)安全防護(hù)防火墻升級(jí)改造合同3篇
- 2025版城市綠化帶景觀提升工程承包協(xié)議4篇
- 二零二五版重金屬?gòu)U物承運(yùn)及環(huán)保處理服務(wù)協(xié)議2篇
- 二零二五年度藝術(shù)空間租賃合同范本(含藝術(shù)衍生品銷(xiāo)售權(quán))3篇
- 課程設(shè)計(jì)意圖farm
- 二零二五年度高端住宅鋁合金門(mén)窗采購(gòu)及施工監(jiān)理合同4篇
- 轉(zhuǎn)速計(jì)課程設(shè)計(jì)
- 2024高考復(fù)習(xí)必背英語(yǔ)詞匯3500單詞
- 消防控制室值班服務(wù)人員培訓(xùn)方案
- 《貴州旅游介紹》課件2
- 2024年中職單招(護(hù)理)專業(yè)綜合知識(shí)考試題庫(kù)(含答案)
- 無(wú)人機(jī)應(yīng)用平臺(tái)實(shí)施方案
- 挪用公款還款協(xié)議書(shū)范本
- 事業(yè)單位工作人員年度考核登記表(醫(yī)生個(gè)人總結(jié))
- 盾構(gòu)隧道施工數(shù)字化與智能化系統(tǒng)集成
- 【企業(yè)盈利能力探析文獻(xiàn)綜述2400字】
- 2019年醫(yī)養(yǎng)結(jié)合項(xiàng)目商業(yè)計(jì)劃書(shū)
- 2023年店鋪工程主管年終業(yè)務(wù)工作總結(jié)
評(píng)論
0/150
提交評(píng)論