2013-03-12 57 views
0

我写了下面这段代码,但是它得到的答案错了。它应该做x^2,但它似乎迭代了比需要更多的时间:装配迭代

1的结果是2 // 1 + 1 = 2
2的结果是8 // 2 + 2 + 2 = 8

我相信它将CX与ZeroFlag比较,而不是第一条语句中的1。是对的吗?

pos: 
    MOV CX,Number 
    again: Add Number,AX 
      Dec cx 
      cmp cx,1 
      jg again ; statement no. 1 
    JMP DONE 
+0

您要添加错误的结果(添加数字,AX),而不是相乘。 – m0skit0 2013-03-12 12:03:19

+0

不应该使用乘法或除法.. – geekybedouin 2013-03-12 12:04:37

+0

“AX”包含什么?此外,您的逻辑有点不合适:即使在进入循环之前“CX”<= 1,您总是进行一次加法。 – Michael 2013-03-12 12:12:13

回答

1

只要您确定AX初始化为零,代码应该可以工作。 尝试:

MOV Number, AX 

在循环开始之前,还要检查你的数字大于1,在循环开始之前只所以它不会产生对< 1.

+1

AX应该包含数字的值..但它实际上是holdin(数字* 2)改变't并且工作得很好 – geekybedouin 2013-03-12 12:23:46