首页 > 解决方案 > 如何在带有 if 条件的 Assembly 中编写 mod?

问题描述

如果有条件,我目前正在尝试将其编写为汇编中的一行。我该怎么做?

if iterator%2==1

标签: assembly

解决方案


您正在测试除以 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匹配IsOddIsFalse匹配IsEven


推荐阅读