| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 610 人关注过本帖
标题:数字转换
只看楼主 加入收藏
屁洞
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-10-6
结帖率:100%
收藏
 问题点数:0 回复次数:0 
数字转换
题目:
编写一个程序,将用户从键盘输入的十进制数(不超过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

各位高手帮帮忙吧,看看是哪里错了~我的思路合理吗?先谢谢了!
搜索更多相关主题的帖子: 数字 
2010-10-20 21:18
快速回复:数字转换
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015722 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved