本章主要教学内容
l 汇编语言和汇编程序的基本概念
l 汇编语言源程序书写规则、语句格式及程序分段
l 伪指令语句的格式、功能及应用
l 汇编语言源程序的建立、汇编、连接、调试及运行
第 5章 汇编语言的基本表达及其运行
第 5章 汇编语言的基本表达及其运行
本章教学目的及要求
l 理解汇编语言和汇编程序的概念、特点及其应用。
l 掌握汇编语言源程序的书写规则、语句的基本格式、
程序的分段结构。
l 熟悉汇编语言的基本表达、伪指令语句及其应用。
l 熟悉汇编语言程序的上机运行、调试过程,掌握基
本操作技能。
5.1 汇编语言和汇编程序的基本概念
第 5章 汇编语言的基本表达及其运行
5.2 汇编语言源程序书写格式
5.3 8086汇编语言中的标识符, 表达式和运算符
5.5 汇编语言程序上机过程
5.4 伪指令语句
5.6 汇编语言程序运行实例
5.1 汇编语言和汇编程序的基本概念
5.1.1 汇编语言
汇编语言是一种面向 CPU指令系统的程序设计语言, 它采
用指令系统的助记符来表示操作码和操作数, 用符号地址表
示操作数地址, 因而易记, 易读, 易修改, 给编程带来很大
方便 。
用汇编语言编写的程序能够直接利用硬件系统的特性,
直接对位, 字节, 字寄存器, 存储单元, I/O端口等进行处理,
同时也能直接使用 CPU指令系统和指令系统提供的各种寻址
方式编制出高质量的程序, 这种程序不但占用内存空间少,
而且执行速度快 。
5.1.2 汇编程序
用汇编语言编写的源程序在输入计算机后, 需要将其翻
译成目标程序, 计算机才能执行相应指令, 这个翻译过程称
为汇编, 完成汇编任务的程序称为汇编程序 。
有 基 本 汇 编 ASM ( Assembler ) 和 宏 汇 编 MASM
( MacroAssembler) 两种 。
汇编程序以汇编语言源程序文件作为输入, 并由它产生
两种输出文件:目标程序文件和源程序列表文件 。
? 目标程序文件经连接定位后由计算机执行;
? 源程序列表文件将列出源程序, 目标程序的机器语言
代码及符号表 。
5.2 汇编语言源程序书写格式
5.2.1 汇编语言源程序的分段结构
通常, 一个汇编源程序一般应该由 3个逻辑段组成, 即
数据段, 堆栈段和代码段 。 每个逻辑段以 SEGMENT语句开始,
以 ENDS语句结束 。 整个源程序以 END语句结束 。
? 数据段用来在内存中建立一个适当容量的工作区, 以
存放常数, 变量等操作数据 。
? 堆栈段用来在内存中建立一个适当的堆栈区, 以便在
中断, 子程序调用时使用 。
? 代码段包括了许多以符号表示的指令,其内容就是程
序要执行的指令。
5.2.2 汇编语言源程序的语句类型和语句格式
1.语句类型
8086宏汇编 MASM使用的语句可以分成 3种类型,
? 指令语句:这类指令能够产生目标代码,是 CPU可以执行
的能够完成特定功能的语句,主要由机器指令组成。在汇编时
一条指令语句被翻译成对应的机器码,对应着特定的操作。
? 伪指令语句:伪指令语句是为汇编程序和连接程序提供一
些必要控制的管理性语句,它不产生目标代码,仅仅在汇编过
程中告诉汇编程序应如何汇编,并完成相应的伪操作。
? 宏指令语句:宏指令语句是由编程者按照一定的规则来定
义的一种较, 宏大, 的指令,可包括多条指令或伪指令 。
2,语句格式
一般情况下, 汇编语言的语句可以由 以下几 部分组成,
[名字 ] 操作符 [操作数 ] [;注释 ]
? 名字是一个符号, 它表示本条语句的符号地址 。 一般
来说, 名字可以是标号和变量, 统称为标识符 。
注意:标号和变量都具备 3种属性 —— 段属性, 偏移属性及
类型属性 。
? 操作符可以是机器指令, 伪指令和宏指令的助记符 。
? 操作数字段是操作符的操作对象 。 操作符在完成相应
的操作时要求有一系列的操作数 。 当有两个或两个以上的
操作数时, 各操作数之间用逗号隔开 。
? 注释字段是以, ;, 开头的说明部分, 可以用英文或
者中文书写 。 注释字段是语句的非执行部分 。
5.3 8086汇编语言中的标识符, 表达式和运算符
5.3.1 标识符
汇编语言每条语句的第一个字段是它的名字字段, 名
字可以是标号或变量, 这两者又称为标识符 。
重点是要掌握其组成规则和它的 3个属性 。
5.3.2 表达式和运算符
在表达式中, 运算符充当着重要的角色 。
8086宏汇编有算术运算符, 逻辑运算符, 关系运算符,
分析运算符和综合运算符共 5种 。
下面分别讨论 5种运算符的作用,
( 1)算术运算符用于完成算术运算,有+
(加法)、-(减法),× (乘法)、/(除法)、
MOD(求余),SHL(左移),SHR(右移)共 7
种运算。
( 2)逻辑运算符的作用是对其操作数进行按
位操作。逻辑运算符有 AND(与),OR(或),XOR
(异或)和 NOT(非)。
( 3)关系运算符的运算对象是两个性质相同
的项目。其结果为:关系成立或不成立。有 EQ(相
等),NE(不相等),LT(小于),GT(大于)、
LE(小于或等于),GE(大于或等于)共 6种。
( 4)分析运算符是对存储器地址进行运算的。
有 5个,SEG(求段基值), OFFSET(求偏移量),
TYPE(求变量类型), LENGTH(求变量长度) 和
SIZE(求字节数) 。
( 5) 综合运算符可以用来建立和临时改变变量
或标号的类型以及存储器操作数的存储单元类型,
而忽略当前的属性,所以又称为属性修改运算符。
有 6个综合运算符,PTR、段属性前缀,SHORT、
THIS,HIGH 和 LOW。
各类运算符和常数, 寄存器名, 标号, 变
量一起共同组成表达式 。
在计算具有多个运算符的表达式值时, 按
以下规则操作,
l 优先级高的先运算, 优先级低的后运算 。
l 当优先级相同时, 按表达式中从左到右的顺
序进行运算 。
l 使用 括号可以提高表达式运算的优先级 。
5.4 伪指令语句
在汇编语言中,伪指令是给汇编程序的命令,在汇
编过程中由汇编程序进行处理。
例如定义数据、分配存储区、定义段及定义过程等
都采用伪指令表示。
5.4.1 数据定义伪指令
数据定义伪指令用来定义一个变量的类型, 并将所
需要的数据放入指定的存储单元中, 也可以只给变量分
配存储单元, 而不赋予特定的值 。
1,数据定义伪指令的一般格式为,
[变量名 ] 伪指令 操作数 [,操作数 … ][;注释 ]
2,常用的 数据定义伪指令
? 定义字节变量伪指令 DB
? 定义字变量伪指令 DW
? 定义双字变量伪指令 DD
? 定义四字变量伪指令 DQ
? 定义十字节变量伪指令 DT
5.4.2 符号定义伪指令
符号定义伪指令的用途是给一个符号重新命名, 或定
义新的类型属性等 。 这些符号可以包括汇编语言的变量名,
标号名, 过程名, 寄存器名以及指令助记符等 。
常用的符号定义伪指令有 EQU,=, LABLE。
5.4.3 段定义伪指令
段定义伪指令的用途是在汇编语言程序中定义逻辑段,
用它来指定段的名称和范围, 并指明段的定位类型, 组合
类型及类别 。
常用的段定义伪指令有 SEGMENT,ENDS和 ASSUME等 。
5.4.4 过程定义伪指令
在程序设计中, 经常将一些重复出现的语句组定义为
子程序 。 子程序又称为过程, 可以采用 CALL指令来调用 。
使用格式,
过程名 PROC [NEAR]/FAR
… (语句系列)
RET
… (语句系列)
过程名 ENDP
调用一个过程的格式为,
CALL 过程名
5.4.5 结构定义伪指令
结构就是相互关联的一组数据的某种组合形式 。
用伪指令 STRUC和 ENDS把相关数据定义语句组合起
来, 便构成一个完整的结构 。
使用格式,
结构名 STRUC
… ( 数据定义语句序列 )
结构名 ENDS
5.4.6 模块定义与连接伪指令
在编写规模较大的汇编语言源程序时, 可以将整
个程序划分为几个独立的源程序, 称之为模块 。
将各模块分别进行汇编, 生成各自的目标程序,
最后将它们连接成为一个完整的可执行程序 。
各模块之间可以相互进行符号访问 。
为了进行模块之间连接和实现相互的符号访问,
以便进行变量传送, 通常使用以下几个伪指令,
NAME,END,PUBLIC,EXTRN。
5.4.7 程序计数器 $和 ORG伪指令
1,程序计数器 $
字符, $”在 8086宏汇编中具有一种特殊的意义, 把
它称为程序计数器 。 表示位置计数器的当前值, 它可以
在数值表达式中使用 。
在程序中,, $”出现在表达式里, 它的值为程序下
一个所能分配的存储单元的偏移地址 。
2,ORG伪指令
ORG是起始位置设定伪指令, 用来指出源程序或数
据块的起点 。
利用 ORG伪指令可以改变位置计数器的值 。
5.5 汇编语言程序上机过程
5.5.1 汇编语言的工作环境及上机步骤
1,硬件环境
目前 8086汇编语言程序一般多在 IBM PC/XT及其
兼容机上运行, 要求机器具备基本配置即可以了 。
2,软件环境
主要是指支持汇编语言程序运行和帮助建立汇编
语言源程序的一些软件, 主要包括,
( 1) DOS操作系统
( 2) 编辑程序 EDIT.COM
( 3) 宏汇编程序 MASM.EXE
( 4) 连接程序 LINK.EXE
( 5) 调试程序 DEBUG.COM
3.运行汇编语言程序的步骤
( 1)用编辑程序 EDIT.COM建立扩展名为,ASM的汇编语言
源程序文件;
( 2)用汇编程序 MASM.EXE将汇编语言源程序文件汇编成
用机器码表示的目标程序文件,其扩展名为,OBJ;
( 3)若在汇编过程中出现语法错误,根据错误信息提示
(如位置、类型、说明),用编辑软件重新调入源程序进行
修改。无错误时采用连接程序 LINK.EXE把目标文件转化成可
执行文件,其扩展名为,EXE;
( 4)生成可执行文件后,在 DOS命令状态下直接键入文件
名就可执行该文件。
5.6 汇编语言程序运行实例
本节中给出的程序是从键盘输入 10个字符,
然后以与键入相反的顺序将 10个字符输出到显示
屏幕上 。 设定源程序名为 STR.ASM。
5.6.1 用 EDIT建立汇编语言源程序
在 DOS状态下,调用 EDIT编辑程序建立文件名
为 STR.ASM的汇编源程序。
其屏幕显示如下图,
5.6.2 用 MASM汇编生成目标文件
源程序文件建立完毕后,调用宏汇编程序
MASM对 STR.ASM进行汇编,结果如下图所示,
5.6.3 用 LINK进行连接生成可执行文件
汇编完毕程序正确, 则可调用 LINK进行连接,
生成可执行文件 STR.EXE,过程如下图所示 。
5.6.4 程序的运行
在 DOS状态下,直接键入可执行的程序文件
名 STR,然后从键盘输入 10个字符,并将其倒序
排列输出,过程如下图所示。
本章小结
本章从汇编语言的基本表达入手,介绍了
汇编语言的工作环境和源程序的建立、汇编、连
接、运行、调试等过程。通过学习,应该熟悉汇
编语言源程序的基本格式,正确运用语句格式来
书写程序段,掌握伪指令的功能和应用,并通过
上机操作,熟悉编辑程序、汇编程序、连接程序
和调试程序等软件工具的使用,掌握源程序的建
立、汇编、连接、运行、调试等技能,为下一章
的程序设计打下良好基础。
Thank you very much !
本章到此结束,
谢谢您的光临!
l 汇编语言和汇编程序的基本概念
l 汇编语言源程序书写规则、语句格式及程序分段
l 伪指令语句的格式、功能及应用
l 汇编语言源程序的建立、汇编、连接、调试及运行
第 5章 汇编语言的基本表达及其运行
第 5章 汇编语言的基本表达及其运行
本章教学目的及要求
l 理解汇编语言和汇编程序的概念、特点及其应用。
l 掌握汇编语言源程序的书写规则、语句的基本格式、
程序的分段结构。
l 熟悉汇编语言的基本表达、伪指令语句及其应用。
l 熟悉汇编语言程序的上机运行、调试过程,掌握基
本操作技能。
5.1 汇编语言和汇编程序的基本概念
第 5章 汇编语言的基本表达及其运行
5.2 汇编语言源程序书写格式
5.3 8086汇编语言中的标识符, 表达式和运算符
5.5 汇编语言程序上机过程
5.4 伪指令语句
5.6 汇编语言程序运行实例
5.1 汇编语言和汇编程序的基本概念
5.1.1 汇编语言
汇编语言是一种面向 CPU指令系统的程序设计语言, 它采
用指令系统的助记符来表示操作码和操作数, 用符号地址表
示操作数地址, 因而易记, 易读, 易修改, 给编程带来很大
方便 。
用汇编语言编写的程序能够直接利用硬件系统的特性,
直接对位, 字节, 字寄存器, 存储单元, I/O端口等进行处理,
同时也能直接使用 CPU指令系统和指令系统提供的各种寻址
方式编制出高质量的程序, 这种程序不但占用内存空间少,
而且执行速度快 。
5.1.2 汇编程序
用汇编语言编写的源程序在输入计算机后, 需要将其翻
译成目标程序, 计算机才能执行相应指令, 这个翻译过程称
为汇编, 完成汇编任务的程序称为汇编程序 。
有 基 本 汇 编 ASM ( Assembler ) 和 宏 汇 编 MASM
( MacroAssembler) 两种 。
汇编程序以汇编语言源程序文件作为输入, 并由它产生
两种输出文件:目标程序文件和源程序列表文件 。
? 目标程序文件经连接定位后由计算机执行;
? 源程序列表文件将列出源程序, 目标程序的机器语言
代码及符号表 。
5.2 汇编语言源程序书写格式
5.2.1 汇编语言源程序的分段结构
通常, 一个汇编源程序一般应该由 3个逻辑段组成, 即
数据段, 堆栈段和代码段 。 每个逻辑段以 SEGMENT语句开始,
以 ENDS语句结束 。 整个源程序以 END语句结束 。
? 数据段用来在内存中建立一个适当容量的工作区, 以
存放常数, 变量等操作数据 。
? 堆栈段用来在内存中建立一个适当的堆栈区, 以便在
中断, 子程序调用时使用 。
? 代码段包括了许多以符号表示的指令,其内容就是程
序要执行的指令。
5.2.2 汇编语言源程序的语句类型和语句格式
1.语句类型
8086宏汇编 MASM使用的语句可以分成 3种类型,
? 指令语句:这类指令能够产生目标代码,是 CPU可以执行
的能够完成特定功能的语句,主要由机器指令组成。在汇编时
一条指令语句被翻译成对应的机器码,对应着特定的操作。
? 伪指令语句:伪指令语句是为汇编程序和连接程序提供一
些必要控制的管理性语句,它不产生目标代码,仅仅在汇编过
程中告诉汇编程序应如何汇编,并完成相应的伪操作。
? 宏指令语句:宏指令语句是由编程者按照一定的规则来定
义的一种较, 宏大, 的指令,可包括多条指令或伪指令 。
2,语句格式
一般情况下, 汇编语言的语句可以由 以下几 部分组成,
[名字 ] 操作符 [操作数 ] [;注释 ]
? 名字是一个符号, 它表示本条语句的符号地址 。 一般
来说, 名字可以是标号和变量, 统称为标识符 。
注意:标号和变量都具备 3种属性 —— 段属性, 偏移属性及
类型属性 。
? 操作符可以是机器指令, 伪指令和宏指令的助记符 。
? 操作数字段是操作符的操作对象 。 操作符在完成相应
的操作时要求有一系列的操作数 。 当有两个或两个以上的
操作数时, 各操作数之间用逗号隔开 。
? 注释字段是以, ;, 开头的说明部分, 可以用英文或
者中文书写 。 注释字段是语句的非执行部分 。
5.3 8086汇编语言中的标识符, 表达式和运算符
5.3.1 标识符
汇编语言每条语句的第一个字段是它的名字字段, 名
字可以是标号或变量, 这两者又称为标识符 。
重点是要掌握其组成规则和它的 3个属性 。
5.3.2 表达式和运算符
在表达式中, 运算符充当着重要的角色 。
8086宏汇编有算术运算符, 逻辑运算符, 关系运算符,
分析运算符和综合运算符共 5种 。
下面分别讨论 5种运算符的作用,
( 1)算术运算符用于完成算术运算,有+
(加法)、-(减法),× (乘法)、/(除法)、
MOD(求余),SHL(左移),SHR(右移)共 7
种运算。
( 2)逻辑运算符的作用是对其操作数进行按
位操作。逻辑运算符有 AND(与),OR(或),XOR
(异或)和 NOT(非)。
( 3)关系运算符的运算对象是两个性质相同
的项目。其结果为:关系成立或不成立。有 EQ(相
等),NE(不相等),LT(小于),GT(大于)、
LE(小于或等于),GE(大于或等于)共 6种。
( 4)分析运算符是对存储器地址进行运算的。
有 5个,SEG(求段基值), OFFSET(求偏移量),
TYPE(求变量类型), LENGTH(求变量长度) 和
SIZE(求字节数) 。
( 5) 综合运算符可以用来建立和临时改变变量
或标号的类型以及存储器操作数的存储单元类型,
而忽略当前的属性,所以又称为属性修改运算符。
有 6个综合运算符,PTR、段属性前缀,SHORT、
THIS,HIGH 和 LOW。
各类运算符和常数, 寄存器名, 标号, 变
量一起共同组成表达式 。
在计算具有多个运算符的表达式值时, 按
以下规则操作,
l 优先级高的先运算, 优先级低的后运算 。
l 当优先级相同时, 按表达式中从左到右的顺
序进行运算 。
l 使用 括号可以提高表达式运算的优先级 。
5.4 伪指令语句
在汇编语言中,伪指令是给汇编程序的命令,在汇
编过程中由汇编程序进行处理。
例如定义数据、分配存储区、定义段及定义过程等
都采用伪指令表示。
5.4.1 数据定义伪指令
数据定义伪指令用来定义一个变量的类型, 并将所
需要的数据放入指定的存储单元中, 也可以只给变量分
配存储单元, 而不赋予特定的值 。
1,数据定义伪指令的一般格式为,
[变量名 ] 伪指令 操作数 [,操作数 … ][;注释 ]
2,常用的 数据定义伪指令
? 定义字节变量伪指令 DB
? 定义字变量伪指令 DW
? 定义双字变量伪指令 DD
? 定义四字变量伪指令 DQ
? 定义十字节变量伪指令 DT
5.4.2 符号定义伪指令
符号定义伪指令的用途是给一个符号重新命名, 或定
义新的类型属性等 。 这些符号可以包括汇编语言的变量名,
标号名, 过程名, 寄存器名以及指令助记符等 。
常用的符号定义伪指令有 EQU,=, LABLE。
5.4.3 段定义伪指令
段定义伪指令的用途是在汇编语言程序中定义逻辑段,
用它来指定段的名称和范围, 并指明段的定位类型, 组合
类型及类别 。
常用的段定义伪指令有 SEGMENT,ENDS和 ASSUME等 。
5.4.4 过程定义伪指令
在程序设计中, 经常将一些重复出现的语句组定义为
子程序 。 子程序又称为过程, 可以采用 CALL指令来调用 。
使用格式,
过程名 PROC [NEAR]/FAR
… (语句系列)
RET
… (语句系列)
过程名 ENDP
调用一个过程的格式为,
CALL 过程名
5.4.5 结构定义伪指令
结构就是相互关联的一组数据的某种组合形式 。
用伪指令 STRUC和 ENDS把相关数据定义语句组合起
来, 便构成一个完整的结构 。
使用格式,
结构名 STRUC
… ( 数据定义语句序列 )
结构名 ENDS
5.4.6 模块定义与连接伪指令
在编写规模较大的汇编语言源程序时, 可以将整
个程序划分为几个独立的源程序, 称之为模块 。
将各模块分别进行汇编, 生成各自的目标程序,
最后将它们连接成为一个完整的可执行程序 。
各模块之间可以相互进行符号访问 。
为了进行模块之间连接和实现相互的符号访问,
以便进行变量传送, 通常使用以下几个伪指令,
NAME,END,PUBLIC,EXTRN。
5.4.7 程序计数器 $和 ORG伪指令
1,程序计数器 $
字符, $”在 8086宏汇编中具有一种特殊的意义, 把
它称为程序计数器 。 表示位置计数器的当前值, 它可以
在数值表达式中使用 。
在程序中,, $”出现在表达式里, 它的值为程序下
一个所能分配的存储单元的偏移地址 。
2,ORG伪指令
ORG是起始位置设定伪指令, 用来指出源程序或数
据块的起点 。
利用 ORG伪指令可以改变位置计数器的值 。
5.5 汇编语言程序上机过程
5.5.1 汇编语言的工作环境及上机步骤
1,硬件环境
目前 8086汇编语言程序一般多在 IBM PC/XT及其
兼容机上运行, 要求机器具备基本配置即可以了 。
2,软件环境
主要是指支持汇编语言程序运行和帮助建立汇编
语言源程序的一些软件, 主要包括,
( 1) DOS操作系统
( 2) 编辑程序 EDIT.COM
( 3) 宏汇编程序 MASM.EXE
( 4) 连接程序 LINK.EXE
( 5) 调试程序 DEBUG.COM
3.运行汇编语言程序的步骤
( 1)用编辑程序 EDIT.COM建立扩展名为,ASM的汇编语言
源程序文件;
( 2)用汇编程序 MASM.EXE将汇编语言源程序文件汇编成
用机器码表示的目标程序文件,其扩展名为,OBJ;
( 3)若在汇编过程中出现语法错误,根据错误信息提示
(如位置、类型、说明),用编辑软件重新调入源程序进行
修改。无错误时采用连接程序 LINK.EXE把目标文件转化成可
执行文件,其扩展名为,EXE;
( 4)生成可执行文件后,在 DOS命令状态下直接键入文件
名就可执行该文件。
5.6 汇编语言程序运行实例
本节中给出的程序是从键盘输入 10个字符,
然后以与键入相反的顺序将 10个字符输出到显示
屏幕上 。 设定源程序名为 STR.ASM。
5.6.1 用 EDIT建立汇编语言源程序
在 DOS状态下,调用 EDIT编辑程序建立文件名
为 STR.ASM的汇编源程序。
其屏幕显示如下图,
5.6.2 用 MASM汇编生成目标文件
源程序文件建立完毕后,调用宏汇编程序
MASM对 STR.ASM进行汇编,结果如下图所示,
5.6.3 用 LINK进行连接生成可执行文件
汇编完毕程序正确, 则可调用 LINK进行连接,
生成可执行文件 STR.EXE,过程如下图所示 。
5.6.4 程序的运行
在 DOS状态下,直接键入可执行的程序文件
名 STR,然后从键盘输入 10个字符,并将其倒序
排列输出,过程如下图所示。
本章小结
本章从汇编语言的基本表达入手,介绍了
汇编语言的工作环境和源程序的建立、汇编、连
接、运行、调试等过程。通过学习,应该熟悉汇
编语言源程序的基本格式,正确运用语句格式来
书写程序段,掌握伪指令的功能和应用,并通过
上机操作,熟悉编辑程序、汇编程序、连接程序
和调试程序等软件工具的使用,掌握源程序的建
立、汇编、连接、运行、调试等技能,为下一章
的程序设计打下良好基础。
Thank you very much !
本章到此结束,
谢谢您的光临!