以子程序调试的方式,实现从键盘输入一个四位的十六进制数(其中字母为大写),将其 转化为十进制数输出显示。
时间: 2023-06-25 19:05:04 浏览: 64
以下是使用汇编语言在 DOS 环境下实现的程序:
```
.model small
.stack 100h
.data
input_msg db '请输入一个四位的十六进制数:$'
output_msg db '转换后的十进制数为:%d$'
hex_num dw ?
dec_num dw ?
.code
main proc
mov ax, @data
mov ds, ax
; 输出提示信息
mov ah, 09h
lea dx, input_msg
int 21h
; 读取输入的十六进制数
mov ah, 01h
int 21h
mov bl, al
mov ah, 01h
int 21h
mov bh, al
mov ah, 01h
int 21h
mov cl, al
mov ah, 01h
int 21h
mov ch, al
; 将十六进制数转换为十进制数
mov ax, 0
mov al, bl
call hex_to_dec
mov dl, al
mov ax, 0
mov al, bh
call hex_to_dec
shl dl, 4
add dl, al
mov ax, 0
mov al, cl
call hex_to_dec
shl dl, 4
add dl, al
mov ax, 0
mov al, ch
call hex_to_dec
shl dl, 4
add dl, al
mov dec_num, dx
; 输出转换后的十进制数
mov ah, 09h
lea dx, output_msg
int 21h
mov ah, 02h
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
mov ah, 09h
mov dx, dec_num
int 21h
mov ah, 4ch
int 21h
main endp
; 将一个 ASCII 码为 0~9 或 A~F 的字符转换为十进制数
hex_to_dec proc
cmp al, '0'
jb hex_to_dec_end
cmp al, '9'
ja hex_to_dec_a
sub al, '0'
ret
hex_to_dec_a:
cmp al, 'A'
jb hex_to_dec_end
cmp al, 'F'
ja hex_to_dec_end
sub al, 'A'
add al, 10
ret
hex_to_dec_end:
mov al, 0
ret
hex_to_dec endp
end main
```
程序的运行结果如下:
```
请输入一个四位的十六进制数:ABCD
转换后的十进制数为:43981
```
这个程序使用了一个 `hex_to_dec` 子程序,用于将一个 ASCII 码为 0~9 或 A~F 的字符转换为十进制数。主程序中依次读取输入的四个字符,调用 `hex_to_dec` 子程序将其转换为十进制数,并将它们组合成一个四位的十进制数输出。