文章目录
一、序言
- 使用指令的助记符、符号地址和标号等编写的程序设计语言称为汇编语言
- 用汇编语言编写的程序运行速度快,实时性好,占用内存空间小,能最大限度发挥硬件的作用。
- 用汇编语言编写程序效率低,程序设计的技巧性强
- 汇编语言程序汇编处理过程
①汇编语言程序经编辑程序EDIT编排后生成汇编语言源程序PROG.ASM
②经汇编语言汇编后生成目标文件PROG.LIST
③此时还可以生成一个可选的列表文件PROG.LIST
④目标文件经连接程序LINK连接后生成可执行文件PROG.EXE。
二、汇编语言程序格式和伪指令
2-1 汇编语言程序格式
指令语句:标号: 指令助记符 操作数 ;注释
- 标号
①标号后面必须加冒号:
②如果没有别的转移指令要转移到某条指令,则该条指令前面就无须加标号
③可以用作标号的字符,包括英文字母、数字或某些特殊字符,但第一个字符必须为英文字母或某些特殊字符,圆点只能用作第一个字符。
④特殊字符不能单独用作标号系统中已定义的保留字,如指令,操作符为指令,指示符,寄存器名和运算符等都不能作标号。
⑤标号具有段基址,偏移量及类型等三种属性。
⑥有JMP语句必须有标号 - 指令助记符
是指令语句中唯一不可缺少的部分,表示指令系统中指令的操作码。 - 操作数
①一条指令可以有一个操作数或两个操作数,也可以没有。
②操作数可以由常数字符或字符串变量标号,寄存器,存储器和表达式等组成。
③常数可以由二进制,十进制,16进制及2-10进制的BCD数组成,其中二进制,16进制及BCD数后面必须加B,H和H作为后缀。使用BCD码做操作数的指令,其后面一定要紧跟一条调整指令,以便将运算结果调整为BCD数。
④字符和字符串要用单引号括起来。
⑤变量通常指用符号表示的存放在存储单元中的可变数值。程序在运行期间可以对它进行修改,其数值可以由为指令DB,DW,DD等来定义,所谓定义就是为变量分配存储单元,也可以为这个存储单元起个名字或设定初值。 - 注释
①注释用来说明一条指令或一段程序的功能,加了注释之后,增强了程序的可读性
②可以省略
③注释前必须加分号;
伪指令语句:名字 伪指令指示符 操作数 ;注释
- 名字
①名字后面不能跟冒号:
②可以省略,但有些语句不能省略 - 伪指令指示符
常用:
①段定义语句 SEGMENT和ENDS
②段分配语句 ASSUME
③过程定义语句 PROC和ENDP
④变量定义语句 DB、DW、DD、DQ、DT
⑤程序结束语句 END - 操作数:有的伪指令不允许带操作数,有的伪指令可以带一个或多个操作数。
- 注释:注释部分与指令语句要求类似。
表达式和运算符
将常数、符号、寄存器等通过运算符连接起来的式子叫做表达式。
2-2 伪指令语句
2-2-1 段定义语句
段定义语句用来定义一个逻辑段,每个段以SEGMENT开始,以ENDS结束,整个段的内容都在这两条伪指令之间。每个段都有一个段名,段名由用户指定,位于SEGMENT和ENDS前面,不可省略,它确定了该逻辑段在存储器中的段基地址,即高16位物理地址。
(1)定位类型
- 一个汇编语言程序可以包括多个段,必须用LINK程序将各个段相互衔接起来,两段之间如何连接由定位类型来规定,它确定该段存储器的起始边界要求。
- 定位类型为PAGE、PARA和WORD时,分别表示该段起始地址能被256(页)、16(节)和2(字)整除。
- 定位类型为BYTE(字节)时,起始地址可以从任何地方开始。
- 默认值PARA(节)表示能被16整除的地方分段。
- 在计算机中,16个字节单元称为1节,256个字节为1页。
(2)组合类型
组合类型用来告诉LINK程序本段与其他段的关系。
- NONE
表示本段与其他段不进行连接,各段有独自的段基地址和偏移量,这是默认值的组合类型 - PUBLIC
两个或几个同名同类别的模块段连接成一个段,段基地址相同,但偏移量不同 - COMMON
本段与其他段覆盖,偏移地址名称不同 - STACK
表示是堆栈段,不可忽略 - MEMORY
该段在连接时被放在所有段的最后(最高地址) - AT
告诉连接程序将本段装在表达式所指定的段基地址处
(3)分类名
- 必须用单引号括起来
- 使LINK程序所有分类名相同的逻辑段组成一个段组,典型的分类有‘STACK’,‘CODE’和‘DATA’等。
2-2-2 段分配语句
- ASSUME可以根据各个逻辑段的段名,将它们分别定义成代码段(CS)、数据段(DS)、堆栈段(SS)和附加数据段(ES)。
- 格式:ASSUME CS:代码段名,DS:数据段名,SS:堆栈段名,ES:附加段名
2-2-3 过程定义语句
用过程定义伪指令PROC和ENDP进行定义,并把这些程序称为过程或子程序,有主程序中的CALL语句来调用它们。
2-2-4 变量定义语句
- 变量定义语句也称为数据定义语句,它为一个数据项分配存储单元,用-个符号即变量名与该存储单元相联系,并可为该数据项提供一个任选的初始值,也可以没有初始值。
- 变量定义语句的一般形式为:变量名伪指令指示符 操作数 ;注释
- DB→字节
DW→字
DD→双字
DQ→4字
DT→10字节
DUP(复制操作符)→定义重复变量 - 变量名用符号表示,也可以省略,其作用与指令语句中的标号类似。
2-2-5 程序结束语句
程序结束语句的格式为:END [标号名或名字]
- 个模块只能有一条也必须有一条END语句。
- 标号名或名字也可以省略不写。
2-2-6 其他伪指令
(1)等值伪指令EQU
等值伪指令语句的格式为:符号名 EQU 变量、标号、常数等。
我jio得跟C语言中的符号变量有点像😊
(2)定义类型伪指令LABEL
其作用与PTR类似,格式为:名字 LABEL 类型 ;将LABEL左边的名字定义为其右边的类型
(3)对准伪指令EVEN
要求汇编程序将下一语句所指向的地址调整为偶地址。
(4)ORG伪指令
给它下面一条语句指定起始偏移地址。
(5)模块连接伪指令PUBLIC和EXTRN
- PUBLIC用于将标号、变量定义为公共的,可供其他程序模块使用,否则别的模块不能引用它。
- EXTRN用于引用其他模块中已用PUBLIC伪指令定义过的标号和变量
2-3 完整的汇编语言程序框架
- 数据段:代码段中用到变量和数据时,应设置数据段
- 代码段:必须有
- 堆栈段:根据情况设置
- 附加数据段:当代码段中有字符串操作指令时,不仅要设置数据,还需设置附加段
三、汇编语言程序设计方法与实例
看看例题,打算与习题一起总结,后面再发。