基本组成元素
Instruction
MOV
|
|
ADD SUB
|
|
INC DEC
|
|
AND OR XOR
|
|
MOVSB
- 将源地址中的字节复制到目标地址,并将指针都加上1
LOOP
- LOOP指令会将CX寄存器中的计数器值减1,然后检查计数器的值是否为0,如果不为0则跳转到标号所指定的位置继续执行循环体,否则退出循环
NOP
- No Operation,目的为延时或填充
CMP TEST
CMP
指令将第一个操作数减去第二个操作数,并根据结果设置标志位,以表示比较的结果。
-
如果第一个操作数大于第二个操作数,则标志位中的ZF(零标志位)将被清除,SF(符号标志位)和OF(溢出标志位)将被设置。
-
如果第一个操作数等于第二个操作数,则ZF将被设置,SF和OF将被清除。
-
如果第一个操作数小于第二个操作数,则ZF、SF和OF都将被清除。
TEST
将两个操作数进行逐位的逻辑AND运算,并设置标志位来指示运算结果。
-
如果运算结果为0,则将零标志位(ZF)设置为1。
-
如果运算结果中有奇数个1,则将奇偶标志位(PF)设置为1。
-
将符号标志位(SF)设置为运算结果的最高位(即最左边的位)。
-
将进位标志位(CF)和溢出标志位(OF)清零。
跳转指令
- 无条件跳转:JMP
|
|
- 条件跳转:JZ,JNZ
|
|
- 条件跳转: JE、JNE
|
|
- 条件跳转: JA、JAE、JB、JBE
|
|
INT
|
|
DB EQU
- DB (Date Byte)
- 范例
|
|
- 实例
|
|
运算符
offset
获取偏移量,即标签在程序中的地址与段基址之差
修饰符
[ ]
|
|
Register (以x86为例)
通用寄存器
- 16位
AX | 累加器寄存器 |
---|---|
BX | 基址寄存器 |
CX | 计数器寄存器 |
DX | 数据寄存器 |
SI(Source Index) | 源地址寄存器 |
DI | 目的地址寄存器 |
- 32位
- 加上前缀E
- 64位
- 加上前缀R
段寄存器
CS | 代码段寄存器 |
---|---|
DS | 数据段寄存器 |
ES | 附加段寄存器 |
SS | 堆栈段寄存器 |
FS | 存储一个段的基地址(与线程相关) |
GS | 存储一个段的及地址(与进程相关) |
指针寄存器
PC | 程序计数器 |
---|---|
BP | 基址指针寄存器 |
SP | 堆栈指针寄存器 |
HP | 管理堆内存的分配和释放 |
DP | 数据指针(索引寄存器),用于数组或其他结构的访问 |
操作码
0:无操作
1:存储器读取
2:存储器写入
3:寄存器-寄存器算术操作
4:常量扩展和寄存器-立即数算术操作
5:逻辑操作
6:条件分支
7:无条件跳转
8:函数调用
9:函数返回
10:中断处理
11:输入输出
12-15:保留
Memory
Label
Constant
数值常量
|
|
字符常量
|
|
字符串常量
|
|
符号常量
- 定义方式
- 使用宏指令或EQU定义
- 实例
- 定义缓冲区大小
|
|
处理器
处理器状态 – 标志位(flags) —— 特殊的处理器状态
-
零标志位(ZF):最近执行的操作结果是否为0
-
符号标志位(SF):最近执行的操作结果的最高有效位(MSB)是否为1。
-
进位标志位(CF):在无符号数加法或减法中,判断结果是否超出了当前的数据类型范围. 在位运算中,该标志位通常表示最高位的溢出情况。
-
溢出标志位(OF):在有符号数加法或减法中,判断结果是否超出了当前的数据类型范围. 在位运算中,该标志位通常表示最高位的溢出情况。
-
奇偶标志位(PF):判断最近执行的操作结果的二进制表示中1的个数是否为偶数。