首页 > 汇编语言 > 浮点数处理与指令编码
汇编语言单字节指令与立即操作数简述
没有操作数或只有一个隐含操作数的指令是最简单的指令。这种指令只需要操作码字段,字段值由处理器的指令集预先确定。下表列出了几个常见的单字节指令。
在这些指令中,INC DX 指令好像是不应该岀现的,它出现的原因是:指令集的设计者决定为某些常用指令提供独特的操作码。其结果是,为了代码量和执行速度要对寄存器增量操作进行优化。
下表列出了操作码使用的寄存器编号。
下面例子中出现的所有数值都为十六进制。
【示例 1】PUSH CX 机器指令为 51。编码步骤如下:
1) 带一个 16 位寄存器操作数的 PUSH 指令编码为 50。
2) CX的寄存器编码为1,因此1+50得到操作码为51。
【示例 2】MOV AX, 1 机器指令为 B8 01 00(十六进制)。编码过程如下:
1) 立即数送 16 位寄存器的操作码为 B8。
2) AX 的寄存器编号为 0,将 0 加上 B8(参见上表所示)。
3) 立即操作数(0001)按小端顺序添加到指令(01, 00 )。
【示例 3】MOV BX, 1234h 机器指令为 BB 34 12。编码过程如下:
1) 立即数送 16 位寄存器的操作码为 B8。
2) BX 的寄存器编号为 3,将 3 加上 B8 得到操作码 BB。
3) 立即操作数字节为 34 12。
从实践的角度出发,建议手动汇编一些 MOV 立即数指令来提高能力,然后通过 MASM 的源列表文件中的生成代码来检查汇编结果。
指令 | 操作码 | 指令 | 操作码 |
---|---|---|---|
AAA | 37 | LODSB | AC |
AAS | 3F | XLAT | D7 |
CBW | 98 | INC DX | 42 |
在这些指令中,INC DX 指令好像是不应该岀现的,它出现的原因是:指令集的设计者决定为某些常用指令提供独特的操作码。其结果是,为了代码量和执行速度要对寄存器增量操作进行优化。
立即数送寄存器
立即操作数(常数)按照小端顺序(起始地址为最低字节)添加到指令。首先关注的是立即数送寄存器指令,暂不考虑内存寻址的复杂性。将一个立即字送寄存器的 MOV 指令的编码格式为:B8+rw dw,其中操作码字节的值为 B8+rw,表示将一个寄存器编号(0〜7)与 B8 相加;dw 为立即字操作数,低字节在低地址。下表列出了操作码使用的寄存器编号。
寄存器 | 编号 | 寄存器 | 编号 |
---|---|---|---|
AX/A1 | 0 | SP/AH | 4 |
CX/CL | 1 | BP/CH | 5 |
DX/DL | 2 | SI/DH | 6 |
BX/BL | 3 | DI/BH | 7 |
下面例子中出现的所有数值都为十六进制。
【示例 1】PUSH CX 机器指令为 51。编码步骤如下:
1) 带一个 16 位寄存器操作数的 PUSH 指令编码为 50。
2) CX的寄存器编码为1,因此1+50得到操作码为51。
【示例 2】MOV AX, 1 机器指令为 B8 01 00(十六进制)。编码过程如下:
1) 立即数送 16 位寄存器的操作码为 B8。
2) AX 的寄存器编号为 0,将 0 加上 B8(参见上表所示)。
3) 立即操作数(0001)按小端顺序添加到指令(01, 00 )。
【示例 3】MOV BX, 1234h 机器指令为 BB 34 12。编码过程如下:
1) 立即数送 16 位寄存器的操作码为 B8。
2) BX 的寄存器编号为 3,将 3 加上 B8 得到操作码 BB。
3) 立即操作数字节为 34 12。
从实践的角度出发,建议手动汇编一些 MOV 立即数指令来提高能力,然后通过 MASM 的源列表文件中的生成代码来检查汇编结果。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算