assembly - 如何在带有 if 条件的 Assembly 中编写 mod?
问题描述
如果有条件,我目前正在尝试将其编写为汇编中的一行。我该怎么做?
if iterator%2==1
解决方案
您正在测试除以 2 的余数。只需查看最低位!
test dword [iterator], 1 ; Lowest bit has VALUE 1
jnz IsTrue
IsFalse:
...
IsTrue:
...
或者使用bt
指令:
bt dword [iterator], 0 ; Lowest bit has INDEX 0
jc IsTrue
IsFalse:
...
IsTrue:
...
不知道它是否会出现在您的程序中,但如果迭代器恰好是负数,那么除以 2 的余数永远不会是 1。(参见1201ProgramAlarm 的注释)
如果您的指导精神if iterator%2==1
是区分奇数和偶数,那么建议的解决方案仍然成立。IsTrue匹配IsOdd和IsFalse匹配IsEven。