回 帖 发 新 帖 刷新版面

主题:从键盘键入一数字n,屏幕上输出它的阶层n!

用十进制数输出
怎么做啊,球各位大侠指点
小弟谢谢了

回复列表 (共5个回复)

沙发

;2005年12月8日12:01:26
;dummy
.model small


_Enter    macro    ;回车
    mov    dl, 0AH
    mov    ah, 2
    int    21H
    mov    dl, 0DH
    mov    ah, 2
    int    21H
    endm

.stack
.data
strMsg        db 'please input a number: ', '$'
strNumber    db    6
db    ?
db    6 dup (?)

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

lea        dx, strMsg
mov        ah, 9
int        21H

lea        dx, strNumber
mov        ah, 0AH
int        21H

xor        ax, ax
xor        dx, dx
mov        cl, byte ptr [strNumber + 1]
mov        ch, 10
lea        si, [strNumber + 2]
_@0:
mul        ch    ;ax = al * 10
mov        dl, byte ptr [si]
xor        dl, '0'
add        ax, dx
inc        si
dec        cl
jnz        _@0

mov        cx, ax
mov        ax, 1
_@1:
mul        cx
loop    _@1

push    ax
push    dx
_Enter

pop        dx
pop        ax

push    ax
mov        ax, dx
mov        cx, 10
call    print    ;输出高位字
pop        ax
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

板凳

呵呵
超过 8 就不准确了

3 楼


那个回车,
一直想弄,但初学,一直不会
我得努力

谢谢了

4 楼

_@0:
mul        ch    ;ax = al * 10
mov        dl, byte ptr [si]
xor        dl, '0'
add        ax, dx
inc        si
dec        cl
jnz        _@0


那位解释一下这段,看不懂
谢了

5 楼

我运行了一下,应该是超过10就不行了
不过写得很不错,呵呵!

我来回复

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