《计算机原理与汇编语言程序设计》课件第5章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《计算机原理与汇编语言程序设计》课件第5章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机原理与汇编语言程序设计 计算机 原理 汇编语言 程序设计 课件
- 资源描述:
-
1、第第5 5章章 汇编语言汇编语言第第5 5章章 汇编语言汇编语言5.1 基本概念基本概念 5.2 汇编语言语句汇编语言语句 5.3 汇编语言常用伪指令汇编语言常用伪指令 习题习题 第第5 5章章 汇编语言汇编语言5.1 基基 本本 概概 念念汇编语言是一种面向机器的程序设计语言,它采用助记符来表示机器指令的操作码和操作数,用符号地址表示操作数地址。汇编语言编写的源程序是不能在计算机上直接运行的,必须将其翻译成机器语言的目标程序后,计算机才能执行,这个翻译过程称为汇编,完成汇编任务的程序称为汇编程序。汇编程序是最早也是最成熟的一种系统软件,它除了能将汇编语言源程序翻译成机器语言程序外,还能够根据
2、用户的要求分配程序区、数据区、暂存区等;能把各种进位制数转换成二进制数,把字符转换成ASCII码,计算表达式的值第第5 5章章 汇编语言汇编语言等;也能自动对源程序进行检查,给出如非法格式,未定义的助记符、标号,漏掉操作数等错误信息,具有这些功能的汇编程序称为基本汇编ASM(Assembler)。宏汇编MASM(MacroAssembler)是在基本汇编的功能上,增加了宏指令、结构、记录等高级汇编语言功能。汇编语言源程序由若干个语句组成,语句分为指令语句、伪指令语句和宏指令语句。1.指令语句指令语句指令语句又称机器指令语句,是给CPU的命令,在运行时由CPU执行,每条指令对应CPU的一种特定的
3、操作,例如数据传送、加、减运算等。指令语句是可执行语句。第第5 5章章 汇编语言汇编语言2.伪指令语句伪指令语句伪指令语句也叫指示性语句,形式上与一般指令相似,但伪指令是给汇编程序的命令,它们不是在程序运行期间由计算机来执行的,而是在汇编过程中由汇编程序进行处理,伪指令只是为汇编程序提供有关信息,不产生相应的机器代码。例如定义数据、分配存储区、定义段及定义过程等。汇编以后,每条汇编指令都会产生与之对应的目标代码,而伪指令则不会产生相应的目标代码。3.宏指令语句宏指令语句给一个需要重复使用的程序段命一个名,进行宏定义,该程序段就称为宏,以后需要使用这段程序时,只要在相应的位置上使用宏名,宏的引用
4、语句就是宏指令语句。汇编时,汇编程序会把遇到的宏指令语句还原成原来的程序段,用这种方法可以提高编程效率。第第5 5章章 汇编语言汇编语言5.2 汇编语言语句汇编语言语句5.2.1 汇编语言语句格式汇编语言语句格式汇编语言的语句都是由四个域组成的,格式如下:名字项 操作码项 操作数项;注释项其中带方括号的项是可选项。1.名字项名字项不同的语句名字项有不同的名称和含义。指令语句或宏指令中的名字项称为标号,后面用冒号与操作码项作分隔。标号是指令的符号地址,可作为转移指令或子程序调用的目标地址。伪指令中的名字项可称为符号名,不同的伪指令其名字项的作用也不同,可以是变量名、符号常数名、子程序名或段名等。
5、伪指令语句的名字项与操作码项是用空格分隔的。第第5 5章章 汇编语言汇编语言汇编程序对名字项有严格的规定。(1)名字项可以使用下列字符:大/小写字母、数字、特殊字符?、_、。名字项的第一个字符不能用数字,必须是字母或特殊字符,但“?”不能单独作名字项。名字项的最大长度不超过31个字符,如果超过则后继字符无效。(2)名字项不能使用保留字。汇编语言中的CPU寄存器名、指令助记符、伪指令助记符或运算符等都属于保留字。(3)名字项最好使用有意义的字符串。使用有明确意义的字符串作名字项,用户比较容易记忆,如用DATA表示数据,SUM表示累加和等。第第5 5章章 汇编语言汇编语言(4)名字项在程序中不能重
6、复定义。在同一个程序中,相同名字项的定义只允许出现一次,否则汇编程序会指示出错。2.操作码项操作码项操作码用来指明操作的性质或功能,表示语句实现的具体操作,是四个域中唯一不可或缺的项。指令和伪指令中的助记符都是操作码。操作码项与操作数项之间用空格分开,MOV、ADD等都是操作码。3.操作数项操作数项指令中的操作数项用来指定参与操作的数据。对于可执行指令可能有一个或两个操作数,也可能没有操作数;对于伪指令和宏指令,可以有多个操作数。当操作数多于一个时,操作数之间用逗号分开。操作数项可以是常数、变量、标号、寄存器、表达式等。第第5 5章章 汇编语言汇编语言4.注释项注释项注释是语句的说明部分,用来
7、说明一条指令或一段程序的功能,用分号(;)与操作数分隔。在一些语句后适当地加些注释,可以增加程序的可读性,便于阅读、理解和修改程序。汇编源程序时,注释部分不产生机器代码。5.2.2 操作数操作数常见的操作数有寄存器、常数、变量、标号、表达式等。下面主要介绍后面四种操作数。1.常数常数常数是没有属性的纯数,它的值在汇编时已完全确定,程序运行过程中不会发生变化。常数通常被称为立即数,它只能用作源操作数,不能作为目标操作数。它的位数由指令中的目标操作数决定,或为8位或为16位。常数分为以下几种:第第5 5章章 汇编语言汇编语言1)数值常数汇编语言中的数值常数可以是二进制、八进制、十进制或十六进制数,
8、书写时用数字加后缀(二进制用B、八进制用O或Q、十进制用D、十六进制用H)的方式区分不同进位制数。十进制数可以省掉后缀。对于十六进制数以AF开头的数,数字前面要加0,避免和字符串混淆。2)字符串常数字符串常数是由单引号括起来的一个或多个字符。字符串在计算机中存储的是相应字符的ASCII码。如A的值是41H,ab的值是6162H等。也可以直接写ASCII码,ASCII码之间用逗号作分隔,此时就不要用单引号了。3)符号常数符号常数是用符号定义伪指令定义的符号,这时可以用符号名代替常数或表达式的值。第第5 5章章 汇编语言汇编语言2.变量变量变量是指存放在某些存储单元中的数据,这些数据在程序运行期间
9、是可以改变的。变量名是操作数的符号地址。变量属于存储器操作数,经常出现在指令中,既可以作为源操作数,也可以作为目的操作数。变量有三种属性:段属性、偏移属性和类型属性。段属性:指变量所在段的段起始地址。偏移属性:指变量的偏移地址,是从段的起始地址到变量所在位置之间的字节数。类型属性:指变量占用存储单元的字节数,有Byte(字节)、Word(字)、DWord(双字)等几种。变量的段属性和偏移属性构成了变量的逻辑地址。第第5 5章章 汇编语言汇编语言3.标号标号标号出现在代码段中,是机器指令的符号地址,指示汇编后指令代码在存储器中的位置。标号也属于存储器操作数,也有三种属性:段属性、偏移属性和类型属
10、性。段属性:指标号所在段的段起始地址。偏移属性:指标号在段内的偏移地址,是从段起始地址到标号所在位置之间的字节数。类型属性:指该标号是在段内引用还是在段间引用的。若是段内引用的,则为NEAR;若是段间引用的,则为FAR。标号的段属性和偏移属性构成了标号的逻辑地址。第第5 5章章 汇编语言汇编语言4.表达式表达式由常数、变量、标号通过操作运算符连接而成的式子称为表达式,是操作数的基本形式。表达式的值是在程序汇编过程中计算确定的,不是在程序运行时获得的。表达式有数值表达式和地址表达式两种。数值表达式是由算术运算符、数值返回运算符等连接而成的式子,它的运算结果是一个数值常数,只有大小,没有属性。地址
11、表达式是由变量、常数、标号、寄存器名和操作符连接而成的式子,它的运算结果是一个存储单元的地址。5.2.3 运算符运算符8086汇编语言中常用的运算操作符有算术运算符、逻辑运算符、关系运算符、数值返回运算符、属性修改运算符等。第第5 5章章 汇编语言汇编语言下面重点介绍算术运算符、数值返回运算符和属性修改运算符。1.算术运算符算术运算符算术运算符包括加(+)、减(-)、乘(*)、除(/)和MOD。MOD运算符进行的是整除,得到的是余数部分。例如,39 MOD 6,其结果为3。当算术运算符运用于地址表达式时,应保证其结果有明确的物理意义,使用比较多的是“+”和“-”运算。例如:要将首地址为BUF的
12、字节数组中的第5个数送至AL单元,实现的指令如下:MOV AL,BUF+4第第5 5章章 汇编语言汇编语言2.数值返回运算符数值返回运算符数值返回运算符用来把存储器操作数(变量或标号)分解为它的组成部分,并且返回一个表示结果的数值。这组运算符有5个,分别是:1)SEG运算符格式:SEG 变量名或标号返回的是变量或标号所在段的段基值。例如:MOV BX,SEG DATA如果变量DATA所在段的段基值为2300H,这条指令的结果就是:BX=2300H。第第5 5章章 汇编语言汇编语言2)OFFSET运算符格式:OFFSET 变量名或标号返回的是变量或标号的段内偏移量。例如:MOV SI,OFFSE
13、T DATA设DATA在段内的偏移量是421H,这条指令的结果是:SI=0421H。这条指令与指令LEA SI,DATA是等效的。3)TYPE运算符格式:TYPE 变量名或标号返回的是变量或标号的类型数值。第第5 5章章 汇编语言汇编语言如果是变量,返回的数值是变量所占的字节数:DB为1,DW为2,DD为4,DQ为8,DT为10;如果是标号,则返回的是代表标号类型的数值:NEAR为-1,FAR为-2,这个数据没有什么实际的意义。4)LENGTH运算符格式:LENGTH 变量返回的是数组变量的元素个数。如果变量中使用了DUP表达式,则返回的是最外层DUP的值;如果没有使用DUP表达式,则返回的值
14、是1。第第5 5章章 汇编语言汇编语言5)SIZE运算符格式:SIZE 变量返回的是数组变量所占的总字节数,也就是等于LENGTH和TYPE两个运算符返回值的乘积。例如:变量BUFFER定义为36个“1”,变量的类型是字,用伪指令定义为BUFFER DW 36DUP(1)则指令MOV DX,SIZE BUFFER的结果为DX=72。第第5 5章章 汇编语言汇编语言3.属性修改运算符属性修改运算符格式:类型 PTR 表达式其中:类型可以是BYTE、WORD、DWORD和NEAR、FAR。运算结果是将表达式所指定的变量、标号或存储器操作数的类型属性,临时性地修改或指定为PTR运算中规定的类型。这种
15、修改是临时性的,仅在有修改运算符的语句内有效。例如:要将一个字变量WDA中高字节的内容送AH,指令为MOV AH,BYTE PTR WDA+1第第5 5章章 汇编语言汇编语言5.3 汇编语言常用伪指令汇编语言常用伪指令5.3.1 数据定义伪指令数据定义伪指令数据定义伪指令用来定义一个变量的类型,并为变量分配存储单元及预置初值,也可以只给变量分配存储单元,而不赋初值。数据定义伪指令的一般格式为第第5 5章章 汇编语言汇编语言其中:DB用来定义字节数据,每个操作数一个字节;DW用来定义字数据,每个操作数16位,两个字节(低字节在低地址中,高字节在高地址中);DD用来定义双字数据,每个操作数32位。
16、数据定义伪指令还有DF和DQ等形式,分别用来定义6个字节数和4字数,但比较少见,所以就不介绍了。数据定义伪指令的操作数可以是常数、表达式或字符串,但每项操作数的值不能超过由伪指令所定义的数据类型限定的范围。例如,DB伪指令定义的是字节类型数据,数的范围应该是0255(无符号数)和-128+127(带符号数)。第第5 5章章 汇编语言汇编语言1.操作数的种类操作数的种类1)操作数是常数或数值表达式DA_B DB 10101010B,10,10H DA_W DW 4*64,100H,400Q DA_D DD 0E74DH,-20汇编程序在汇编期间根据上述定义的变量类型在存储器内分配存储单元,汇编后
17、的内存分布如图5-1所示。第第5 5章章 汇编语言汇编语言图5-1 操作数是常数 第第5 5章章 汇编语言汇编语言2)操作数是字符串字符串是由单引号括起来的一串字符。如果用DB伪指令定义,字符串的长度不能超过255个,汇编时为每个字符分配一个存储单元,自左向右以字符的ASCII码形式按地址递增的顺序存入。如果用DW伪指令定义,每个数据只能是两个字符,汇编时前一个字符的ASCII码作高字节,后一个字符为低字节。STR1 DB 2591H,CD STR2 DW CD,10H STR3 DD CD汇编后的内存情况如图5-2所示。第第5 5章章 汇编语言汇编语言图5-2 操作数是字符串 第第5 5章章
18、 汇编语言汇编语言3)操作数是带?的表达式不带引号的?表示预留空间。DA_B DB 50,?,?,0A5H DA_W DW?,43H 汇编后的结果见图5-3。4)操作数是带DUP的表达式DUP是定义重复数据操作符。格式:表达式1 DUP(表达式2)其中:表达式1是重复次数,表达式2是重复的内容。第第5 5章章 汇编语言汇编语言如果待操作的数据中有一组相同的数据要进行定义,这时用DUP就很方便。例如:ARY1 DB 20H DUP(1),2 DUP(0,1,2,?)ARY2 DW 8 DUP(?)汇编后的结果见图5-4。DUP可以嵌套使用,例如:ARY3 DW 5 DUP(2 DUP(9,3)A
19、RY4 DB 10H DUP(1,2 DUP(3,4),5,6)汇编后的结果见图5-5。第第5 5章章 汇编语言汇编语言图5-3 带?的表达式第第5 5章章 汇编语言汇编语言图5-4 DUP操作符 第第5 5章章 汇编语言汇编语言图5-5 DUP嵌套 第第5 5章章 汇编语言汇编语言5)操作数是地址表达式可以用DW或DD伪指令把变量或标号的偏移地址或由16位段地址和16位偏移地址组成的整个地址存入存储器。用DD伪指令存入地址时,第1个字为偏移地址,第2个字为段地址。例如(见图5-2),伪指令 ADR1 DW STR1 ADR2 DD STR3汇编后,内存的内容如图5-6所示。第第5 5章章 汇
20、编语言汇编语言图5-6 操作数是地址表达式第第5 5章章 汇编语言汇编语言2.变量的使用变量的使用用数据定义伪指令定义过的变量有指定的类型,在程序中使用这些变量时必须严格按定义的类型工作。例如,有以下的数据定义:DATA1 DB 35H,46H DATA2 DW 7812H指令:MOV AH,DATA1+1 MOV BX,DATA2是正确的。而 MOV AX,DATA1 MOV BL,DATA2第第5 5章章 汇编语言汇编语言则是错误的。如果要从定义为字节或字的变量中获得不同类型的数,则可以使用PTR运算符。例如:MOV AX,WORD PTR DATA1 MOV BL,BYTE PTR DA
21、TA2指令执行后的结果分别为 AX=4635H BL=12H5.3.2 符号定义伪指令符号定义伪指令符号定义伪指令的作用是给一个符号命名,或定义新的类型属性等。这些符号可以包括汇编语言的变量名、标号名、过程名、寄存器名以及指令助记符等。第第5 5章章 汇编语言汇编语言1.EQU伪指令伪指令 格式:符号名 EQU 表达式功能:用符号名来代替给定的表达式,之后程序中凡用到该表达式的地方,都可以用符号名来代替。格式中的表达式可以是操作数的地址、常数表达式,甚至可以是助记符。需要注意的是,一个符号经EQU伪指令定义后,在同一个程序中,不允许再对这个符号重新赋值。例如:CON EQU 156 ;CON被
22、赋值为156 BETAEQU CON-42 ;BETA被赋值为156-42(=114)DATAEQU ARY+BETA;DATA与ARY+114等价 AEQU ADD ;用A代替指令ADD SCEQU CS:BP+3;带段超越的地址表达式用符号名SC代替第第5 5章章 汇编语言汇编语言2.“=”伪指令伪指令格式:符号名=表达式“=”伪指令与EQU伪指令类似,也用于给操作数赋初值,它们之间的区别是:EQU伪指令中的符号名不允许重复定义,而“=”伪指令则允许重复定义。例如:NUM=13*5 ;NUM=65 NUM=NUM/6 ;NUM=10 NUM=NUM-7 ;NUM=3NUM=NUM+3 ;N
23、UM=6NUM=NUM MOD 5 ;NUM=1 ORG 3460H ;下列数据的偏移地址从3460H开始第第5 5章章 汇编语言汇编语言BUF1 DW 45,960CH BUF2 DB 3DUP(ABCD)DATA=BUF2+4 ;DATA=3468H CON=BUF2-BUF1 ;CON=4但COUNT EQU 25COUNT EQU COUNT+1是错误的,正确的用法应该是:COUNT EQU 25COUNT1 EQU COUNT+1用EQU定义过的符号名来代替指令或地址时,必须先定义才能使用,否则极容易造成混乱。第第5 5章章 汇编语言汇编语言5.3.3 段定义伪指令段定义伪指令808
24、6 CPU是按段来使用存储器的,所以编写一个汇编语言的源程序时,也必须按段来构造程序。汇编程序把源程序转换为目标程序时,要有标号和变量的偏移地址,并将有关信息通过目标模块传送给连接程序,连接程序才能把不同的段和模块连接在一起,形成一个可执行的程序。段定义伪指令就是对段进行定义。汇编语言程序的逻辑段有代码段、数据段、堆栈段和附加段,它们的作用如下:代码段:程序代码存储区。数据段:程序的数据存储区,定义程序要用的操作数,指令通过变量来引用这些数据。第第5 5章章 汇编语言汇编语言堆栈段:为程序堆栈定义一块存储区,大小由用户定义,最大不超过64 KB。附加段:附加的数据存储区,串操作时,字符串的目的
25、地址必须放在附加段。在一个程序中不一定4个段都设置,但至少要定义一个代码段。1.段定义伪指令段定义伪指令在汇编语言程序中定义逻辑段,用它来指定段的名称和范围,并指明段的定位类型、组合类型及类别。其格式如下:段名 SEGMENT 定位类型 组合类型 类别名 段名 ENDS第第5 5章章 汇编语言汇编语言SEGMENT和ENDS要成对使用,段名由用户自定义,一般建议选用与本段用途相关的字母组合,一个段开始和结束使用的段名要一致。对于数据段、附加段和堆栈段来说,删节号部分一般是数据定义和符号定义等伪指令,对于代码段则既有指令又有伪指令。一般情况下,SEGMENT后面的说明可以不用。但是,如果需要用连
展开阅读全文