查找给定数字的所有因子时出错

时间:2014-09-03 01:26:19

标签: assembly

我已经制作了一个代码,用于找出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)

1 个答案:

答案 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位代码,它已经过时了!我们很多人多年没有使用它了!