回 帖 发 新 帖 刷新版面

主题:用查表的方法求值

data  segment
      pfi  db 0.1.4.9.16.25.36.49.64.81
      num  db 8
data ends
     用查表的方法将num中的数据转换为它的平方值

回复列表 (共1个回复)

沙发


;2006-1-5
;data  segment
;      pfi  db 0, 1, 4, 9, 16, 25, 36, 49, 64, 81
;     num  db 8
;data ends
;     用查表的方法将num中的数据转换为它的平方值


.model small
.stack
.data
pfi        db    0, 1, 4, 9, 16, 25, 36, 49, 64, 81
num        db    8

.code
_main:
        mov        ax, @data
        mov        ds, ax

        mov        bx, offset pfi
        mov        al, num
        xlat
        
        xor        ah, ah
        mov        cx, 10
        call    print    ;输出结果

        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
end _main

我来回复

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