我知道会有很多方法可以做到这一点,并且我试图找到最有效的方法。
我试图避免的一种特殊方法是从零中减去数字,因为它涉及将曾经有0的寄存器中的值传递回包含预先否定数字的寄存器,这将是一个痛苦
答案 0 :(得分:0)
根据我在网上可以找到的关于Y86的有限信息,它是x86的简化版本。 x86指令集有NEG
指令来否定数字。 Y86没有。您可能需要从0中减去您的值。
答案 1 :(得分: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: