10进制转16进制汇编语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;(2)数制转换
;将输入的一个数据以不同进制形式输出。
;要求:
;(a)所有数字从键盘输入;
;(b)输入数据为任意一个小于十万的十进制数据;
;(c)将所输入数据以十六进制在屏幕显示输出(即十进制转十六进制)。
DA TA SEGMENT
KEYBUFFER DB 100
DB 0
DB 100 DUP(0)
STRING1 DB 'Please input decimal data:',' $'
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DA TA,ES:DA TA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DX,STRING1 ;显示提示输出
MOV AH,09H
INT 21H
MOV AH,0AH
LEA DX,KEYBUFFER
INT 21H
LEA SI,KEYBUFFER+1
CALL TRANS10TO16
CALL DISPCR
CALL DISPAX
CALL DISPCR
MOV AX,BX
CALL DISPAX
MOV AH,4CH
INT 21H
DISPAL PROC NEAR
PUSH AX
PUSH CX
PUSH DX
PUSH AX
MOV CL,4 ;处理高位十六进制数
SHR AL,CL
CALL CHANG ;十六进制数变换成ASCII码
MOV AH,02
MOV DL,AL
POP AX
AND AL,0FH ;处理低位十六进制数
CALL CHANG ;同上解释
MOV AH,02
MOV DL,AL
INT 21H
POP DX
POP CX
POP AX
RET
DISPAL ENDP
CHANG PROC NEAR ;数码转换
CMP AL,10
JNGE CHANG1
ADD AL,7
CHANG1:
ADD AL,30H
RET
CHANG ENDP
DISPAX PROC NEAR
XCHG AL,AH
CALL DISPAL
XCHG AH,AL
CALL DISPAL
RET
DISPAX ENDP
DISPCR PROC NEAR
PUSH AX
PUSH DX
MOV AH,2
MOV DL,0AH
INT 21H
MOV AH,2
MOV DL,0DH
INT 21H
POP DX
POP AX
RET
DISPCR ENDP
;将输入缓冲区中以ASCII码表示的十进制数转换成16位二进制数TRANS10TO16 PROC NEAR
PUSH CX
PUSH DX
XOR AX,AX
XOR CX,CX
MOV CL,[SI]
INC SI
MOV AL,[SI]
INC SI
SUB AL,30H
DEC CX
JCXZ TRANSF2 MOV BX,10 TRANSF1:
MUL BX
JC TRANSF_ERR MOV DL,[SI]
INC SI
SUB DL,30H
ADD AL,DL
ADC AH,0
JC TRANSF_ERR LOOP TRANSF1 MOV BX,0 TRANSF2:
JMP TRANSF_OK TRANSF_ERR:
MOV BX,-1 TRANSF_OK:
POP SI
POP DX
POP CX
RET
TRANS10TO16 ENDP CODE ENDS
END START