我正在编写一个非递归程序,它计算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。
答案 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。