一、汇编语言指令
汇编语言的语句是在指令系统的基础上形成的,按其作用与编译情况分为两大类:指令性语句(符号指令)和指示性语句(伪指令)。
指令性语句是可执行语句,与机器指令相对应,它命令CPU进行某种操作,其功能由硬件完成。指示性语句是说明性语句,无对应的机器指令,它仅为汇编程序提供编译信息,为连接程序提供连接信息,其功能是由相应的软件完成。
指令性语句和指示性语句的格式基本相同,分别为:
标号: 符号指令 ;注释
变量名 伪指令 ;注释
在指令性语句中,标号不是必须的,通常是当某条指令被作为转移指令的目标时,才在该条指令前加上标号,标号和指令之间必须用冒号间隔。
1、基本语法成分
1、名字
名字用来标识一定的语法成分,有系统规定与用户定义两类。
(1)标号和变量
标号是一个用冒号引入的名字,只可能出现在某一个代码段中,它代表指令地址,为转移指令提供了转移目标。变量是以存储器中一个数据或数据区的符号表示,它通常被定义在数据段、附加段或堆栈段,代表内存操作数的存储地址,或者说变量名就代表某个单元。
标号和变量都有3个属性,即:
①段属性
②偏移属性
③类型属性
(2)常量
常量在汇编时已有确定的值,它有立即数、字符串常数和符号常数三种形式。
2、运算符
(1)数值运算符
①算术运算符
②逻辑运算符
③关系运算符
EQ(等于)、NE(不等于)、GT(大于)、LT(小于)、GE(大于等于)、LE(小于等于)。
(2)修改属性的运算符
汇编语言提供了PTR运算符。
类型说明符 PTR 地址表达式
类型说明符有:BYTE(字节),WORD(字),DWORD(汉字),FAR(远),NEAR(近)。
在汇编语言中,PTR运算符的概念与高级语言中有些不同。通常情况下,汇编语言中使用地址寻址方式来访问内存中的数据,而PTR运算符的作用就是将数据的地址传递给指针变量,以便在汇编程序中能够使用指针变量来操作内存中的数据。
不同的汇编语言中,PTR运算符的语法可能有所不同。例如,在x86汇编语言中,PTR运算符使用方括号"[]"来表示,其格式为:
MOV BX, [PTR WORD_VAR]
上面的代码使用PTR运算符获取一个名为WORD_VAR的变量的地址,并将其存储到BX寄存器中。注意,方括号"[]"是PTR运算符的一部分,它表示将括号内的内容解释为内存地址,从而能够操作存储在该地址处的数据。
需要注意的是,在汇编语言中,变量的地址通常使用段地址和偏移地址的形式表示,因此在使用PTR运算符时需要考虑到这一点。
(3)返回属性或数值的运算符
①SEG运算符
格式:SEG 变量名或标号
功能:计算出变量名(或标号)的段基址
②OFFSET运算符
格式:OFFSET 变量名或标号
功能:计算出变量名(或标号)的地址偏移量
③TYPE运算符
格式:TYPE 变量名或标号
功能:计算出变量或标号的类型,对于字节型变量,返回值为1;字形变量返回值为2;双字形变量返回值为4.
④$运算符:$运算符返回汇编计数器的当前值,具体用法见“字节定义伪指令”。
(4)方括号运算符和地址表达式 用方括号括起来的地址表达式是访问内存操作数常用的寻址方式。方括号的另一个用途是表示数组的下标,下标可以是常数、算术表达式、16位寻址方式表达式。
2、伪指令
1、数据定义伪指令
包括DB,DW,DD,用于定义变量并分配存储区。
(1)字节定义伪指令
格式:变量名 DB 一串用逗号间隔的字节数据
功能:将所定义的字节型数据转换成二进制数,并从指定的变量单元开始依次存放。
(2)字定义伪指令
格式:变量名 DW一串用逗号间隔的字形数据
功能:将所定义的字形数据从指定的变量单元开始依次存放,每一个字形数据的存放规律是:低位字节存入低地址单元,高位字节存入高地址单元。
(3)双字定义伪指令
格式:变量名 DD一串用逗号间隔的双字形数据
功能:把DD定义的数从指定的变量名开始依次存放,每一个数占4个单元,每一个数的存放规律也是低位字节存入低地址单元,较高字节存入较高的地址单元。
2、符号定义伪指令
(1)等值伪指令
格式:变量名 EQU 表达式
功能:将表达式的值赋给一个变量。
(2)等号伪指令
格式:变量名=表达式
3、段定义伪指令
(1)SEGMENT和ENDS伪指令
使用SEGMENT和ENDS定义一个段的格式:
段名 SEGMENT 定位参数 链接参数 ‘分类名’
段定义体
段名 ENDS
①定位参数:
BYTE表示字节地址:即该逻辑段的目标代码可以从任意地址开始依次存放。
WORD表示字地址:即该逻辑段的目标代码,从偶地址开始依次存放。
PARA(或者缺省)表示节地址(一节等于16B):即该逻辑段的目标代码,从一个能被16整除的地址开始依次存放。
PAGE表示页地址:即该逻辑段的目标代码,从一个能被256整除的地址开始依次存放。
②链接参数:
PUBLIC、MEMORY、COMMON、STACK、AT表达式、当段定义中缺省段属性参数时,表明该段是一个独立的逻辑段。
③’分类名’:分类名是程序员任选一个字符串,使用时必须用单引号括起来,分类名可有可无。
(2)ASSUME伪指令
格式:ASSUME 段寄存器名:段名,段寄存器名:段名,……
功能:ASSUME 语句通知汇编程序,寻址逻辑段使用哪一个段寄存器。
(3)ORG伪指令
格式:ORG 数值表达式
功能:用以规定目标程序或数据区起始存放单元的偏移量。
4、过程与宏定义伪指令
(1)过程定义伪指令
过程又称子程序,是程序的一部分,它必须用RET作为返回指令,用过程定义语句为子程序定界。
(2)宏定义伪指令
宏的概念与过程很相似。
(3)条件汇编伪指令
(4)源程序结束伪指令
二、汇编语言程序设计方法
(1)明确任务
(2)绘流程图
(3)分配内存工作单元和寄存器
(4)编程与调试
1、分支结构程序设计
(1)简单分支结构程序:
2、多路分支结构程序
2、循环程序设计
1、单重循环程序
2、多重循环程序
3、子程序设计
1、子程序的调用和返回
子程序的调用和返回使用CALL指令和RET指令来完成。
2、子程序的参数传送
子程序使用中,要解决的一个重要问题是参数传送。
①利用寄存器传送参数。
②利用堆栈传送参数。
③利用内存单元传送参数。
方法2:
3、子程序嵌套与递归
(1)子程序嵌套
(2)递归子程序
DOS及BIOS功能调用
1、DOS中断及功能调用
(1)DOS专用中断
(2)DOS可调用中断
2、BIOS中断调用
(1)键盘I/O中断调用
(2)打印机I/O中断调用
(3)显示I/O中断调用
5、模块化程序设计
三、汇编语言程序设计举例
1、数值计算
1、多字节减法运算
例4.16试计算两个组合的4 bit BCD码数之差。设参加运算的两个操作数分别存放在以DAT1和DAT2为首地址的存储单元中,结果存放在RESULT单元,数据存放形式为低前高后。
2、多字节乘法运算
2.代码转换
1、十进制码到二进制码的转换
2、二进制码与ASCⅡ码之间的转换
MOV AH ,4CH ;返回DOS
INT 21H
CODE ENDS
END START
3、字符数据处理
1、字符的查找
2、字符的删除
汇编语言指令的作用是什么?
汇编语言指令用于编写底层的机器指令,它们直接操作计算机的硬件和寄存器。汇编语言是一种低级语言,更接近计算机硬件和体系结构。
汇编语言指令的主要作用包括以下几个方面:
控制流:汇编语言指令可以实现程序的控制流,如条件分支(比如if语句)、循环(比如while循环)和跳转(比如goto语句)。这些指令根据特定的条件或标志来改变程序执行的路径。
数据操作:汇编语言指令可以对数据进行各种操作,例如加载数据到寄存器中、从寄存器写回内存、在寄存器之间进行算术运算(如加法、减法等)以及逻辑运算(如与、或、非等)。
存取内存:汇编语言指令可访问计算机的内存,读取和写入数据。通过指定内存地址和使用不同的访存模式,可以读取或修改内存中的数据。
处理中断和异常:汇编语言指令用于处理计算机硬件产生的中断和异常。通过设置中断向量表和编写相应的中断处理程序,可以响应外部事件(如硬件设备的信号)或异常情况(如除法错误或缺页异常)。
操作系统调用:汇编语言指令可进行操作系统调用,使程序能够与操作系统进行交互。通过操作系统提供的接口,可以实现文件操作、网络通信、进程管理等功能。
汇编语言指令充当了高级语言和计算机底层硬件之间的桥梁,它们负责将高级语言编写的代码转化为机器指令,直接与计算机硬件进行交互和控制。