第4章汇编语言程序设计 本章学习目标 通过本章的学习,应当掌握以下内容: 了解汇编语言的基本知识和特点。 熟悉汇编语言的程序结构、段定义以及语句的格式。 掌握汇编语言常用伪指令的使用方法 熟练掌握汇编语言程序设计的基本方法:顺序结构、 分支结构、循环结构和子程序结构。 掌握程序设计中的宏指令和常用的系统功能的调用方 法
第4章 汇编语言程序设计 本章学习目标 通过本章的学习,应当掌握以下内容: •了解汇编语言的基本知识和特点。 •熟悉汇编语言的程序结构、段定义以及语句的格式。 •掌握汇编语言常用伪指令的使用方法。 •熟练掌握汇编语言程序设计的基本方法:顺序结构、 •分支结构、循环结构和子程序结构。 •掌握程序设计中的宏指令和常用的系统功能的调用方 法
4、1机器语言、汇编语言与高级语言 程序设计语言通常分为3类: 机器语言( Machine language) 汇编语言( Assembler language) 高级语言( High Level language) 4、1、1机器语言和汇编语言 1.机器语言 (1)机器指令 机器指令是指用二进制编码的指令,以表示计算机所 要进行操作数及操作对象(数据或数据地址)。 (2)指令系统和机器语言 指令系统是指特定计算机上机器指令的集合。机器语 言是由指令系统以及机器指令的使用规则构成的。 机器语言是计算机惟一能识别的语言,只有用机器语 言描述的程序,计算机才能直接执行
4、1 机器语言、汇编语言与高级语言 程序设计语言通常分为3类: 机器语言(Machine Language) 汇编语言(Assembler Language) 高级语言(High Level Language) 4、1、1 机器语言和汇编语言 1.机器语言 (1)机器指令 机器指令是指用二进制编码的指令,以表示计算机所 要进行操作数及操作对象(数据或数据地址)。 (2)指令系统和机器语言 指令系统是指特定计算机上机器指令的集合。机器语 言是由指令系统以及机器指令的使用规则构成的。 机器语言是计算机惟一能识别的语言,只有用机器语 言描述的程序,计算机才能直接执行
(3)机器语言的主要特点 机器语言主要具有下列两个特点 ①机器语言与机器密切相关 ②机器语言设计程序非常困难,但容易实现高性能 2.汇编语言 以助记符描述的指令称作汇编格式指令或符号指令, 通常简称指令。指令和伪指令的集合及其程序设计规 则便构成了汇编语言。用汇编语言编写的程序就是汇 编语言源程序。 4、1、2汇编语言与高级语言 机器语言和汇编语言都是面向机器的,是低级语言。 高级语言在程序设计的简易性与代码的可移植性等方 面有了质的飞跃。当然,用高级语言编写的源程序必 须经过编译和连接,将其转变为可执行程序或借助于 解释程序方可在计算机上运行
(3)机器语言的主要特点 机器语言主要具有下列两个特点: ① 机器语言与机器密切相关 ② 机器语言设计程序非常困难,但容易实现高性能 2. 汇编语言 以助记符描述的指令称作汇编格式指令或符号指令, 通常简称指令。指令和伪指令的集合及其程序设计规 则便构成了汇编语言。用汇编语言编写的程序就是汇 编语言源程序。 4、1、2 汇编语言与高级语言 机器语言和汇编语言都是面向机器的,是低级语言。 高级语言在程序设计的简易性与代码的可移植性等方 面有了质的飞跃。当然,用高级语言编写的源程序必 须经过编译和连接,将其转变为可执行程序或借助于 解释程序方可在计算机上运行
汇编语言和高级语言的比较: 语言 汇编语言 高级语言 代码效率 较低 源程序可读性较差 好 对硬件的依附性高 低 程序员硬件知识高 较低 应用范围 较广 广泛 4、1、3汇编与连接
语言 汇编语言 高级语言 代码效率 高 较低 源程序可读性 较差 好 对硬件的依附性 高 低 程序员硬件知识 高 较低 应用范围 较广 广泛 汇编语言和高级语言的比较: 4、1、3 汇编与连接
1.汇编程序 汇编是把汇编语言程序翻译成机器语言描述的目标程序 的过程。 汇编程序是完成汇编任务的程序。 2.连接程序 连接程序的主要功能是实现多个目标文件及库文件的连 接,并完成浮动地位的重定位。 从汇编语言源程序到可执行程序的生成过程如图所示。 汇编语言源程序 汇编 目标程序 可执行程序 连接
1.汇编程序 汇编是把汇编语言程序翻译成机器语言描述的目标程序 的过程。 汇编程序是完成汇编任务的程序。 2.连接程序 连接程序的主要功能是实现多个目标文件及库文件的连 接,并完成浮动地位的重定位。 从汇编语言源程序到可执行程序的生成过程如图所示。 汇编语言源程序 汇编 目标程序 可执行程序 连接
4、2汇编语言源程序的结构 4、2、1汇编语言的语句格式 汇编语言源程序中的每个语句可以由4项组成,格式如下 Iname operation operand: comment 「名字项]操作项操作数项;注释项 下面分别说明各项的表示方法。 1.名字项 源程序中用下列字符表示名字: 字母:A~Z或a~z; 数字:0~9; 专用字符号:?、·、 般来讲,名字项可以是标号或变量 (1)标号:在代码段定义,后面跟冒号: 它有三种属性:段、偏移及类型
4、2 汇编语言源程序的结构 4、2、1 汇编语言的语句格式 汇编语言源程序中的每个语句可以由4项组成,格式如下 [name] operation operand [;comment] [名字项] 操作项 操作数项 ;注释项 下面分别说明各项的表示方法。 1.名字项 源程序中用下列字符表示名字: 字母:A~Z或a~z; 数字:0~9; 专用字符号:?、•、@、―、$; 一般来讲,名字项可以是标号或变量。 (1)标号:在代码段定义,后面跟冒号: 它有三种属性:段、偏移及类型
①段属性:定义标号的段起始地址,在CX寄存器中。 ②偏移属性:16位无符号数。 ③类型属性:用来指出该标号是在本段内引用还是在其 他段内引用的。 (2)变量:变量在除代码以外的其他段中定义,后面不 跟冒号。它也可以用 LABLE或EQU伪操作来定义。变量 经常在操作数字段出现。 它也有段、偏移及类型三种属性。 ①段属性定义变量的段起始地址,此值必须在一个段寄 存器中。 ②偏移属性变量的偏移地址是16位无符号数,它代表从 段的起始地址到定义变量的位置之间的字节数。在当前段 内给出变量的偏移值等于当前地址计数器的值,当前地址 计数器的值可以用s来表示。 ③类型属性变量的类型属性定义该变量所保留的字节数
① 段属性:定义标号的段起始地址,在CX寄存器中。 ② 偏移属性:16位无符号数。 ③ 类型属性:用来指出该标号是在本段内引用还是在其 他段内引用的。 (2)变量:变量在除代码以外的其他段中定义,后面不 跟冒号。它也可以用LABLE或EQU伪操作来定义。变量 经常在操作数字段出现。 它也有段、偏移及类型三种属性。 ① 段属性定义变量的段起始地址,此值必须在一个段寄 存器中。 ② 偏移属性变量的偏移地址是16位无符号数,它代表从 段的起始地址到定义变量的位置之间的字节数。在当前段 内给出变量的偏移值等于当前地址计数器的值,当前地址 计数器的值可以用 $ 来表示。 ③ 类型属性变量的类型属性定义该变量所保留的字节数
2.操作项 操作项可以是指令、伪操作或宏指令的助记符。 3.操作数项 操作数项由一个或多个表达式组成,多个操作数项之间 般用逗号分开。 4.注释项 注释项用来说明一段程序或一条或几条指令的功能,它是 可有可无的 4、2、2汇编语言源程序的段定义 段定义伪操作的格式如下: segment-name SEGMENT segment-name ENDS 其中删节号部分,对于DS、ES和SS来说,一般是存贮单 元的定义、分配等伪操作;对于代码段则是指令及伪操作
2.操作项 操作项可以是指令、伪操作或宏指令的助记符。 3.操作数项 操作数项由一个或多个表达式组成,多个操作数项之间一 般用逗号分开。 4.注释项 注释项用来说明一段程序或一条或几条指令的功能,它是 可有可无的。 4、2、2汇编语言源程序的段定义 段定义伪操作的格式如下: segment-name SEGMENT … segment-name ENDS 其中删节号部分,对于DS、ES和SS来说,一般是存贮单 元的定义、分配等伪操作;对于代码段则是指令及伪操作
此外,还必须明确段和段寄存器的关系,这可用 ASSUME伪操作来实现,其格式为: ASSUME assignment, .. assignment 其中 assignment说明分配情况,其格式为: 〈段寄存器名〉:〈段名 其中段寄存器名必须是CS、DS、ES和SS中的一个, 而段名则必须是由 SEGMENT定义的段中的段名。4 2、3汇编语言源程序的结构 汇编语言源程序的程序基本结构是段,一个汇编语言 源程序由若干个代码段、数据段、附加段和堆栈段组 成。段之间的顺序可以随意安排,通常数据段在前, 代码段在后。任何可执行汇编语言程序至少要有一个 代码段,通常还可能有数据段和堆栈段。每个段都有 段首指令和段结束指令,段的内容介于这两条指令之 间
此外,还必须明确段和段寄存器的关系,这可用 ASSUME伪操作来实现,其格式为: ASSUME assignment,…,assignment 其中 assignment 说明分配情况,其格式为: 〈段寄存器名〉:〈段名〉 其中段寄存器名必须是CS、DS、ES和SS中的一个, 而段名则必须是由SEGMENT定义的段中的段名。 4、 2、.3 汇编语言源程序的结构 汇编语言源程序的程序基本结构是段,一个汇编语言 源程序由若干个代码段、数据段、附加段和堆栈段组 成。段之间的顺序可以随意安排,通常数据段在前, 代码段在后。任何可执行汇编语言程序至少要有一个 代码段,通常还可能有数据段和堆栈段。每个段都有 段首指令和段结束指令,段的内容介于这两条指令之 间
其一般结构如下: SSEG SEGMENT STACK 〈堆栈段的内容〉 SSEG ENDS DSEG SEGMENT DATA 〈数据段的内容 DSEG ENDS CSEG SEGMENT CODE 〈代码段的内容〉 CSEG ENDS END〈启动标号 对于一般程序来说,定义太多的段只会增加程序设计 的复杂性,通常需要一个代码段、一个数据段和一个 堆栈段,有时可包含一个附加段
其一般结构如下: SSEG SEGMENT STACK 〈堆栈段的内容〉 SSEG ENDS DSEG SEGMENT DATA 〈数据段的内容〉 DSEG ENDS CSEG SEGMENT CODE 〈代码段的内容〉 CSEG ENDS END 〈启动标号〉 对于一般程序来说,定义太多的段只会增加程序设计 的复杂性,通常需要一个代码段、一个数据段和一个 堆栈段,有时可包含一个附加段