主题:从键盘键入一数字n,屏幕上输出它的阶层n!
zhriw
[专家分:0] 发布于 2005-12-08 11:37:00
用十进制数输出
怎么做啊,球各位大侠指点
小弟谢谢了
回复列表 (共5个回复)
沙发
erping [专家分:3660] 发布于 2005-12-08 12:39:00
;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
板凳
erping [专家分:3660] 发布于 2005-12-08 12:39:00
呵呵
超过 8 就不准确了
3 楼
zhriw [专家分:0] 发布于 2005-12-09 15:06:00
那个回车,
一直想弄,但初学,一直不会
我得努力
谢谢了
4 楼
xxo [专家分:0] 发布于 2005-12-11 20:59:00
_@0:
mul ch ;ax = al * 10
mov dl, byte ptr [si]
xor dl, '0'
add ax, dx
inc si
dec cl
jnz _@0
那位解释一下这段,看不懂
谢了
5 楼
henryhu [专家分:0] 发布于 2005-12-11 22:41:00
我运行了一下,应该是超过10就不行了
不过写得很不错,呵呵!
我来回复