回 帖 发 新 帖 刷新版面

主题:我向各位高手请教个问题,编写一个X加减Y等于?的计算器,XY是16位带符号数子程序设计方法编写

先谢谢大家了!大家可以发到我的邮箱:jiangjian11101@163.com

回复列表 (共2个回复)

沙发

.model small
.data
X   dw  ?
Y   dw  ?

_Enter    macro    ;回车
    mov    dl, 0AH
    mov    ah, 2
    int    21H
    mov    dl, 0DH
    mov    ah, 2
    int    21H
    endm
.code
_main:
    mov    AX, @data
    mov    DS, AX
    call    input
    mov    X, AX
    call    input
    mov    Y, AX
    add    AX, X
    mov    CX, 10
    call    print
    _Enter
    mov    AX, 4C00H
    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

input    proc
        push    SI
        xor    SI, SI
        mov    CL, 10
    _input_1:
        mov    AH, 7
        int    21H

        mov    DL, AL    ;为输出字符做好准备
        sub    AL, '0'
        jl    _ret_input
        cmp    AL, 9
        jg    _ret_input

        push    AX
        mov    AX, SI
        mul    CL
        mov    SI, AX
        pop    AX
        xor    AH, AH
        add    SI, AX
        
        mov    AH, 2
        int    21H

        jmp    _input_1
    _ret_input:
        _Enter
        mov    AX, SI
        pop    SI
        ret
input    endp
end    _main

板凳

这个程序没有检查溢出,只处理了加法。
减法部分,只要改一个指令即可

我来回复

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