回 帖 发 新 帖 刷新版面

主题:为什么没有输出结果呢

data segment
A    dw 4444
B    dw 2222
data ends

code segment
     assume cs:code,ds:data,es:data
start: mov ax,data
       mov ds,ax
       mov es,ax
       mov ax,A
       mov bx,B    
       sub ax,bx
       mov ah,4CH
       int 21h
code ends
     end start

回复列表 (共2个回复)

沙发

data segment
A    dw 4444
B    dw 2222
data ends

code segment
     assume cs:code,ds:data,es:data
start: mov ax,data
       mov ds,ax
       mov es,ax
       mov ax,A
       mov bx,B    
       sub ax,bx
       mov    cx, 10
       call    print    ;以 10 进制输出 ax 中的值
       mov ah,4CH
       int 21h
print    proc ;提供多种进制的输出
        ;ax 存放要转换的数
        ;cx 存放进制形式 (2 <= 进制 <= 35)
        cmp        cx, 2        
        jl        _error_
        cmp        cx, 35
        ja        _error_

        push    bx        ;保存 bx
        push    dx        ;...

        sub        sp, 16    ;16 (2 * 8)个字节的临时变量
        mov        bx, sp  ;bx 指向变量地址

        xor        dx, dx
_loop:
        cmp        ax, 0
        jne        _next
        cmp        dx, 0
        je        _print
_next:
        div        cx
        cmp        dx, 9            ;比较余数是否大于 9
        ja        _than_nine
        add        dl, '0'
        jmp        _save_dl
_than_nine:
        add        dl, 'A' - 0AH    ;大于 9 的数转换处理
_save_dl:
        mov        ss:[bx], dl
        inc        bx
        cwd
        jmp        _loop

_print:
        dec        bx
_print_next:
        cmp        bx, sp
        jl        _end
        mov        dl, ss:[bx]
        mov        ah, 2
        int        21H
        dec        bx
        jmp        _print_next
_error_:
        xor        ax, ax        ;return false
        ret
_end:
        add        sp, 16        ;恢复堆栈
        pop        dx
        pop        bx
        
        mov        ax, 1        ;return true
        ret
print    endp
code ends
     end start

板凳

好多啊,请问还有其他的方法吗?谢了

我来回复

您尚未登录,请登录后再回复。点此登录或注册