在Y86中否定数字

时间:2014-11-17 01:04:32

标签: y86

我知道会有很多方法可以做到这一点,并且我试图找到最有效的方法。

我试图避免的一种特殊方法是从零中减去数字,因为它涉及将曾经有0的寄存器中的值传递回包含预先否定数字的寄存器,这将是一个痛苦

2 个答案:

答案 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: