【发布时间】:2016-07-06 04:29:40
【问题描述】:
这是我在一次采访中看到的一个问题:
A,B 是非负数,你需要返回 C=|A-B|您只有以下说明:
- INC 寄存器 - 寄存器加一
- DEC 寄存器 - 从寄存器中减一
- JNZ LABEL - 如果最后一条指令结果不为零,则跳转到标签
另外你可以使用其他初始值为零的寄存器。
我将如何解决这个问题?
【问题讨论】:
-
只需在循环中递减两者,直到其中一个为零。另一个显然是结果。
-
@Jester:如果你在循环中递减两者,你如何在
jnz之前测试两者? -
我把它作为练习留给了读者。显然,在每次循环迭代中,您都需要减少两者,如果第一个变为零,您需要退出循环并在外部减少另一个以进行补偿。你认为这需要一个答案吗?
-
@Jester:我认为这比评论要复杂得多。我怀疑您需要通过使用非零临时寄存器来构造无条件跳转,您也可以使用
inc/dec,所以jnz总是跳转。它变得有点复杂...... -
我投票结束这个问题,因为它是代码高尔夫。
标签: assembly