指令:在汇编过程中被翻译成为相应的目标代码,并经过连接生成计算机可执行的机器指令代码;
伪指令:汇编控制指令,在汇编过程中实现:数据定义、分配存储区、只是程序结果等功能,一般不产生目标代码。
符号定义伪指令: | ||
1 EQU | 用表达式来定义标识符 | count equ 9 addr equ es:[bx][SI] |
2 = | 与equ基本相等,但多了一个功能: 可以对同一标识符重复定义。 COUNT=9; COUNT=COUNT+1; 但EQU不行 DT1 EQU 30 DT1 EQU 20 错误的。 【两者只是等价说明,#define】 并不分配实际存储单元。 | |
变量定义伪指令: | 为数据分配存储单元,有时候还为这个存储单元取一个变量名 | |
1 DB | [变量] DB 一个或者多个表达式 告诉汇编程序,留出一块存储单元作为字节数据区,并在其中存放各表达式的值,先出现者低地址,后高地址。DB左边的变量名称用来标识此内存单元。 表达式4种形式: 【1】字节常量或者不确定常量"?" 【2】重复子句:数值表达式 DUP (一个或者多个表达式) 【3】串常量 【4】以上三种形式的任意组合 这个帅吧: data5 DB 10,2 DUP( 2 DUP(1,2),3 ), 'hello' | |
2 DW | 定义双字变量,表达式4种: 【1】同上[1,2] 【2】地址表达式:偏移地址和段地址存放在存储器中,偏移地址对应较低地址; 【3】1-4个字符组成的串常量 【4】以上三种形式的任意组合 | |
其他类似 | DF(三字常量) DQ(四字常量) DT(十字常量) | |
段定义伪指令: | ||
1 SEGMENT | 段名 SEGMENT [定位方式] [组合方式] ['类别'] ... ... 段名 ENDS 用于将程序分为若干逻辑段,根据功能不同可以分为:代码段、数据段、堆栈段、附加段。cs ds ss es 后面介绍三个参数: | |
2 ASSUME | ASSUME 段寄存器:段名 [,段寄存器:段名...] 用于通知汇编程序,cs ds ss es被设定为哪些段的段地址寄存器,从而在汇编时能够知道语句中引用的变量、标号或表达式所对应的段。 如: loop1: add al,[si]汇编时,知道源操作数对应的段位DSEG. 值得注意的是: ASSUME伪指令只是告知汇编程序有关段寄存器将被设定为哪个段的段寄存器,而段寄存器必须通过指令来设定具体值,如: mov ax, dseg mov ds, ax 给ds设定具体值(如果需要的话)。 | |
ORG | ORG 表达式 usage:告诉汇编程序,使其后的指令或数据从表达式所指定的偏移地址开始存放,表达式值:0~65535(0000h-ffffh) 例如:ORG $+10 表示其后的指令或数据跳10个字节存放 $表示当前偏移地址。 | |
过程定义伪指令: | 常把具有某种功能的程序段设计称为一个过程,80*86: 过程名 PROC [NEAR or Far] ... 过程名 ENDP (NEAR可以省略) | |
80*86指令集选择伪指令: | ||
.8086 .286 .286P .386 .386P .486 .486P .586 pentium指令集 .586P | 所有指令向上兼容,即写了.386,就允许8086的,.286,但是不允许.486。 |