注册 登录
编程论坛 汇编论坛

结果错误

zacom 发布于 2008-05-24 18:21, 709 次点击
想把十进制数先转化为二进制再转换为十六进制,但结果显示错误,.,,找不出错在哪里..请帮忙..
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
2 回复
#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
#3
zhulei19782008-06-05 20:38
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
           mov ah,0
           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
        jl  show
        add dl,07h
show:  push ax
        mov ah,02h
        int 21h
      pop ax
        dec bx
        jnz _in        
_return:mov ax,4c00h
      int 21h   
code ends
     end start
1