我已经制作了一个代码,用于找出8086汇编语言中给定数字的所有阶乘。但问题是我输出错了。例如:当输入为54时,我得到的结果为6但结果应为8.它还为其他一些输入提供错误。但我无法在代码中发现问题。
这是我的代码:
.MODEL SMALL
.STACK 100
.DATA
NUMBER DW 54
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
MOV AX,NUMBER
MOV BX,1
MOV CX,0
WHILE_:
DIV BX
CMP DX,0
JE CHECK
MOV AX,NUMBER
INC BX
CMP BX,AX
JL WHILE_
JMP END_
CHECK:
CMP AX,BX
JG INC_
JE INC2_
JMP END_
INC_:
ADD CX,2
MOV AX,NUMBER
INC BX
CMP BX,AX
JL WHILE_:
JMP END_
INC2_:
INC CX
JMP END_
END_:
ADD CX,48
MOV AH,2
MOV DX,CX
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
RET
我应该做出哪些更改才能产生正确的输出(如54为8)
答案 0 :(得分:2)
您需要在dx
div
归零
WHILE_:
; something here to zero dx
DIV BX
CMP DX,0
JE CHECK
通过修复此问题,我得到了许多数字的正确结果。如果数字大于9,则输出中仍会出现问题。您的代码使用单个数字,对于多个数字(例如,因子为72),您需要将生成的字符串转换为ASCII。 / p>
它也有助于发布没有错误的代码!
INC_:
ADD CX,2
MOV AX,NUMBER
INC BX
CMP BX,AX
JL WHILE_: ; <<<<< What is this colon?!?!
JMP END_
学会评论您的代码!!这在大会中很重要,有助于发现错误。另外,你发布了16位代码,它已经过时了!我们很多人多年没有使用它了!