资源描述
课程教案∕讲稿用纸
第15次课
教学课型:理论课√实验课□习题课□实践课□技能课□其它□
主要教学内容(注明:*重点#难点):
讲授过程:
1.汇编语言程序基本格式
2.汇编语言基本语法
3.伪指令
* 重点
汇编语言程序基本格式和伪指令的概念
# 难点
伪指令的应用和理解
教学目的要求:
了解: 汇编语言程序基本格式和汇编语言的基本语法;
掌握: 伪指令的应用
教学方法和教学手段:
讲课思路:
从汇编语言程序基本格式开始介绍,接着讲解汇编语言基本语法,最后介绍了常用的伪指令
讲授方法:口头讲授结合例子,并采用电子投影的形式。
讲授过程:
1. 汇编语言程序基本格式
2. 汇编语言基本语法
3. 伪指令
讨论、思考题:
1. 执行性指令和伪指令的区别是什么?
参考书目:
讲授内容
教学设计∕备注
第4章 汇编语言程序设计
4.1 汇编语言程序基本格式
4.1.1 汇编语言格式
机器语言是计算机能直接识别和执行的语言,用一串“0”、“1”数字代码表示。
汇编语言是一种符号语言,它用某种容易记忆的英文缩写去表示机器指令操作码(指令助记符),用人们熟悉的数码及数学符号等表示操作数、地址。
4.1.2汇编语言源程序和汇编程序
用汇编语言编写的程序称为汇编语言源程序,或简称为源程序。对程序员来讲,符号语言简单直观、便于记忆,比二进制数表示的机器语言方便了许多。但计算机只“认识”机器语言而不认识这些文字、数字、符号,为此人们创造了一种程序,叫汇编程序。如同英汉之间对话需要“翻译”一样,汇编程序的作用相当于一个“翻译员”,自动地把汇编语言源程序翻译成机器语言。该过程称为汇编,完成汇编任务的程序称为汇编程序,相应形成的机器语言程序称为目标程序。汇编后形成的目标程序虽然是二进制代码,但还不能直接上机运行,必须经过连接程序(LINK)连接,将库文件或其它目标文件连接到一起形成可执行文件后,才能送入计算机执行。汇编语言程序从建立到汇编、连接形成可执行程序的整个过程如图所示。
4.1.3汇编语言的特点
1. 执行速度快
2. 程序短小
3. 可以直接控制硬件
4. 可以方便地编译
5. 辅助计算机工作者掌握计算机体系结构
4.1.4一般汇编语言程序的结构形式
4.2汇编语言基本语法
4.2.1常量、变量与标号
1. 常量
⑴ 数值常量
汇编语言中的数值常量可以是二进制、八进制、十进制或十六进制数,书写时用加后缀的方式标明即可,对于十进制数可以省掉后缀。对于十六进制数,当以A~F开头时,前面加数字0,以避免和名字混淆。
⑵ 字符串常量
包含在单引号中的若干个字符形成字符串常量,字符串在计算机中存储的是相应字符的ASCLL码。如‘A’的值是41H,‘AB’的值是4142H等。
⑶ 符号常量
常量用符号名来代替就是符号常量。
用COUNT EQU 3或COUNT=3定义后COUNT就是一个符号常量,与数值常量3等价。
2. 变量
变量在数据段、附加数据段或堆栈段中定义,后面不跟冒号。它也可以用LABEL或EQU伪操作来定义。变量经常在操作数字段出现。它也有段、偏移及类型三种属性。
段属性:定义变量的段起始地址,此值必须在一个段寄存器中。
偏移属性:变量的偏移地址是从段的起始地址到定义变量的位置之间的字节数。对于16位段,是16位无符号数;对于32位段,则是32位无符号数。在当前段内给出变量的偏移值等于当前地址计数器的值,当前地址计数器的值可以用$来表示。
类型属性:变量的类型属性定义该变量所保留的字节数。如BYTE(DB,1个字节长)、WORD(DW,2个字节长)、DWORD(DD,4个字节长)、FWORD(DF,6个字节长)、QWORD(DQ,8个字节长)、TBYTE(DT,10个字节长),这一点在数据定义伪操作中已作了说明。
在同一个程序中,同样的标号或变量的定义只允许出现一次,否则汇编程序会指示出错。
3. 标号
标号在代码段中定义,后面跟着冒号:,它也可以用LABEL或EQU伪操作来定义。此外,它还可以作为过程名定义。标号经常在转移指令或CALL指令的操作数字段出现,用以表示转向地址。标号有3种属性:段、偏移及类型。
段属性:定义标号的段起始地址,此值必须在一个段寄存器中,而标号的段则总是在CS寄存器中。
偏移属性:标号的偏移地址是从段起始地址到定义标号的位置之间的字节数。对于16位段是16位无符号数;对于32位段则是32位无符号数。
类型属性:用来指出该标号是在本段内引用还是在其他段中引用的。如是在段内引用的,则称为NEAR。对于16位段,指针长度为2字节;对于32位段,指针长度为4字节。如在段外引用,则称为FAR。对于16位段,指针长度为4字节(段地址2字节,偏移地址2字节);对于32位段,指针长度为6字节(段地址2字节,偏移地址4字节)。
4.2.2运算符与表达式
1. 算术运算符
算术运算符有:+(加)、-(减)、*(乘)、/(除)、MOD(取余除)。
MOV AL,4*8+5 ;数值表达式
MOV SI,OFFSET BUF+12 ;地址表达式
2. 逻辑运算符
逻辑运算符有:AND(与)、OR(或)、XOR(异或)、NOT(非)。
逻辑运算符只能用于数值表达式中,不能用于地址表达式中。逻辑运算符和逻辑运算指令是有区别的。逻辑运算符的功能在汇编阶段完成,逻辑运算指令的功能在程序执行阶段完成。
在汇编阶段,指令AND AL,78H AND 0FH等价于指令AND AL,08H。
3. 关系运算符
关系运算符有:EQ(相等)、LT(小于)、LE(小于等于)、GT(大于)、GE(大于等于)NE(不等于)。
关系运算符要有两个运算对象。两个运算对象要么都是数值、要么都是同一个段内的地址。运算结果为真时,表示为0FFFFH,运算结果为假时,表示为0000H。
指令 MOV BX,32 EQ 45 等价于 MOV BX,0
指令 MOV BX,56 GT 30 等价于 MOV BX,0FFFFH
4. 取值运算符
变量和标号具有段属性、偏移属性和类型属性等,要从变量和标号中析出它们的段地址、偏移地址,变量的类型、元素的个数和占用内存的大小等,就要使用取值运算符(又称分析运算符)。这些运算符是SEG、OFFSET、TYPE、LENGTH、SIZE。
例如:SCORE DW 30 DUP(0)
定义了一个变量,TYPE SCORE为2,LENGTH SCORE是30,而SIZE SCORE是60。
5. 合成运算符
也称为修改属性运算符,它能修改变量或标号的原有的类型属性并赋予新的类型。这类运算符是PTR和THIS。
① PTR的格式:
类型 PTR 表达式
其中类型可以是BYTE、WORD、DWORD、NEAR、FAR,表达式是被修改的变量或标号。
例如NUM被语句
NUM DB 1,3,5,7
定义为字节类型,若要将NUM开始两个字节的数据装入AX,指令
② THIS的格式:
新符号名 EQU THIS 类型
原符号名 类型 参数,…
THIS的功能与PTR相同,只是格式不同。THIS语句中建立一个新的符号名并指定它有THIS后的类型,而新符号名指向下一语句的原符号名的内存地址。例如前面用PTR修改NUM类型可用下面的THIS语句代替。
DNUM EQU THIS WORD
NUM DB 1,3,5,7
其中DNUM是字型并指向NUM所指的内存单元,DNUM的存取以字为单位,而NUM仍是字节类型。
4.3伪指令
1. 符号定义伪指令
⑴ 等值伪指令EQU
格式:<符号名>EQU<表达式>
例如:
CONSTANT EQU 256 ;将数256赋以符号名
B EQU [BP+8] ;变址引用赋以符号名B
⑵ 等号伪指令 =
例如:
EMP=6 或 EMP EQU 6
⑶ 定义符号名伪指令LABEL: LABEL伪指令可以定义变量或标号。
格式:<符号名> LABEL <类型>
⑷ 解除定义伪指令PURGE:解除指定符号的定义。
格式:PURGE<符号1,符号2,…,符号N>
解除符号定义后,可用EQU重新定义。
例如:
Y1 EQU 7 ;定义Y1的值为7
PURGE Y1 ;解除Y1的定义
Y1 EQU 36 ;重新定义Y1的值为36
2. 数据定义伪指令
格式:
[变量] 助记符 操作数,…,操作数 [;注释]
助记符字段说明所用伪指令的助记符,也即伪指令,说明所定义的数据类型。常用的有以下几种:
DB伪指令用来定义字节,其后的每个操作数都占有一个字节(8位)。
DW伪指令用来定义字,其后的每个操作数占有一个字(16位,其低位字节在第一个字节地址中,高位字节在第二个字节地址中)。
DD 伪指令用来定义双字,其后的每个操作数占有两个字(32位)。
DF 伪指令用来定义6个字节的字,其后的每个操作数占有48位,可用来存放远地址。这一伪指令只能用于386及其后继机型中。
DQ伪指令用来定义4字,其后的每个操作数占有4个字(64位),可用来存放双精度浮点数。
DT伪指令用来定义10个字节,其后的每个操作数占有10个字节,形成压缩的BCD码。
3. 段定义伪指令
⑴ SEGMENT和ENDS
段定义伪指令。该指令能对程序分段。其格式为:
段名 SEGMENT [定位类型][组合类型][‘类别’]
┇
段名 ENDS
⑵ ASSUME
段寄存器指派伪指令。格式为:
ASSUME 段寄存器:段名[,段寄存器:段名……]
⑶ ORG
移动地址指针的伪指令。其格式为:
ORG 常量表达式
4. 过程定义伪指令PROC和ENDP
过程名 PROC [NEAR/FAR]
┇
过程名 ENDP
5. 程序标题伪指令TITLE
格式:TITLE 文本
其中,文本是用户给出的字符串,要求长度不超过6个字符。
6. 地址计数器与对准伪指令
⑴ 地址计数器$
例如:ARRAY DW 1,2,$+4,3,4,$+4
如汇编时ARRAY分配的偏移地址为0074,则汇编后的存储区将如图4.2所示。
⑵ ORG伪指令
ORG伪指令用来设置当前地址计数器的值,其格式为:
ORG CONSTANT EXPRESSION
如常量表达式的值为N,则ORG伪指令可以使下一个字节的地址成
为常量表达式的值N。
例如: VECTORS SEGMENT
ORG 10
VECT1 DW 47A5H
VECT2 DW 0C596H ORG 20
VECTORS ENDS
则VECTL的偏移地址值为0AH,而VECT2的偏移地址值为14H。
7. 基数控制伪指令
⑴ 二进制数
由一串0和1组成其后跟以字母B,如00101100B。
⑵ 十进制数
由0~9的数字组成的数。一般情况下,后面不必加上标记,在指定其它基数的情况下,后面可跟字母D,例如178D。
⑶ 十六进制数
由0~9及A~F组成的数,后面跟字母H。这个数的第一个字符必须是0~9,所以如果第一个字符是A~F时,应在其前面加上数字0,如0FFFFH。
⑷ 八进制数
由数字0~7组成的数,后面可跟字母O或Q,如1777O。
⑸ .RADIX
RADIX伪指令可以把默认的基数改变为2~16范围内的任何基数。格式如下:
RADIX EXPRESSION
⑹字符串
字符串可以看成串常量,可以用单引号或双引号把字符串放在其中,得到的是字符串的ASCII码值,例如,'ABCD’。
作业:
教材习题4.1,4.2,4.3,4.4
5 / 6
展开阅读全文