大工13秋汇编语言程序设计辅导资料...
大工13秋汇编语言程序设计辅导资料七主 题:第四章80x86指令系统和寻址方式(第1-2节)
内 容:
第四章第1-2节概述
这周我们学习第四章中的第1-2节,汇编程序功能及伪操作。在理解汇编程序工作特点基础上学习几种伪操作,主要包括段定义、程序开始和结束伪操作、数据定义及存储器分配位操作、表达式赋值、地址计数器和对准伪操作等等。伪指令作为汇编语言重要的组成部分,对于阅读和编程都很重要,因此需要大家在理解的基础上好好掌握本周内容。
第1节汇编程序功能
1、汇编程序
1)汇编程序:汇编程序不是用户编写的,而是由专业软件公司编写的程序主要包括微软的MASM系列和Boland公司推出的TASM系列,他的作用就是为用户开放伪操作和操作符,供用户开发汇编程序时使用。
汇编程序的主要功能是:
检查源程序
测出源程序中的语法错误并给出错误信息
产生源程序的目标程序,并给出列表文件,同时列出汇编语言和机器语言的文件
展开宏指令
2) 汇编程序运行的过程:
使用编辑程序建立ASM后缀的源文件
使用汇编程序把ASM文件转换成OBJ后缀的目标文件
使用LINK程序把OBJ文件转换成EXE后缀的可执行文件
在DOS系统中输入文件名就可以执行该程序了
第2节伪操作
1)汇编语言的三种指令系统:基本指令、伪指令、宏指令
2)伪指令和伪操作:伪操作也称为伪指令,它是写给汇编程序看的,不是用户程序的真正执行部分
3)处理器选择伪操作:
.8086
.286
.386
……….
这几条伪操作就是告诉汇编程序,本次汇编语言程序所需要使用的微处理器的型号,从而确定不同的指令系统。
4)段定义伪操作:
格式如下:
Segment name segment
.
.
.
Segment name ends
说明:这也是完整的段定义伪操作,其中删节号部分对于数据段、附加段和堆栈段来说,一般是存储单元的定义、分配等伪操作,代码段则是指令及伪操作。此外还需要用ASSUME指令来说明段和段寄存器的对应关系,其格式为:
Assumesegment register name:segment name ….segment register name:segment name
段定义伪操作还可以在SEGMENT后增加类型和属性的说明,格式如下:
Segmentname segment
[‘clast’]
.
.
Segmemtname ends
其中定位类型(aligntype)说明段的起始地址应该有怎样的边界值,可以为0,不为0,偶地址和,4的倍数等情况;组合类型(combinetype)说明程序链接时的段组合并方法;使用类型(usetype)说明使用16位寻址方式还是32位寻址方式;类别(‘class’)引号中给出连接时组成段组的类型名,连接段组时可以把相同类别的段的位置靠近一起
5)存储模型及简化段定义伪操作
存储模型伪操作,格式如下:
.MODEL memory_model [,model options]
说明:这条伪指令用来说明存储器中是如何安排各个段的,通过存储模型(memory_model)来说明,有如下几种存储模型:
Tiny、small、medium、compact、large、huge、flat,对应的模型说明可以在参考书和课件中找到;.model options 允许用户指定高级语言接口、操作系统和堆栈距离,例如
.model small,c
.model large,pascal,os_dos,farstack
简化段定义伪操作:
在汇编程序中有七种标准段:
Code 代码段
Initialized date 初始化数据段
Unintialized date 未初始化数据段
Far initialized date 远初始化数据段
Far uninitialized date 远未初始化数据段
Constants 常数段
Stack 堆栈段
说明:可以看出,简化段定义伪操作中,数据段是可以系划分的,需要注意的是,当使用这些简化段定义时,必须在这些简化段伪操作出现之前先用.model伪操作定义存储模型,然后再使用简化段伪操作定义段。
与简化段定义伪操作相关的预定义符号,如符号@,
Mov ax,@data
Mov ds,ax
利用@data,就可以给出数据段的段名。
6)程序开始和结束伪操作:
程序开始用name或title作为模块的名字,格式为:
Name module_name
Title text
表示源程序结束的伪操作格式为:
End
这条指令说名结束汇编程序,并从标号地址开始执行源程序。
7)数据定义及存储器分配伪操作:
格式是 : mnemonic operand,….operand [;comments]
说明:变量字段是可有可无的,它用符号地址表示,其作用和指令语句中的标号相同,但它后面没有冒号;变量的值是当前段第一个字节的偏移地址。
助记符(mnemonic)字段有以下几种定义:
DB(字节)、DW(字)、DD(双字)、DF(6字节)、DQ(4字)、DT(10字节)
操作数字段还可以使用复制操作符dup,格式如下:
Repeat_countdup(operand,…,operand)
其中repeat_count可以为一个表达式,它的值是一正整数,用来指定括号中操作数的重复次数。
注意变量的类型属性问题,变量的值是该伪操作中第一个数据项在当前段内第一个字节的偏移地址,变量还有一个类型属性,用于表示该语句中每一个数据项的长度。变量表达式的属性和变量本身是相同的。
8)赋值伪操作:
格式为:expression_name equexpression
说明:优势程序中多次出现同一个表达式,为了方便就可以使用赋值伪操作。赋值伪操作可以定义变量。注意赋值伪操作EQU和=伪操作是不同的,EQU伪操作不允许重复定义表达式,而=伪操作却可以重复定义。
9)地址计数器与对准伪操作
地址计数器$:在汇编过程中,$用来保存当前正在汇编的指令的偏移地址。地址计数器的值用$表示。用户引用地址计数器$的两种方式:
指令中引用,如: JNE $+6
伪指令中引用,如:ARRAY DW 1,2,$+4,3,4
指令中引用$时,如果地址计数器表达式的值不是另一条指令的首地址,则程序指示出错,无法执行。
对准伪操作
ORG伪操作
这条指令用来设置当前地址计数器的值,从而使下一字节的地址成为设定的值。
EVEN伪操作
这条指令使下一个变量或指令开始于偶数字节地址。
ALIGN伪操作
这条指令保证双字数组边界从4的倍数开始
Align 2和EVEN 是等价的。
10)基数控制伪操作,格式如下:
.RADIX expression
其功能作用只需要了解即可。
本周要求掌握的内容如下:
基本概念:汇编程序、汇编程序的功能、汇编程序汇编过程、段定义和简化段定义伪操作、变量、变量的值和变量的类型、地址计数器和地址计数器的值、对准伪操作
基本理论:理解汇编程序的功能和汇编过程,理解和掌握完整的段定义伪操作和简化段定义伪操作,区分变量和标号,会使用两种定义变量的方法,理解地址计数器表达式所计算出的地址,了解几种对准伪操作。
习题:
1、 请说明汇编程序的主要功能有哪些?
1)检查源程序
2)测出源程序中的语法错误并给出错误信息
3)产生源程序的目标程序,并给出列表文件,同时列出汇编语言和机器语言的文件
4)展开宏指令
2、经汇编好的OBJ文件已经可以运行。
(错)
3、已知程序段如下:
Data_byte DB 10,4,10H
DATA_WORD DW 100,100H,-5
DATA_DW DD 3*20,0FFFFDH
请问,上述程序汇编后,从DATA_BYTE地址开始算,第4个存储单元和第9个存储单元中的内容分别是什么()
(64h)(0FFH)
4、如果想定义一个变量,你可以采用什么指令:
(A)段定义 (B)存储模型 (C)数据定义 (D)EQU
5、请说明下列伪操作符号的作用,@,$
1)利用@data,就可以给出数据段的段名
2)指令中引用$时,如果地址计数器表达式的值不是另一条指令的首地址,则程序指示出错,无法执行
页:
[1]