x86-64汇编:了解四字操作码`shlq`

时间:2018-07-26 14:00:26

标签: assembly x86-64

我想确认我对这个特定操作码的理解。

此行来自x-86-64机器(MBP 15“ 2017)中的汇编代码 我被这条指令弄糊涂了。

shlq    $5, %rsi

所以我知道的是:

  1. shlarithmetic的逻辑移位
  2. q是代表四字的后缀,在x86-64机器上是8字节或64位。

但是我不确定它将移位多少位

因此,我进行了广泛的研究,发现一些here看起来最相关。在第47页上,它说:

  

sal(或其同义词shl)向左移(乘)一个字节,一个单词或   long值,用于由立即值指定的计数,并存储   乘积分别是该字节,字或长。第二个左移>移位CL寄存器中指定的计数值。高阶位   移入进位标志;低位设置为0。

我不确定它们在这里到底是什么意思,特别是“将乘积存储在该字节,字或长整数中”部分,但这是我的理解:

shlq $5, %rsi

这将左移5次。因此,该值将是原始值的2 ^ 5 = 32倍。然后,它将乘以该值与相应字长的乘积,在这种情况下,该字长为四字,因此为8个字节或64位。换句话说,它将总共移位 32 * 64 = 2048位或32 * 8字节= 256字节。

我正确吗?

上面的同一页下面有一个示例,但我听不懂。

  

示例

     

左移,由常数(253)指定的计数,32位内容   有效地址的数量(由EDI寄存器寻址加上偏移量)   之4):shll $253, 4(%edi)

您的帮助将不胜感激!

研究的文档:

  

https://docs.oracle.com/cd/E19641-01/802-1948/802-1948.pdf   https://docs.oracle.com/cd/E19455-01/806-3773/instructionset-27/index.html   https://www.engr.mun.ca/~anderson/teaching/8894/reference/x86-assembly/   https://www.cs.cmu.edu/~fp/courses/15213-s07/misc/asm64-handout.pdf   https://cs.brown.edu/courses/cs033/docs/guides/x64_cheatsheet.pdf   https://docs.oracle.com/cd/E19253-01/817-5477/817-5477.pdf   ...还有更多

1 个答案:

答案 0 :(得分:1)

您的直觉是正确的,直到“然后,它将用该值与相应的字长(在这种情况下为四字)进行乘积运算”。那部分不会发生。该值仅乘以32,就可以了。