c - 汇编mov指令后缀?
问题描述
(我将这个问题基于 x86-64 架构)
如果主内存是一个由地址索引的字节数组 - 你为什么应该使用movq(%rdx), %rax
而不是movb(%rdx), %rax
?我的意思movq
是用于移动一个四字并且movb
用于移动一个字节。因此mov#(%rdx), %rax
,据我所知,源是内存中的一个位置,因此应该是 1 个字节。我知道寄存器%rax
实际上是 x86-64 上的四字,但这并不意味着我们是四字moving
移动 - 我们正在将一个字节移动到可以容纳四字(8 个字节)的地方 - 对吧?
那么为什么不使用movb(%rdx), %rax
或者可能movzbq (%rdx), %rax
呢?
解决方案
后缀告诉指令将移动多少字节。因此,当您这样做时movq (%rdx), %rax
,将从内存中的地址开始移动 8 个字节%rdx
。
movb (%rdx), %rax
不是有效的指令。 movb (%rdx), %al
会将地址 at%rdx
的 1 个字节移动到%rax
. movzbq (%rdx), %rax
移动 1 个字节,将其零扩展为 8 个字节,并将该值写入%rax
推荐阅读
- git - Jenkins 有时无法获取 repo
- php - 如何通过限制降序排序?PHP/SQL
- android - Checkout Android Billing API getPurchaseHistory 方法问题
- android - 为什么更新android gradle后出现错误?
- python - 构建 GUI 项目 + cairo
- java - Maven 使用“mvn install”命令构建失败
- c# - 在查询中使用 `DbFunctions.DiffDays(DateTime.Now, c.ModifiedDate)` 时,尽管表中有数据,实体框架仍返回 0 个结果
- swift - 未调用 UISeachController 委托方法,搜索栏无法成为第一响应者
- react-native - 特定选项卡上的 React Navigation 更新屏幕
- angular-material - Angular 5 是否支持 Angular 材质最新版本(7)