我知道有很多方法可以做到这一点,我正在努力寻找最有效的方法。
发布于 2014-11-17 09:09:24
从我在网上能找到的关于Y86的有限信息来看,它是x86的简化版本。x86指令集有一条NEG指令,用于对数字求反。Y86不需要。你可能需要从0中减去你的值。
发布于 2015-11-18 09:33:22
对不起,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: https://stackoverflow.com/questions/26963993
复制相似问题