给我写一个将数据段十六进制数据转换为十进制数据并显示的8086汇编语言代码
时间: 2024-03-16 21:43:14 浏览: 20
下面是一个简单的将数据段十六进制数据转换为十进制数据并显示的8086汇编语言代码,你可以参考一下:
```
;将十六进制数据转换为十进制数据并显示
.model small
.stack 100h
.data
msg db 'Enter the hex number: $'
result db 'The decimal number is: $'
num db 2
hexnum db 6
.code
main:
mov ax, @data
mov ds, ax
;输出提示信息
lea dx, msg
mov ah, 09h
int 21h
;读取用户输入的十六进制数
lea dx, hexnum
mov ah, 0Ah
int 21h
;将十六进制数转换为十进制数
mov si, 0
mov cx, 4
xor bx, bx ;清零
hexloop:
mov al, hexnum[si]
cmp al, '0'
jl invalid ;如果小于'0',则无效
cmp al, '9'
jle number ;如果在'0'~'9'之间,则是数字
cmp al, 'A'
jl invalid ;如果小于'A',则无效
cmp al, 'F'
jg invalid ;如果大于'F',则无效
sub al, 'A'-10 ;将字母'A'~'F'转换为数字10~15
number:
shl bx, 4 ;将结果左移4位
add bx, al ;将当前数字加入结果
inc si
loop hexloop
jmp print
invalid: ;如果输入的不是十六进制数,则输出错误信息并退出
mov ah, 09h
lea dx, invalidmsg
int 21h
mov ah, 4Ch
int 21h
print: ;将十进制数输出
mov ah, 0
mov cx, 10
mov si, 0
numloop:
xor dx, dx
div cx
push dx
inc si
cmp bx, 0
jne numloop
lea dx, result
mov ah, 09h
int 21h
pop dx
add dl, '0'
mov ah, 02h
int 21h
loop numloop
mov ah, 4Ch
int 21h
invalidmsg db 'Invalid hex number!$'
end main
```
这段代码首先提示用户输入一个十六进制数,然后使用 0Ah 中断读取用户输入,将十六进制数转换为十进制数,最后将十进制数输出。如果用户输入的不是十六进制数,则输出错误信息并退出程序。