程序运行效果如下:
如题,此程序只能实现一位十六进制数的转换
具体代码如下
DATAS SEGMENT
BUF DB 5 DUP(?)
MSG1 DB 'please input a hex
number',13,10,'$' ;设定提示
MSG2 DB 'the dec
number:',13,10,'$'
CTLF DB 13,10,'$'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,MSG1 ;输出第一条提示
MOV AH,9
INT 21H
MOV AH,1 ;输入一个十六进制数
INT 21H
SUB AL,30H ;得到真实数值
CMP AL,0
JL TODEC ;判断是否小于0,如果小于0,则跳转到TODEC
CMP AL,10
JL NUMBER ;判断是否在0-9范围内,如果是,则跳转到NUMBER
SUB AL,27H
CMP AL,0AH
JL FINISH ;判断是否小于a,如果是,则跳转到FINISH
CMP AL,10H
JGE FINISH ;判断是否大于等于16,如果是,则跳转到FINISH
JMP TODEC
;跳转到TODEC
NUMBER:
LEA DX,CTLF
MOV AH,9
INT 21H ;换行
LEA DX,MSG2
MOV AH,9
INT 21H ;输出第二条提示
MOV DL,AL ;显示数字
ADD DL,30H
MOV AH,2
INT 21H
JMP FINISH ;跳转到FINISH
TODEC:
MOV AH,0
MOV BL,10
DIV BL ;除以10
MOV [BUF],AH
;将余数存入DS:[BUF]
MOV [BUF+1],AL ;将商存入DS:[BUF+1]
LEA DX,CTLF
MOV AH,9
INT 21H
;换行
LEA DX,MSG2 ;输出第二条提示
MOV AH,9
INT 21H
OUTPUT:
MOV DL,[BUF+1] ;输出商
ADD DL,30H
MOV AH,2
INT 21H
MOV DL,[BUF] ;输出余数
ADD DL,30H
MOV AH,2
INT 21H
FINISH:
MOV AH,4CH ;程序结束,返回DOS
INT 21H
CODES ENDS
END START
初学汇编,程序显得臃肿繁琐,如有错误,欢迎指正讨论。