将寄存器设置为1的首选方法

时间:2020-09-13 03:41:38

标签: assembly x86-64 micro-optimization machine-code

看起来the suggested way to set a register to 0是:

xor %eax, %eax    # like mov $0, %eax  but sets FLAGS

将寄存器设置为1的相应首选方法是什么?我想到的一些是:

mov $1, %eax
or  $1, %eax        # as discussed in comments, doesn't work for most EAX inputs

另外,在gdb或其他地方是否有办法快速查看带有所有操作数的指令的字节大小?除非我的计算错误(并且我很不擅长以十六进制计数),否则它的大小如下所示(来自gdb):

>>> x/7i $rip
=> 0x400078 <_start>:       xor    %eax,%eax  # 2 bytes
   0x40007a <_start+2>:     xor    %rax,%rax  # 3 bytes
   0x40007d <_start+5>:     or     $0x1,%rax  # 4 bytes
   0x400081 <_start+9>:     or     $0x1,%eax  # 3 bytes
   0x400084 <_start+12>:    mov    $0x1,%eax  # 5 bytes
   0x400089 <_start+17>:    mov    $0x1,%rax  # 7 bytes
   0x400090 <_start+24>:

0 个答案:

没有答案
相关问题