x86 指令编码全解析
1. 单字节指令
单字节指令是最简单的指令类型,它要么没有操作数,要么有隐含操作数。这类指令只需要操作码字段,其值由处理器的指令集预先确定。以下是一些常见的单字节指令及其操作码:
| 指令 | 操作码 |
| ---- | ---- |
| AAA | 37 |
| AAS | 3F |
| CBW | 98 |
| LODSB | AC |
| XLAT | D7 |
| INC DX | 42 |
这里的 INC DX 指令看似有些特别,但指令集的设计者为某些常用指令提供了独特的操作码,这样寄存器增量操作在代码大小和执行速度上都得到了优化。
2. 立即数移动到寄存器
立即操作数(常量)以小端序(最低字节在前)附加到指令中。先关注将立即值移动到寄存器的指令,暂时避开内存寻址模式的复杂性。将立即字移动到寄存器的 MOV 指令的编码格式是 B8 + rw dw ,其中操作码字节值为 B8 + rw ,表示将寄存器编号(0 到 7)加到 B8 上; dw 是立即字操作数,最低字节在前。寄存器编号如下表所示:
| 寄存器 | 代码 |
| ---- | ---- |
| AX/AL | 0 |
| CX/CL | 1 |
| DX/DL | 2 |
| BX/BL | 3 |
| SP/AH | 4 |
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



