我知道有很多方法可以做到这一点,我正在努力寻找最有效的方法。
我试图避免的一种特殊方法是从零中减去数字,因为它涉及将值从曾经为 0 的寄存器传输回包含预先否定的数字的寄存器,这将是一种痛苦。
我知道有很多方法可以做到这一点,我正在努力寻找最有效的方法。
我试图避免的一种特殊方法是从零中减去数字,因为它涉及将值从曾经为 0 的寄存器传输回包含预先否定的数字的寄存器,这将是一种痛苦。
从我在网上能找到的关于 Y86 的有限信息来看,它是 x86 的简化版本。x86 指令集有一个NEG
对数字求反的指令。Y86 没有。您可能必须从 0 中减去您的值。
抱歉,Y86 是有限的,所以几乎任何你能想象到的操作最终都会比简单的 0 减法消耗更多的卡路里。
我们可以做什么优化 0 的建立(通过使用 XOR)和中间值的保存/恢复(通过使用堆栈。)
以下代码有效:
#
# Negate a number in %ebx by subtracting it from 0
#
Start:
irmovl $999, %eax // Some random value to prove non-destructiveness
irmovl Stack, %esp // Set the stack
pushl %eax // Preserve
Go:
irmovl $300, %ebx
xorl %eax, %eax
subl %ebx,%eax
rrmovl %eax, %ebx
Finish:
popl %eax // Restore
halt
.pos 0x0100
Stack: