首页 > 解决方案 > cltq 在汇编中真正做了什么?

问题描述

我有一些我试图理解的汇编代码:

   0x0000000000401024 <+55>:    mov    $0x0,%ecx                                    
   0x0000000000401029 <+60>:    mov    $0x0,%edx                                    
   0x000000000040102e <+65>:    add    $0x1,%edx              
   0x0000000000401031 <+68>:    cltq   
   0x0000000000401033 <+70>:    mov    0x402360(,%rax,4),%eax       

但是我很难真正理解这段代码。我读到 cltq 将 4 字节字转换为 8 字节字。这总是适用于 eax 和 rax 吗?因此,考虑到符号,基本上 rax 会被 eax 填充,而 rax 中的其他信息会丢失。这个对吗?

此外,下一行代码的结果是什么?我认为 %rax 中的值乘以 4 并添加到 0x402360,然后将对应于该地址的值放入 eax。

我在想什么是错的,什么是对的?谢谢!

标签: assemblyx86-64

解决方案


推荐阅读