以子程序调试的方式,实现从键盘输入一个四位的十六进制数(其中字母为大写),将其 转化为十进制数输出显示。汇编语言
时间: 2023-06-23 14:10:29 浏览: 155
下面是汇编代码:
```
org 100h ; 程序从100h地址开始
start:
mov ah, 01h ; 从键盘读取一个字符
int 21h ; 调用21h中断
cmp al, 0Dh ; 判断是否为回车
je convert ; 如果是回车,转换为十进制数
call hex2dec ; 否则将十六进制字符转换为十进制数字
jmp start ; 继续读取下一个字符
convert:
mov ah, 02h ; 设置为显示字符
mov dl, 0Ah ; 显示换行
int 21h ; 调用21h中断
mov ah, 09h ; 显示字符串
lea dx, msg ; 加载msg字符串的地址
int 21h ; 调用21h中断
mov ah, 02h ; 设置为显示字符
mov dl, dh ; 显示最高位十进制数字
add dl, 30h ; 转换为ASCII码
int 21h ; 调用21h中断
mov dl, cl ; 显示次高位十进制数字
add dl, 30h ; 转换为ASCII码
int 21h ; 调用21h中断
mov dl, bl ; 显示次低位十进制数字
add dl, 30h ; 转换为ASCII码
int 21h ; 调用21h中断
mov dl, al ; 显示最低位十进制数字
add dl, 30h ; 转换为ASCII码
int 21h ; 调用21h中断
jmp start ; 继续读取下一个字符
hex2dec:
push ax ; 保存寄存器状态
push bx
push cx
push dx
mov bl, al ; 将输入的字符保存到bl寄存器
and bl, 0Fh ; 取出低四位
cmp bl, 0Ah ; 判断是否为数字
jl is_digit ; 如果是数字,直接转换为十进制
sub bl, 7h ; 如果是字母,将其转换为十进制
is_digit:
mov al, bl
mov bl, 10 ; 将bl设置为10,准备进行乘法运算
mul bl ; 将al和bl相乘
mov bl, ah ; 将乘法结果的高位保存到bl
mov bh, 0 ; 清空bh
mov al, bl ; 将bl的值赋给al
pop dx ; 恢复寄存器状态
pop cx
pop bx
pop ax
ret ; 返回主程序
msg db 'The decimal value is: $' ; 定义字符串
```
这个程序会从键盘读取一个字符,判断是否为回车。如果不是回车,则将十六进制字符转换为十进制数字,并继续读取下一个字符。如果是回车,则将四个数字转换为一个十进制数,并显示结果。
阅读全文