汇编中数字的阶乘
Factorial of a number in assembly
我正在尝试查找数字的阶乘,但出现意外输出。对于 5,它应该是 120,但 00 即将到来。请帮助以下代码有时会进入无限循环。
.model small
.stack 100h
.data
buffer db 10 dup('$')
n dw 5
.code
main proc
mov ax , @data
mov ds ,ax
mov ax , n
mov bx , offset buffer
mov cx , 1
l1 :
inc cx
mul cx
cmp cx , n
jne l1
l2 :
mov dx, 0
mov cx ,10
div cx
add dl,48
mov [bx], dl
inc bx
cmp ax, 0
jne l1
mov dx , offset buffer ; moving address to dx
mov ah,9 ; printing string
int 21h
mov ax, 4c00h
int 21h
main endp
end main
l2
循环末尾的跳转不正确。当您应该跳到 l2
.
时,您跳到了 l1
此外,在你的 l1
循环中你 inc
和 mul
在你决定是否退出循环之前。因此,在 n
为 5 的情况下,您将得到 5 * 2 * 3 * 4 * 5
(即 600)。
我正在尝试查找数字的阶乘,但出现意外输出。对于 5,它应该是 120,但 00 即将到来。请帮助以下代码有时会进入无限循环。
.model small
.stack 100h
.data
buffer db 10 dup('$')
n dw 5
.code
main proc
mov ax , @data
mov ds ,ax
mov ax , n
mov bx , offset buffer
mov cx , 1
l1 :
inc cx
mul cx
cmp cx , n
jne l1
l2 :
mov dx, 0
mov cx ,10
div cx
add dl,48
mov [bx], dl
inc bx
cmp ax, 0
jne l1
mov dx , offset buffer ; moving address to dx
mov ah,9 ; printing string
int 21h
mov ax, 4c00h
int 21h
main endp
end main
l2
循环末尾的跳转不正确。当您应该跳到 l2
.
l1
此外,在你的 l1
循环中你 inc
和 mul
在你决定是否退出循环之前。因此,在 n
为 5 的情况下,您将得到 5 * 2 * 3 * 4 * 5
(即 600)。