2 汇编语言程序设计:指令、伪指令;数据、保留字、标识符、伪指令
汇编语言程序设计
- 不同的汇编程序有不同的汇编语言编程规定。
- 目前支持Intel 8086/8088系列微机常用的汇编程序有ASM、 MASM
- MASM —— Microsoft Macro Assembler
- 是微软公司为x86微处理器家族开发的汇编开发环境,拥有可视化的开发界面,是Windows下开发汇编的利器。
汇编语言语句
分类
- 指令语句
- 伪指令语句
指令语句
功能
- 每一条指令语句在汇编时都要产生一个可供CPU执行的机器目标代码,它又叫可执行语句。
格式例
LABEL1: ADD AX,BX; //功能为AX<=(AX)+(BX); 后面的程序段将完成一次对存储器的访问
说明
一条指令语句最多可以包含4个字段
- 指令助记符和操作数两个字段就是前面介绍的指令
- 标号是可选字段,后面必须跟“:”
- 主要用于控制程序执行顺序。
- 注释字段为可选项,该字段以分号“;”开始
- 不会产生机器目标代码,它不影响程序的功能
- 注释可以加在指令的后面,也可以是整个语句行
伪指令语句
- 伪指令 (directive) 是嵌入源代码中的命令,由汇编器识别和执行。
- 不区分大小写。
功能
- 不在运行时执行,但是它们可以定义变量、宏和子程序;
- 为内存段分配名称,执行许多其他与汇编器相关的日常任务。
功能:定义程序区段
- 程序区段,也称为段 (segment)。
- 程序中的段具有不同的作用。
.DATA 段定义变量
.data
.CODE 段包含了可执行的指令:
.code
.STACK 段定义了运行时堆栈,并设置了其大小:
.stack 100h
伪指令和指令的区别
myVar DWORD 26 ;DWORD 伪指令告诉汇编器在程序中为一个双字变量保留空间
mov eax,myVar ;MOV 指令在运行时执行,将 myVar 的内容复制到 EAX 寄存器中:
概念
- 数据:指令和伪指令语句中操作数。
- —常用的数据形式有:常数、变量和标号。
- 一个数据由数值和属性(比如是字节数据还是字数据)两部分构成。
保留字
- 保留字:系统已经设定的、有特殊意义的。
- 保留字没有大小写之分
保留字的类型:
- 指令助记符(如MOV、ADD)。
- 寄存器名称(如AX、CS等)
- 伪指令,告诉汇编器如何汇编程序(如SEGMENT、DB)。
- 属性操作符,提供变量和操作数的大小与使用信息。例如 BYTE 和 WORD。
- 运算符,在常量表达式中使用(如GE、EQ)
- 预定义符号,比如 @data,它在汇编时返回常量的整数值。
$ | PARITY? | DWORD | STDCALL |
---|---|---|---|
? | PASCAL | FAR | SWORD |
@B | QWORD | FAR16 | SYSCALL |
@F | REAL4 | FORTRAN | TBYTE |
ADDR | REAL8 | FWORD | VARARG |
BASIC | REAL10 | NEAR | WORD |
BYTE | SBYTE | NEAR16 | ZERO? |
C | SDORD | OVERFLOW? | |
CARRY? | SIGN? |
标识符及命名规则
- 标识符(identifier)是由程序员选择的名称,它用于标识变量、常数、子程序和代码标签。
标识符书写规则
- 标识符不能与汇编器保留字相同
- 不区分大小写
- 第一个字符必须为字母 (A---Z, a---z) 、下划线 (_)、@、? 或 $。其后的字符也可以是数字。
- 从第二个字符开始,可以是字母、数字、@、”或问号 ?
一些命名良好的名称 例:
lineCount firstValue index line_count
下面的名称合法,但是不可取:
_lineCount $first @myFile ;应避免用符号 @ 和下划线 _ 作为第一个字符.因为它们既用于汇编器,也用于高级语言编译器。