如何将累加器值与装配中的特定正整数进行比较?

时间:2016-09-27 22:12:50

标签: assembly hex comparison fibonacci

我正在编写一个非递归程序,它计算Mac-1 Assembly架构中序列中第N个项的Fibonacci数。一切都很顺利,直到我达到我需要比较的函数点,看看我加载到累加器中的N值是否为< = 2.但是,我给出的唯一JUMP执行是JNEG(其中如果值为负则跳转)和JZER(如果值为零则跳转)。

所以我的问题是,如果我有:

0001  One:  1        // Constant definition
000A  N:    10       // N

在我可以说的功能中:

800y  LODL  y        // Loading N after its already been placed in the stack by offset y
C0xx  JNEG  Finished // If the number is negative, we are finished
50xx  JZER  Finished // If the number is zero, we are finished

但是我怎么说如果N <= 2?我只给出了负数或零的选项,但我需要比较我的循环中我的基本情况的N&lt; = 2。

1 个答案:

答案 0 :(得分:1)

请注意

  

a≤2⇒a - 2≤0⇒a - 2&lt; 0∨a= 0

可以使用现有说明测试这两种情况。

如果您想实施if (a0 <= a1) ... else ...,可以使用

LODD a0              /Accumulator = a0
SUBD a1              /Accumulator = a0 - a1
jzer _THEN_branch    /Jump to "then branch" if a0 == a1
jneg _THEN_branch    /Jump to "then branch" if a0 < a1

 /Put "else branch" code here

jump _IF_end

_THEN_branch:

 /Put "then branch" code here

_IF_end:

还有一些例子here