用汇编实现十六进制数向十进制数的转换
用汇编实现十六进制数向十进制数的转换
一、实现功能
实现一位十六进制数向十进制数的转换。
二、设计分析
汇编语言中,字符在机器中都是以ascii码的二进制格式存储,但是汇编语言写的时候常用十六进制,因此需要好好看看ascii码的十六进制表。
特别是进制转换一定要注意,**机器中存储的是数的二进制数本身,而我们输入输出的是数的ascii码的值,因此注意对寄存器中数的加减操作**。
- 实现十六进制数向十进制数的转换,先输入一位16进制数,判断输入字符的ascii码在30H-39H(0-9)之间,还是在41H-46H(A-F)之间,或者是在61H-66H(a-f)之间。如果是第一种情况则SUB DL,30H,如果是第二种情况则SUB DL,37H,如果是第三种情况则SUB DL,57H。
- 接下来需要将DL中的二进制数转换为十进制数输出。这里我选择将DX除以10,商在AL中,用来表示十位数,余数在AH中,用来表示个位数,如果商是0,则不用输出;如果商是1,则ADD AH,30H,输出AH。余数ADD AL,30H,输出AL。即可得到16进制对应的十进制数。
- (注意输出的字符的值是不等于机器中存放的二进制的值,因此需要进行加减法)最后输出对应的16进制的ascii码的值。
- 十六进制数向十进制数的转换流程图:
三、源代码
DATA SEGMENT
TIP DB 'INPUT THE NUMBER: ','$'
TIP1 DB ' <=> ','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
LEA DX,TIP
MOV AH,09H
INT 21H
INPUT:
MOV AH,1
INT 21H
CMP AL,30H
JB EXIT
CMP AL,39H
JA COMPER1
JMP CHANGE1 ;在0~9之间
COMPER1:
CMP AL,41H
JB EXIT
CMP AL,46H
JA COMPER2
JMP CHANGE2 ;在A-F之间
COMPER2:
CMP AL,61H
JB EXIT
CMP AL,66H
JA EXIT
JMP CHANGE3 ;在a~f之间
CHANGE1:
SUB AL,30H
JMP ENT
CHANGE2:
SUB AL,37H
JMP ENT
CHANGE3:
SUB AL,57H
JMP ENT
ENT:
MOV BL,AL
LEA DX,TIP1
MOV AH,09H
INT 21H
MOV AL,BL
MOV AH,0
MOV BL,10
DIV BL
MOV DH,AH
CMP AL,0
JE ONE
MOV DL,AL ;十位数是1
ADD DL,30H
MOV AH,02H
INT 21H
ONE: ;十位数是0
MOV DL,DH
ADD DL,30H
MOV AH,02H
INT 21H
EXIT:
MOV AH,4CH
INT 21H
CODE ENDS
END START
还没有评论,来说两句吧...