assembly - mov指令的各种编码
问题描述
我有以下汇编代码用于将立即数移动到 8、16、32、64 位寄存器中:
.globl _start
_start:
mov $1, %rax
mov $2, %eax
mov $3, %ax
mov $4, %ah
mov $5, %al
在调试时gdb
:
0x0000000000401000 48 c7 c0 01 00 00 00 ? mov $0x1,%rax
0x0000000000401007 b8 02 00 00 00 ? mov $0x2,%eax
0x000000000040100c 66 b8 03 00 ? mov $0x3,%ax
0x0000000000401010 b4 04 ? mov $0x4,%ah
0x0000000000401012 b0 05 ? mov $0x5,%al
在英特尔页面上它显示:
Opcode专栏的一些问题:
+rb
or+rw
or是什么+rd
意思?- 我猜
ib
,iw
,id
, 表示立即字节,-word,-double- 对吗?io
最后一行是什么意思? - 将操作码从to递增的指令的
REX
前缀是什么?ah
b0
b4
- 为什么
mov imm, r16
需要66
前缀?它没有在 . 行中列出任何前缀imm16
。似乎66
只是在 16 位寄存器上标记了这个? - 最后,为什么是三字节
48 c7 c0
代码mov imm, r64
?我没看到
解决方案
推荐阅读
- android - 在 Kotlin 的底部片段中添加子片段
- r - 如果语句必须采用这种格式,为什么要使用 R?
- python - 填写分类列的缺失值
- javascript - React Native:点击 ScrollView 组件内的子组件触发最后一项的 onPress 事件
- php - PHP Group Array 按函数对值的结果
- python - 在 Python 中创建具有多列的运行总计
- artificial-intelligence - 使用热图核心图像探索数据
- javascript - 如何在svg纹理threejs之上添加织物js纹理
- python - currentIndexChanged 和 currentTextChanged PyQt5 有什么区别
- entity-framework-core - 无法跟踪“Entity”类型的实体,因为其主键属性“Id”为空