首页 > 解决方案 > sarq 和 shrq 的区别

问题描述

名称:值

%rdi: 0x6

%rax: 0x4

sarq 和 shrq 有什么区别?

如果我有 sarq $1, %rdi 这个值会怎样?shrq %rdi 是做什么的?

标签: cassemblyx86-64bit-shift

解决方案


sarq是四字的算术右移,shrq是四字的逻辑右移。不同之处在于算术移位将用最左边的位(也称为符号位)填充空位,而逻辑右移只会用 0 填充它们。

对于正数,它们的行为是相同的。对于负数,它们的行为完全不同。

例如,假设%rax = 16 (0x0000 0000 0000 0010). 两者sar $4, %raxshrq $4, %rax都将设置%rax为 1 ( 0x0000 0000 0000 0001)。

现在如果%rax = -16 (0xffff ffff ffff fff0). sar $4, %rax将设置%rax为 -1 ( 0xffff ffff ffff ffff),而shr $4, %rax将设置%rax为 1152921504606846975 ( 0x0fff ffff ffff ffff)。

使用哪条指令取决于数据类型和您想要做什么。C>>运算符sar用于有符号数据类型和shr无符号数据类型。


推荐阅读