数字转换
题目:编写一个程序,将用户从键盘输入的十进制数(不超过65535)转换成为十六进制数并显示。程序功能如下:
⑴ 从键盘接受用户输入的十进制数ASCII码字符串;
⑵ 将十进制数ASCII码字符串转换成十六进制数ASCII码字符串;
⑶ 显示转换后的十六进制数;
我的思路:
由于从键盘输入的数是以ASCII字符串形式读入的,我先从这个字符串中恢复每位数字的十进制值入栈,乳若输入1234,则将数字1,2,3,4分别取出入栈,再加权后存入寄存器(此时应该是默认以十六进制保存的吧),我再将其依次转换为对应的ASCII字符输出,如输入的十进制数对应的十六进制数为abcdH,则依次输出字符a,b,c,d(ASCII)
我的代码:
data segment
s0 db 0dh,0ah,"$"
s1 db "Please input a dec num: $"
s2 db "The hex num is: $"
n equ 5
buf db n+1
count db 0
string db n+1 dup('$')
data ends
stack segment stack
db 100 dup(?)
stack ends
code segment
assume cs:code,ds:data,ss:stack
start:
mov ax, data
mov ds, ax
mov ah, 09h
mov dx, offset s1
int 21h
mov ah, 0ah
lea dx, buf
int 21h
lea si, string
mov ah, 09h
mov dx, offset s0
int 21h
mov ah, 09h
mov dx, offset s2
int 21h
mov cx, 0
mov cl, count
L:
push cx
mov bx, 0
mov ax, [si]
mov cx, 4
L1:
shr ax, 1
rcl bx, 1
dec cx
jnz L1
pop cx
push bx
jmp L
mov cl, count
mov di, 10
again:
mov al, 1
mov bh, cl
jiaq:
mul di
dec bh
jnz jiaq
pop bx
mul bl
add dx, ax
loop again
push dx
mov cl, 4
tohex:
mov bx, 0
mov bh, 4
shl dx, 1
rcl bl, 1
dec bh
jnz tohex
push dx
cmp bl, 09h
jbe asc1
asc2:
sub bl, 9
or bl, 40h
mov ah, 02h
mov dl, bl
int 21h
loop tohex
jmp end1
asc1:
or bl, 30h
mov ah, 02h
mov dl, bl
int 21h
loop tohex
jmp end1
end1:
mov ah, 4ch
int 21h
code ends
end start
各位高手帮帮忙吧,看看是哪里错了~我的思路合理吗?先谢谢了!