assembly - 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。
我在想什么是错的,什么是对的?谢谢!
解决方案
推荐阅读
- javascript - Nodejs - 按时间戳属性对大型数组对象进行分组
- javascript - Javascript:当 url 为 localhost 时加载脚本
- java - 如何用 JPA 建立这个类图?
- c++ - 未找到体系结构 x86_64 的符号
- node.js - 如何防止 mongoose save() 创建一些架构默认值?
- c++ - 如何将类成员地址传递给函数,以便将其分配给函数内部的类成员指针?
- javascript - Vue.js 在渲染时通过 vue.router 参数动态填充内容
- scheme - 与对的组合
- azure-devops - Azure Devops 将构建 ID 作为参数传递给 YAML 部署管道
- c++ - TI RSLK MAX 机器人的编码器