實驗四 ASCII碼錶示的十進制數、二進制數和BCD的互換編程實驗
更多微機實驗:https://blog.csdn.net/yxp189?assign_skin=skin-yellow
注意:未經允許,請勿轉載!
轉載請標明出處~
適用課程:微機原理與接口技術(實驗)
選用教材:微型計算機原理與接口技術-中國科學技術大學出版社
一、實驗要求和目的
1.瞭解彙編語言中的十進制、二進制、BCD碼的表示形式;
2.瞭解BCD值和ASCII值的區別
3.瞭解如何查表進行數值轉換及快速計算。
4.掌握利用彙編語言進行進制轉換的方法。
二、實驗內容
(1)將一個用ASCII碼錶示的多位十進制轉換爲二進制,要求十進制不大於65535(16位),且輸入數碼爲無符號數。
(2)將用ASCII碼錶示的數字串,轉化爲壓縮的BCD碼。
三、實驗提示
(1)十進制數字串轉二進制從最高位開始,重複進行“高位*10+低位”的操作,用公式表示爲ΣDi×10i=((„(Dn×10+Dn-1)×10)+Dn-2)×10+„+D1)×10+D0
(2)將ASCII碼轉換爲壓縮BCD碼,將ASCII碼的高4位置0,再將十位ASCII碼的低4位左移至高4位,再與個位ASCII碼相或。採用約定寄存器法傳遞參數。
實驗代碼:
1. 實驗(1)
將一個用ASCII碼錶示的多位十進制轉換爲二進制,要求十進制不大於65535(16位),且輸入數碼爲無符號數。
;Author:YXP
;CSDN:yxp189
;Email:[email protected]
;如有問題,歡迎和我聯繫~
;轉載請標明出處~
STACKS SEGMENT STACK
DW 128 DUP(?)
STACKS ENDS
DATAS SEGMENT
NUM1 DW 5 DUP(0)
NUM2 DW 1 DUP(0)
NUM3 DW 1 DUP(0)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS
MOV DS,AX
MOV NUM3,10
MOV CX,5
MOV SI,OFFSET NUM1
READ1:
MOV AH,01H
INT 21H
MOV DL,AL
AND DL,0FH
AND DH,00H
MOV [SI],DX
INC SI
INC SI
LOOP READ1
CLC
MOV CX,5
MOV SI,OFFSET NUM1
OP:
MOV AX,NUM2
MUL NUM3
MOV BX,AX
MOV AX,[SI]
ADC AX,BX
MOV NUM2,AX
INC SI
INC SI
LOOP OP
MOV AX,NUM2
DIV NUM3
MOV NUM2,AX
MOV AX,4C00H
INT 21H
CODES ENDS
END START
2. 實驗(2)
將用ASCII碼錶示的數字串,轉化爲壓縮的BCD碼。
;Author:YXP
;CSDN:yxp189
;Email:[email protected]
;如有問題,歡迎和我聯繫~
;轉載請標明出處~
STACKS SEGMENT STACK
DW 128 DUP(?) ;注意這裏只有128個字節
STACKS ENDS
DATAS SEGMENT
NUM1 DB 5 DUP(0)
NUM2 DW 1 DUP(0)
NUM3 DW 1 DUP(0)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS
MOV DS,AX
MOV CX,4
MOV BX,1
MOV SI,OFFSET NUM1
READ1:
MOV AH,01H
INT 21H
MOV DL,AL
AND DL,0FH
TEST CX,0001H
JZ AD
OR [BX][SI],DL
;INC SI
DEC BX
LOOP READ1
JMP OUTOP
AD:
OR [BX][SI],DL
SHL BYTE PTR[BX][SI],4
LOOP READ1
OUTOP:
CLC
MOV CX,4
MOV SI,OFFSET NUM1
POUT: MOV AH,02H
MOV DL,[SI]
TEST CX,0001H
JZ YIWEI
AND DL,0FH
OR DL,30H
INC SI
INT 21H
LOOP POUT
JMP ENDD
YIWEI: AND DL,0FH
OR DL,30H
SHR BYTE PTR[SI],4
INT 21H
LOOP POUT
ENDD:
MOV AX,4C00H ;退出程序
INT 21H
CODES ENDS
END START