xorq在寄存器里做什么?

我有点自信我理解了XOR,它通常用于默认值为0,如果你比较两个相同的值,它会将其设置为0,如果它们不同,结果是1。

如果你有以下几点

位置

价值

%递交

0 xa

% rbx

0 x3

% rcx

0 x9

xorq   %rcx,%rbx

那么下面的命令会做什么呢?我看不到xorq(只有xor)的任何文档,我知道所有这些x64寄存器是8字节,我猜我只是困惑,这个函数会做什么从我的回忆,我认为它会设置%rbx到一个新值?

###在AT&T语法中,大多数汇编代码指令都有一个单字符后缀来表示操作数的大小:

C声明

英特尔数据类型

汇编代码后缀

大小(字节)

字符

字节

int

双字

四字

char *

四字

浮动

单精度

双精度

一般来说,大小可以从寄存器的大小推断出来,但考虑下面的例子,将立即(常量)值移动到存储在EBX的地址的内存位置,你必须指导汇编程序的大小:

例如:

movb $2, (%ebx)   /* Move 2 into the single byte at the address stored in EBX. */
movw $2, (%ebx)   /* Move the 16-bit integer representation of 2 into the 2 bytes starting at the address in EBX. */
movl $2, (%ebx)   /* Move the 32-bit integer representation of 2 into the 4 bytes starting at the address in EBX. */

所以你的例子只是按位异或(独占或)%rbx和%rcx寄存器,并将结果存储在%rbx (%rbx = %rbx ^ %rcx)。

在这种情况下,操作数的大小影响不大,但让我们看另一个例子,我们只将%rax的低阶字节归零:

测试中:

.global _start
.text
_start:
    mov $-1, %rax
    xorb $-1, %al
# exit(0)
    mov $60, %rax
    xor %rdi, %rdi
    syscall

编译:

# gcc -nostdlib test.s

使用gdb会话检查:

# gdb -q ./a.out 
Reading symbols from /root/a.out...(no debugging symbols found)...done.
(gdb) b _start
Breakpoint 1 at 0x4000d4
(gdb) run
Starting program: /root/./a.out 
Breakpoint 1, 0x00000000004000d4 in _start ()
(gdb) disas
Dump of assembler code for function _start:
=> 0x00000000004000d4 <+0>: mov    $0xffffffffffffffff,%rax
   0x00000000004000db <+7>: xor    $0xff,%al
   0x00000000004000dd <+9>: mov    $0x3c,%rax
   0x00000000004000e4 <+16>:    xor    %rdi,%rdi
   0x00000000004000e7 <+19>:    syscall 
End of assembler dump.
(gdb) info reg $rax $al
rax            0x0  0
al             0x0  0
(gdb) ni
0x00000000004000db in _start ()
(gdb) info reg $rax $al
rax            0xffffffffffffffff   -1
al             0xff -1
(gdb) ni
0x00000000004000dd in _start ()
(gdb) info reg $rax $al
rax            0xffffffffffffff00   -256     <----- only the lower byte was xor'ed
al             0x0  0

引用:

x86程序集指南-操作后缀

阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码