




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
以下加*的題不要求;加**的題本學(xué)期不要求。
L顯示數(shù)據(jù)區(qū)中的一個字符
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號DOS系統(tǒng)功能調(diào)用顯示一位二進制碼
INT21H
MOVAH,4cH;利用4CH號DOS系統(tǒng)功能調(diào)用退回DOS
INT21H
CODEENDS
ENDSTART
2.顯示數(shù)據(jù)區(qū)中的一個十進制數(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;將十進制數(shù)字變成ASCH碼
MOVAH,2;調(diào)2號DOS系統(tǒng)功能調(diào)用顯示一位二進制碼
INT21H
MOVAH,4CH;利用4CH號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;取一個加數(shù)到DL中
ADDDL,B;加另一個加數(shù)
ADDDL,30H;將和變成ASCII碼
MOVAH,2;調(diào)2號DOS系統(tǒng)功能調(diào)用顯示一位二進制碼
INT21H
MOVAH,4CH;利用4CH號DOS系統(tǒng)功能調(diào)用退回DOS
INT21H
CODEENDS
ENDSTART
4.以二進制形式顯示一個字符的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號DOS系統(tǒng)功能調(diào)用顯示(A)=
INT21H
MOVBL,A;取要顯示的字符到BL中
MOVCL,8;循環(huán)8次,每次顯示一位
NEXT:MOVDL,0;2號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號DOS系統(tǒng)功能調(diào)用顯示一位二進制碼
INT21H
DECCL;循環(huán)次數(shù)減1
JNENEXT;如果減1后不到0,轉(zhuǎn)NEXT
LEADX,C;取變量C的首地址到DX中
MOVAH,9;利用9號DOS系統(tǒng)功能調(diào)用顯示單位“B”及回車換行
INT21H
MOVAH,4CH;利用4CH號DOS系統(tǒng)功能調(diào)用退回DOS
INT21H
CODEENDS
ENDSTART
5.二進制數(shù)轉(zhuǎn)換為十進制數(shù)
將DO起字單元中存放的16位二進制數(shù)轉(zhuǎn)換為十進制數(shù),并將其ASCII碼存入DI所指向的
緩沖區(qū)BUF中,最后顯示出來。
程序如下所示:
DATASEGMENT
BUFDB5DUP(?);預(yù)留5單元空間
DODW2A5H
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVDI,OFFSETDO;將DI指向BUF的下一單元
MOVAX,DO;取要用來變十進制數(shù)的數(shù)到AX
MOVBX,10;準備除以10
MOVCX,0;準備統(tǒng)計余數(shù)的個數(shù)
CHANGE10:DECDI;準備存放余數(shù),往前倒存
INCCX
MOVDX,0;將除數(shù)的高16位(在DX中)清0,DX也將用來存放余數(shù)
DIVBX;DX,AX除以BX(BX=10)
ADDDL,30H;余數(shù)變?yōu)锳SCII碼值
MOVBYTEPTR[DI],DL;存儲十進制數(shù)
CMPAX,0;是否為0?
JNZCHANGE10;不為0轉(zhuǎn)CHANGE10
CHANGE11:MOVDL,BYTEPTR[DI];取出存放在BUF中的卜進制數(shù)到DL供顯示
MOVAH,2;顯示1個字符
INT21H
INCDI
LOOPCHANGE11
MOVAH,4CH;程序結(jié)束并返回DOS
INT21H
CODEENDS
ENDSTART
6.ASCII碼表示的十進制數(shù)轉(zhuǎn)換為二進制數(shù)并顯示
將SI指向的緩沖區(qū)BUF中保存的五位ASCII碼卜進制數(shù)(0-65535)轉(zhuǎn)換成對應(yīng)的二進制
數(shù)并存放在DX中,再以二進制形式顯示。
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];取出一個字符
CMPAL;0,;必須保證5個數(shù)都是十進制數(shù)(0-9)
JBEXIT
CMPAL,*9'
JAEXIT;判斷是否是“0”-“9”
DEC_BIN:SUBAL,30H;減30H變二進制數(shù)
MOVAH,0
PUSHAX;轉(zhuǎn)換為對應(yīng)的數(shù)并置于AX中,轉(zhuǎn)存堆棧
MOVAX,DX
MULBX;AX內(nèi)容乘10
MOVDX,AX
POPAX
ADDDX,AX;(DX)-(DX)*10+(AX)
INCSI;使指針SI指向下一個字符
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與回車換行
MOVAH,9
INT21H
EXIT:MOVAH,4CH
INT21H
CODEENDS
ENDSTART
7.二進制數(shù)到十六進制數(shù)的轉(zhuǎn)換
二進制整數(shù)轉(zhuǎn)換為ASCII碼十六進制數(shù)的基數(shù)為16,顯示時注意從9到A,ASCII碼跳了7!
其他類似于例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;取要用來變十六進制數(shù)的數(shù)到AX
MOVBX,16;準備除以16
CBUF10:DECDI;準備存放余數(shù),往前倒存
INCCX
MOVDX,0;將除數(shù)的高16位(在DX中)清0,DX也將用來存放余數(shù)
DIVBX;DX,AX除以BX(BX=16)
ADDDL,30H;余數(shù)變?yōu)锳SCII碼值
MOVBYTEPTR[DI],DL;存儲十六進制數(shù)
CMPAX,0;是否為0?
JNZCBUF10;不為0轉(zhuǎn)CBUF10
CHANGE11:MOVDL,BYTEPTR[DI];取出存放在BUF中的十六進制數(shù)到DL供顯示
CMPDL,3AH;是否小于10?
JBCHANGE12;如果小于10轉(zhuǎn)顯示
ADDDL,7;否則為A到F之間數(shù),加7
CHANGE12:MOVAH,2;顯示1個字符
INT21H
INCDI
LOOPCHANGE11
MOVAH,4cH;程序結(jié)束并返回DOS
INT21H
CODEENDS
ENDSTART
8.ASCII碼表示的十六進制數(shù)到二進制數(shù)的轉(zhuǎn)換
從鍵盤輸入四位十六進制數(shù),將其轉(zhuǎn)換十六位二進制數(shù),并保存在DX寄存器中,再顯示。
程序分析:十六進制數(shù)的數(shù)字符為0-9和a-f(或A-F),輸入后以ASCII碼30H-39H和
61H-66H(或41H-46H)存入AL。明顯,如是數(shù)字鍵0-9,其ASCII碼減去30H,即是該位十
六進制數(shù)對應(yīng)的四位二進制值。而如是字符鍵a-f或A-F,其ASCII碼則要分別減去57H和
37H,得到的差才是所輸入的十六進制數(shù)字符對應(yīng)的四位二進制值。
CODESEGMENT
ASSUMECS:CODE
START:MOVDX,0
MOVBL,4;輸入字符個數(shù)
INPUT:MOVAH.01H
INT21H;鍵盤輸入
SUBAL,30H
JLNEXT1;輸入的是十六進制數(shù)外其它字符
CMPAL,0AH
JLCHANGE;輸入0-9
SUBAL,07H
CMPAL,0AH
JLNEXT1;輸入的是十六進制數(shù)外其它字符
CMPAL,0FH
JLECHANGE;輸入A-F
SUBAL,20H
CMPAL,0AH
JLNEXT1;輸入的是十六進制數(shù)外其它字符
CMPAL,0FH
JLECHANGE;輸入a-f
JMPNEXT1;輸入的是十六進制數(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.求計算二個字類型無符號數(shù)的和并以十進制形式顯示。設(shè)和的大小不超過16位二
進制數(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;準備除以10
MOVCX,0;準備統(tǒng)計余數(shù)的個數(shù)
CHANGE10:DECDI;準備存放余數(shù),往前倒存
INCex
MOVDX,0;將除數(shù)的高16位(在DX中)清0,DX也將用來存放余數(shù)
DIVBX;DX,AX除以BX(BX=10)
ADDDL,30H;余數(shù)變?yōu)锳SCII碼值
MOVBYTEPTR[DI],DL;存儲十進制數(shù)
CMPAX,0;是否為0?
JNZCHANGE10;不為0轉(zhuǎn)CHANGEI0
CHANGE11:MOVDL,BYTEPTRfDI];取出存放在BUF中的十進制數(shù)到DL供顯示
MOVAH,2;顯示1個字符
INT21H
INCDI
LOOPCHANGE11
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
(1)將A、B改為:ADW2A5AH
BDW623FH
10.求B+C的和并以十六進制形式顯示。
本程序段要求在數(shù)據(jù)區(qū)設(shè)置變量BUF與A,BUF設(shè)置情況為:DB5DUP(?)
A為其下的一個變量名。
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;準備除以16
CBUF10:DECDI;準備存放余數(shù),往前倒存
INCCX
MOVDX,0;將除數(shù)的高16位(在DX中)清0,DX也將用來存放余數(shù)
DIVBX;DX,AX除以BX(BX=16)
ADDDL,30H;余數(shù)變?yōu)锳SCII碼值
MOVBYTEPTR[DI],DL;存儲十六進制數(shù)
CMPAX,0;是否為0?
JNZCBUF10;不為0轉(zhuǎn)CBUF10
CHANGE11:MOVDL.BYTEPTR[DI];取出存放在BUF中的十六進制數(shù)到DL供顯示
CMPDL,3AH;是否小于10?
JBCHANGE12;如果小于10轉(zhuǎn)顯示
ADDDL,7;否則為A到F之間數(shù),加7
CHANGE12:MOVAH,2;顯示1個字符
INT21H
INCDI
LOOPCHANGE11
EXIT:MOVAH,4CH;程序結(jié)束并返回DOS
INT21H
CODEENDS
ENDSTART
11.檢查4個輸入的數(shù),如果是16進制數(shù)字就保留并顯示,否則停止輸入并退出。
CODESEGMENT
ASSUMECS:CODE
START:MOVDX,0
MOVBL,4;輸入字符最多多少個的個數(shù)
INPUT:MOVAH,01H
INT21H;鍵盤輸入
SUBAL,30H
JLEXIT;如果輸入小于0的字符退出
CMPAL,0AH;和0人相比較
JLCHANGE;如果小于0AH表示輸入的是0-9
SUBAL,07H;看看輸入的是不是大寫的A-F
CMPAL,0AH;如果減07H后小于0AH表示比大寫的A小
JLEXIT;小于表示輸入的是其它字符,退出
CMPAL,0FH;如果減07H后大于OFH,表示比F大
JLECHANGE;小于等于表示輸入的數(shù)在A-F之間,存到DX中去
SUBAL,20H;如果大于大寫F,再看是否是a-f
CMPAL,0AH
JLEXIT;如果小于a,說明輸入的是其它字符,退出
CMPAL,0FH;再看是否大于f
JLECHANGE;小于等于表示輸入的是a-f,存到DX中去
JMPEXIT;輸入其它字無條件退出
CHANGE:MOVCL,4
SHLDX,CL;DX中數(shù)左移4位(因為是16進制數(shù))
MOVAH,0;清AH,只保留AL,再將DX中原來的數(shù)和AX中新數(shù)相加
ADDDX,AX;(DX)-(DX)*16+(AX)
DECBL;BL減1,控制做4次循環(huán)
JNZINPUT;再輸下一個數(shù)直到4個數(shù)
EXIT:MOVAH,4CH;程序結(jié)束并返回DOS
INT21H
CODEENDS
ENDSTART
12.求一個數(shù)X的9-X并顯示
從鍵盤上輸入1到9中任一自然數(shù)X,計算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;從鍵盤輸入一個X對應(yīng)的字符:(“0”-“9”)
ANDAL,0FH;將輸入的字符“0”一“9”轉(zhuǎn)換為數(shù)據(jù)X:0—9
MOVDL,9
SUBDL,AL;計算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é)類型無符號數(shù),解均為一位十進制數(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;符號擴展,AX中符號擴到DX中
IDIVSI;帶符號除法(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號功能顯示X=***
INT21H
MOVAL,Al
MULC2
MOVDX,AX;al*C2放到DX中
MOVAL,A2
MULCl
SUBDX,AX;al*C2-a2*Cl
MOVAX,DX
CWD;符號擴展,AX中符號擴到DX中
IDIVSI;帶符號除法(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號功能顯示Y=***
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
14.回答注釋中提出的問題。
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é)果在那里?等于多少?有沒有標志改變?
MOVBX,A
ADCBX,B;多少加多少,結(jié)果在那里?等于多少?有沒有標志改變?
MOVAX,WORDPTRC
ADDAX,WORDPTRD;多少加多少
MOVAX,WORDPTRC+2
ADCAX,WORDPTRD+2;多少加多少
MOVAL,E
MOVBL,-3
MULBL;多少乘多少,結(jié)果在那里?等于多少?有沒有標志改變?為什么?
MOVAL,E
MOVBL,-3
IMULBL;多少乘多少,結(jié)果在那里?等于多少?有沒有標志改變?為什么?
MOVAL,E
MOVBL,-1
IMULBL;多少乘多少,結(jié)果在那里?等于多少?有沒有標志改變?為什么?
MOVAH,4cH
INT21H
CODEENDS
ENDSTART
15.檢查下面那些指令是錯誤的,說明原因并改正。
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.十進制數(shù)的ASCII碼轉(zhuǎn)換為壓縮型BCD碼
令數(shù)據(jù)段中自ASC_BUF開始的緩沖區(qū)內(nèi)存放著若干個ASCII碼表示的十進制數(shù)(每個單
元存放一位十進制數(shù)),要求將這些ASCII碼表示的卜進制數(shù)轉(zhuǎn)換為BCD碼,并把兩個相鄰
單元的BCD碼合并在一個存儲單元(若ASCII碼的個數(shù)為奇數(shù),則將首地址單元的十進制數(shù)
對應(yīng)的BCD碼單獨存放一個單元,其余的按統(tǒng)一的方法處理)。應(yīng)用DEBUG跟蹤執(zhí)行程序,
當程序執(zhí)行到語句MOVAH,4CH時,查看數(shù)據(jù)區(qū)的內(nèi)容,分析運行結(jié)果。通過執(zhí)行過
程深入理解內(nèi)存儲器分段的概念。
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];對首位單獨進行處理
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)換為十進制數(shù)的ASCII碼
將數(shù)據(jù)段中字節(jié)變量BCD_BUF為首地址的緩沖區(qū)中一個八位十進制數(shù)對應(yīng)的壓縮BCD碼
轉(zhuǎn)換為ASCII碼,并顯示。
DATASEGMENT
BCD_BUFDB34H,25H,12H,97H;十進制數(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;標準設(shè)備輸出
MOVAL,BL;從BL所保存的AL恢復(fù)AL
ANDAL,0FH;取低半字節(jié)BCD碼
ADDAL,30H性成ASCII碼
MOVDL,AL
MOVAH,2
INT21H;標準設(shè)備輸出
POPCX
DECCX
JNZCHG_OUT1
CODEENDS
ENDMAIN
18.二進制數(shù)轉(zhuǎn)換為壓縮BCD碼
將DX寄存器中存放的無符號二進制數(shù)(0-65535)轉(zhuǎn)換為壓縮BCD碼(在程序中自行加
一條語句,將一個數(shù)保存到DX中),保存在BCD_BUF緩沖區(qū)中。應(yīng)用DEBUG跟蹤執(zhí)行
程序,查看數(shù)據(jù)區(qū)的內(nèi)容,分析運行結(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)換開始
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;存儲BCD碼
INCDI
MOVDX,AX
CMPDX,0
JNZCHG_BCD1
CODEENDS
ENDMAIN
19.壓縮BCD碼轉(zhuǎn)換為二進制數(shù)
將BX寄存器中的四位壓縮型BCD碼轉(zhuǎn)換為二進制數(shù),并存放到DX中。
CODESEGMENT
ASSUMECS:CODE
START:MOVBX,3698H
MOVSI,BX
XORAX,AX
MOVCX,4;BCD碼共4位
CHG_AGAIN1:MOVDI,0;分析:本程序未寫DS,是正確的嗎,為什么?
PUSHCX
MOVCX,4;每個BCD碼對應(yīng)四位2進制數(shù)
CHG_AGAIN2:SHLSI,1;SI左移,最高位送CF
RCLDI,1;CF最高位送DI
DECCX
JNZCHG_AGAIN2;將某位BCD碼送DI
MOVCX,10
MULCX
ADDAX,DI;二進制數(shù)合并
POPCX
DECCX
JNZCHG_AGAIN1
MOVDX,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
20.分析每次運算結(jié)果及對標志位的影響。
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;分析運算結(jié)果及對標志位的影響
MOVAH,11001HOB
MOVALJ1000100B
ADDAH,AL
PUSHF
POPAX;分析運算結(jié)果及對標志位的影響
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
21.分析以下程序功能是什么?分析其每一次算術(shù)運算對標志位的影響。
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均為雙字,求計算DN1+DN2,將結(jié)果放到DSUM中,并以16進
制形式在屏幕上顯示。假設(shè)DN1為:0D3453A59H,DN2為:3E6D135FH。
雙字相加如有進位不考慮。
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;準備除以16
CBUF10:DECDI;準備存放余數(shù),往前倒存
INCCX
MOVDX,0;將除數(shù)的高16位(在DX中)清0,DX也將用來存放余數(shù)
DIVBX;DX,AX除以BX(BX=16)
ADDDL,30H;余數(shù)變?yōu)锳SCII碼值
MOVBYTEPTR[DI],DL;存儲十六進制數(shù)
CMPAX,0;是否為0?
JNZCBUF10
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- LY/T 3408-2024林下經(jīng)濟術(shù)語
- 【假期提升】五升六語文暑假作業(yè)(七)-人教部編版(含答案含解析)
- 緊急任務(wù) 面試題及答案
- 2025年軍隊文職人員招聘之軍隊文職法學(xué)考前沖刺模擬試卷A卷含答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備中級技能題庫綜合試卷A卷附答案
- 遺產(chǎn)繼承房產(chǎn)過戶合同
- 汽車運輸合同協(xié)議書
- 語言學(xué)與文化差異閱讀理解題
- 信息技術(shù)支持下的農(nóng)業(yè)智能生產(chǎn)合作協(xié)議
- 陜西省渭南市富平縣2024-2025學(xué)年八年級上學(xué)期期末生物學(xué)試題(含答案)
- 農(nóng)村自建房包工包料施工合同
- 《鐵路職業(yè)道德》課件-第6章 鐵路職業(yè)道德修養(yǎng)
- 中考心理減壓輔導(dǎo) 中考前心理健康教育主題班會
- 小學(xué)四年級心理健康教育課
- 【上市公司的財務(wù)風險的分析和防范:以三只松鼠為例10000字(論文)】
- 部編版小學(xué)語文四年級下冊教師教學(xué)用書(教學(xué)參考)完整版
- 幼兒園消防安全知識競賽試題及答案
- 莫高窟群文閱讀教學(xué)設(shè)計
- 樂理視唱練耳簡明教程課后習題答案
- 2023年10月自考試題02398土力學(xué)及地基基礎(chǔ)
- 高壓旋噴樁加固工程施工方案
評論
0/150
提交評論