当前位置:课程学习>>第三章>>知识讲解>>视频课堂>>知识点一
1.源文件和编译
汇编语言(Assembly Language)是介于机器语言和高级语言之间的计算机语言,是一种用符号表示的面向机器的程序设计语言,比二进制机器码更方便人类记忆和使用。采用不同CPU的计算机有不同的汇编语言,如x86体系、8051单片机、ARM嵌入式系统分别使用不同的汇编语言。
用汇编语言编写的程序称为汇编语言程序或源程序,汇编源程序文件名后缀:.asm(不区分大小写)。
汇编语言源程序不能直接在计算机上运行,需要将它翻译成机器语言程序,即目标程序(Object Program),目标程序文件名后缀:.obj(不区分大小写)
汇编语言源程序→目标程序的这个翻译过程为汇编。
完成汇编任务的程序(软件)称为汇编程序。在本课程中使用MASM作为编译器。汇编程序的作用包括,将汇编语言源程序翻译成目标代码程序;按指令要求自动分配存储区(包括程序区、数据区等);自动把源程序中以各种进制表示的数据都转换成二进制形式的数据;计算表达式的值;对汇编语言源程序进行语法检查,并给出语法出错的提示信息。
2.汇编源程序的结构
汇编语言程序由若干个段组成。按照各段功能的不同,分别有:代码段、数据段、堆栈段和附加段、代码段是必须要定义的
参见以下视频[录人 3.1.8086汇编语言程序设计.程序结构.pptx]。
例:
若X、Y和RESULT为内存字单元的地址,请编写汇编程序,计算X+Y,并把和存入RESULT单元。
下述源代码在 示例代码中,名为1.asm。
; 加入适当注释,可以提高程序的可读性
DATA SEGMENT ; 数据段开始
X DW 2010H ; 每一段由若干汇编语句构成
Y DW 2011H ;
RESULT DW ? ;
DATA ENDS ; 数据段结束
CODE SEGMENT ; 代码段开始
ASSUME CS:CODE,DS:DATA
START: MOV AX,DAT A ; 每个汇编源程序需要一个启动标号
MOV DS,AX
MOV AX,X
ADD AX,Y
MOV RESULT,AX
MOV AH,4CH
INT 21H ; 程序运行结束
CODE ENDS
END START ; 代码段开始
上述代码的讲解,在以下[录屏\03 8086汇编语言程序设计_1.mp4]中,包括编译机器码、伪代码的结果,在仿真器中运行的效果。
3.汇编语言的语句
汇编语言的语句可以分为:指令语句、伪指令语句、宏指令语句。
(1)指令语句
指令语句的格式为:[标号:] 指令助记符 [操作数] [;注释]
例:
START: MOV AX,DAT A ; 每个汇编源程序需要一个启动标号
其中,
(2)伪指令语句
伪指令语句,也称指示性语句,是不可执行语句,汇编后不产生目标代码,它仅仅在汇编过程中告诉汇编程序如何汇编源程序。伪指令语句可以告诉汇编程序哪些语句是属于一个段、是什么类型的段、各段存入内存应如何组装、给变量分配多少存储单元、给数字或表达式命名等。伪指令语句的功能是由汇编程序汇编源程序时完成的,不是由CPU执行目标代码时实现的。
伪指令语句的格式为:
[符号名] 伪指令助记符 [操作数] [;注释]
(3)宏指令语句
宏是一个以宏名定义的指令序列。一旦把某程序段定义成宏,则可以用宏名代替那段程序。在汇编时,要对宏进行宏展开,即把以宏名表示的地方替换为该宏对应的指令序列的目标代码。宏指令可以看成指令语句的扩展,相当于多条指令语句的集合。
4.汇编语言的数据
数据是汇编语言语句的重要组成部分。汇编语言能识别的数据有:常量、变量、标号。
(1)常量是没有任何属性的纯数值数据,它的值在汇编期间和程序运行过程中不能改变。汇编语言程序中的常量有:数值常量、字符常量、符号常量。
数值常量,如01100101B、145Q、653AH、101D、100。
字符常量,如'a'、'1'。
符号常量是用名字来标识的常量。以符号常量代替常量,可以增加程序的可读性及通用性。
(2)变量
变量是存储单元的符号地址,这类存储单元的内容可以在程序运行期间被修改。变量以变量名的形式出现在程序中。同一个汇编程序中,变量只能定义一次。变量具有以下3种属性。
段属性:变量所在段的段地址。
偏移属性:变量所在段的段内偏移地址。
类型属性:变量占用存储单元的字节数
例:
X DW 2010H
这段代码中,根据上下文,段地址和偏移量分别为 DS:0000,类型为WORD。
5.汇编语言的操作符与表达式
操作项是汇编语句中的一个重要组成部分,它可以由常量(常数)、寄存器、标号、变量或表达式组成。表达式是常量、寄存器、标号、变量与一些操作符相组合的序列,分为数值表达式和地址表达式两种。汇编程序在汇编时按照一定的规则对表达式进行计算后可以得到一个数值或地址值。
(1)算术操作符有:加(+)、减(-)、乘(*)、除(/)和取余(MOD)。
例
MOV AX,2+3*5
汇编后,表达式2+3*5被数值17代替
例
MOV BL,NUM+1
表达式NUM+1是汇编时由汇编程序计算的,不是由CPU在执行该指令时才计算的。汇编后得到的目标程序中,表达式被它的值代替。
(2)逻辑操作符有:与(AND)、或(OR)、非(NOT)和异或(XOR)。
(3)移位操作符有两个:SHL和SHR,按位操作,只适用于数值表达式。
(4)关系操作符用于数的比较,有相等(EQ)、不相等(NE)、小于(LT)、大于(GT)、小于等于(LE)和大于等于(GE)6种。
例如:
MOV AX,4 EQ 3
该指令汇编后的结果为:MOV AX,0
(5) 数值回送操作符的运算对象必须是存储器操作数,即变量或标号。操 作 符
(6) 属性操作符用来建立或改变已定义变量、内存操作数或标号的类型属性。属性操作符有:PTR、段操作符、THIS、SHORT、HIGH、LOW等。
例
有如下数据定义:
BUFW DW 1234H,5678H
则重新指定变量类型,下列指令合法:
MOV AX,BUFW
MOV AL,BYTE PTR BUFW
临时改变BUFW的字属性为字节属性。