![]() |
#2
henankaifei7172008-05-29 16:00
我看了你的程序我感觉你这个程序的算法错了,我写了一个你看看
crlf macro mov ah,02h mov dl,0dh int 21h mov ah,02h mov dl,0ah int 21h endm ;定义数据段 data segment infon db 0dh,0ah,'Please input a number:$' binary db 0dh,0ah,'The binary type: $' hex db 0dh,0ah,'The hex type: $' w dw 0 b dw 4 buf db 8 db ? db 8 dup (?) data ends stack segment stack wdsew dw 50 dup(?) top dw ? stack ends code segment assume cs:code, ds:data, ss:stack start: mov ax,data mov ds,ax mov sp,top lea dx,infon mov ah,9 int 21h lea dx,buf mov ah,10 int 21h mov cl,[buf+1] lea di,buf+2 call datacate crlf lea dx,binary mov ah,09h int 21h mov cx,0010h mov bx,w ttt: rol bx,1 mov dl,bl and dl,01h add dl,30h mov ah,02h int 21h loop ttt crlf lea dx,hex mov ah,09h int 21h mov bx,w mov cl,4 _in: rol bx,cl mov dl,bl and dl,0fh add dl,30h cmp dl,3ah jb show add dl,07h show: mov ah,02h int 21h sub b,1 jne _in mov ah,4ch int 21h datacate proc near ;把输入的数字字符串转化为数字 push cx dec cx lea si,buf+2 tt1: inc si loop tt1 pop cx mov dh,30h mov bl,10 mov ax,1 bb: push ax sub byte ptr[si],dh mul byte ptr[si] add w,ax pop ax mul bl dec si loop bb ret datacate endp code ends end start |
想把十进制数先转化为二进制再转换为十六进制,但结果显示错误,.,,找不出错在哪里..请帮忙..
stack segment
dw 512 dup(?)
stack ends
data segment
a db 'welcome to this',0ah,0dh,'$'
b db 'the number is ','$'
data ends
code segment
assume cs:code,ds:data,ss:stack
start: mov ax,data
mov ds,ax
mov dx,offset a
mov ah,9
int 21h
xor bx,bx
putin: mov ah,1
int 21h
cmp al,'#'
jz endput
sub al,30h
shl bx,1
mov cx,bx
shl bx,1
shl bx,1
add bx,cx
add bx,ax
jmp putin
endput: mov dl,0ah
mov ah,2
int 21h
mov dl,0dh
mov ah,2
int 21h
mov dx,offset b
mov ah,9h
int 21h
mov dl,bl
mov ah,2
int 21h
mov ax,bx
mov bx,4
mov cl,4
_in:rol ax,cl
mov dl,al
and dl,0fh
add dl,30h
cmp dl,3ah
jb show
add dl,07h
show: mov ah,02h
int 21h
dec bx
jnz _in
_return:mov ax,4c00h
int 21h
code ends
end start