《微型计算机原理及应用》课件第5章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《微型计算机原理及应用》课件第5章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微型计算机原理及应用 微型计算机 原理 应用 课件
- 资源描述:
-
1、1 1第5章 汇编语言程序5.1 汇编语言语法汇编语言语法5.2 汇编语言程序设计汇编语言程序设计本章小结本章小结2 2本章学习目标本章学习目标 明确汇编语言源程序的格式。了解汇编语言程序设计步骤。掌握常用伪指令的用法。掌握顺序、分支、循环和子程序的设计方法。用汇编语言(指令)编写的程序称为汇编语言源程序。在不发生混淆时,也称为汇编语言程序。汇编语言程序设计就是汇编语言源程序设计。3 35.1.1 汇编语言程序的格式汇编语言程序的格式下面给出的是汇编语言程序的基本格式:;数据段DATASEG SEGMENTDB?;伪指令 ;定义数据存储单元DATASEG ENDS5.1 汇编语言语法汇编语言语
2、法4 4;代码段CODESEG SEGMENT ASSUME CS:CODESEG,DS:DATASEGSTART:MOV AX,DATASEG ;(机器)指令 MOV DS,AX ;程序功能(片)段 MOV AX,4C00H ;DOS调用参数,程序正常结束5 5 INT 21H;DOS调用,返回操作系统CODESEG ENDS END START6 6由此可见:(1)汇编语言程序的语句除(机器)指令(第4章介绍的指令系统)外,还包括伪指令和宏指令(宏指令本书不予介绍)。(2)汇编语言程序有规定的书写格式。汇编语言程序是由各个段(SEGMENTENDS)组成的,DATASEG和CODESEG是
3、段的名字。其中具有(机器)指令的段为代码段,它是一个完整汇编语言程序必须具有的段。而具有伪指令,不具有(机器)指令的段多为数据段(附加数据段)或堆栈段,根据具体应用不同,这些段可有可无。7 75.1.2 汇编语言指令格式汇编语言指令格式汇编语言源程序中每条指令由4项组成,格式如下:名字:操作数1,操作数2,操作数3 ;注释说明:项是可选项,项是必选项。4项都不区分大小写,但前3项区分中文和英文。一般要用英文书写。8 81.名字名字名字可由字母(AZ)、数字(09)及专用字符(?、-、$等)组成,最多可识别31个字符。名字不能以数字开头,不能与助记符相同。为便于记忆,名字的定义应使人见名知义。一
4、般来说,名字可以是标号、变量、子程序名或过程名。9 91)标号标号由名字和冒号组成,且名字后面跟着冒号(录入程序时,冒号一定要用英文半角输入)。标号可在代码段定义,也可以用伪指令定义。标号具有3种属性:段属性、偏移属性及类型属性。(1)段属性定义标号的段起始地址,此值必须在一个段寄存器中,而标号的段总是在CS寄存器中。(2)偏移属性是指标号的偏移地址是从段起始地址到定义标号的位置之间的字节数(无符号数)。10 10(3)类型属性指出标号是在本段内引用还是在其它段中引用。在本段引用为NEAR,即近属性;在段外引用为FAR,即远属性。8088/86中,NEAR为16位,FAR为32位。11 112
5、)变量变量在数据段或附加数据段中定义,后面不跟冒号。变量经常作为操作数出现。它与标号一样也有段、偏移及类型3种属性。所不同的是变量的段一般是在DS或ES寄存器中,类型属性是字(WORD)和字节(BYTE)。12 122助记符助记符助记符可以是指令、伪指令和宏指令。对于指令,汇编程序将其翻译为机器语言指令;对于伪指令,汇编程序将根据其所要求的功能进行处理;对于宏指令,汇编程序将根据其定义展开。13 133操作数操作数指令中的操作数是完成指令操作所需要的操作对象。对于指令,可以有一个操作数、多个操作数或没有操作数;对于伪指令和宏指令,可以有一个或多个操作数。当指令有多个操作数时,操作数之间用逗号分
6、开。操作数可以是常数和表达式。14 141)常数常数分为数值常数、字符常数和符号常数。(1)数值常数可以是不同进制的数。如101 B、15(D)、47Q、0C6H(字母开头的数值前面加0,以免和符号常数混淆)等。(2)字符常数可以是单个字符或字符串,如B、CHINA等。(3)符号常数是用符号代替数值,但需要定义,如COUNT EQU 10,ADDR=1000H。15 152)表达式表达式是由运算对象和运算符组成的式子,分为数值表达式和地址表达式。数值表达式的运算结果为一个数;地址表达式的运算结果为存储单元的地址。算术运算符有+、-、*、/和MOD(取余),逻辑运算符有AND、OR、XOR和NO
7、T,关系运算符有GT、GE、EQ、LE、LT和NE。例如:LEA BX,DISP+2MOV AX,1000+4*2AND AL,65H OR 0FHMOV CX,86 GE 5816 16都是合法的汇编语言表达式。其中逻辑运算符只能用于数值表达式中。这些运算符的功能是在汇编阶段完成的,和指令助记符中的运算不同。指令助记符中的运算是在程序执行阶段完成的。17 173)数值回送操作符数值回送操作符主要有TYPE、LENGTH、SIZE、OFFSET、SEG等。它们将一些特征或存储器地址的一部分作为数值回送。下面举例说明它们的用法(参考5.1.3节进行阅读)。设:N1 DB 3,4N2 DW 5,8
8、N3 DB 20 DUP(?)18 18 TYPE 表达式MOV AL,TYPE N1 ;(AL)=1MOV AH,TYPE N2 ;(AH)=2 LENGTH 变量MOV AL,LENGTH N1 ;(AL)=1MOV AH,LENGTH N2 ;(AH)=1MOV CX,LENGTH N3 ;(AH)=20 SIZE 变量MOV AX,SIZE N1 ;(AX)=1MOV CX,SIZE N2 ;(CX)=1SIZE的返回值是TYPE与LENGTH之积。19 19 OFFSET 变量或标号MOV BX,OFFSET N1MOV SI,OFFSET N2汇编程序将回送变量或标号的偏移地址值。
9、与之等价的两条指令为:LEA BX,N1LEA SI,N2 SEG 变量或标号 MOV BX,SEG N1MOV SI,SEG N2汇编程序将回送变量或标号的段地址值。20204)属性操作符属性操作符主要有PTR、段操作符、SHORT、THIS、HIGH、LOW等。下面仅介绍前两个操作符。其它的操作符可查阅相关的参考书。设:N1 DB 3,4N2 DW 5,8 类型PTR 表达式MOV AX,WORD PTR N1MOV BL,BYTE PTR N2 21 21 段寄存器:变量或表达式MOV AL,CS:N1MOV BX,ES:N2正常情况下,系统默认为数据段(DS)中定义N1和N2。但用段操
10、作符后,就不再是数据段,临时改为段操作符指定的段取值。22224注释注释注释一定由分号开始,放在指令的后面或单独占行。注释为可选项,其目的是增加程序或指令的可读性。注释对程序或指令的执行不起任何作用,即汇编时不会产生机器码。23235.1.3 伪指令伪指令伪指令不是由机器(CPU)执行的,而是由软件(汇编程序)处理的。伪指令用于定义数据、分配存储区、定义符号常数、选择CPU处理器及指示程序结束等。1.定义数据伪指令定义数据伪指令伪指令格式:变量 助记符 操作数,操作数功能:为操作数分配存储单元,并用变量与存储单元建立联系。2424其中,变量可有可无。如有变量,则汇编程序使其记为第一个字节的偏移
11、地址。助记符即伪指令,用于定义数据的类型。常用的数据定义伪指令有以下几种:(1)DB,用于定义字节,其后的每个操作数都占一个字节的存储单元。(2)DW,用于定义字,其后的每个操作数都占一个字(16位)的存储单元。其低位字节(低8位)在第一字节地址中,高位字节(高8位)在第二字节地址中。(3)DD,用于定义双字,其后的每个操作数都占两个字(32位)的存储单元。其低位字(低16位)在第一字地址中,高位字(高16位)在第二字地址中。2525(4)DF,用于定义3个字,其后的每个操作数都占48位。此伪指令只能用于386及其后继机型中。(5)DQ,用于定义4个字,其后的每个操作数都占64位。(6)DT,
12、用于定义10个字节,其后的每个操作数都占80位。这些伪指令将其后跟着的数据存入指定的存储单元,形成初始化数据;或只分配存储单元而不存入确定的数值,形成未初始化的数据空间。DW和DD可存储地址(数据)。下面举例说明它们的用法。2626例例5.1 定义一个字节和一个字,并使其值分别为20和386。DB 20 DW 3862727例例5.2 给出下列定义的存储空间分配图。NUM1DB 5,ABC NUM2 DW 20 DB?,-1 DB C存储空间分配见图5.1。伪指令DB?表示只定义一个字节单元,其值不定,与图5.1中NUM2+2/NUM1+6存储单元对应。另外,负数在计算机中用其补码表示。当要求
13、定义一段连续的存储单元时,可用复制操作符(DUP)复制某个(些)操作数。其用法如下。2828图5.1 例5.2存储空间分配2929例例5.3 给出下列定义的存储空间分配图。DB 2 DUP(1,?)DW 100 DUP(0)存储情况如图5.2所示。3030图5.2 例5.3存储空间分配31 312.定义段伪指令定义段伪指令伪指令格式:段名(字)SEGMENT 段名(字)ENDS功能:定义一个段。其中,必须有段名,段名命名规则同名字。省略号部分,对于数据段、附加数据段和堆栈段,一般是存储单元的定义、分配等伪指令操作;对于代码段,则是指令及伪操作。3232此外,定义代码段时,还必须明确段和段寄存器
14、的关系,可用ASSUME伪指令来实现,其格式如下:ASSUME 段寄存器:段名(字),段寄存器:段名(字)3333例例5.4 编写完整的汇编语言程序求两个16位二进制数的和。分析:题中未指明两个数存放在哪里,故分两种情况。两个数存放在寄存器中(AX和BX)或为立即数,结果和存放在寄存器中(CX)。程序如下:MYCODE SEGMENT ASSUME CS:MYCODESTART:MOV AX,1234 MOV BX,6789 ADD AX,BX 3434 MOV CX,AX MOV AH,4CH INT 21HMYCODE ENDSEND START ;END后可无START3535 两个数存
15、放在存储单元中,结果和也存放存储单元中。此时必须用伪指令分配存储单元,程序如下:MYDATA SEGMENTN1DW 6789 N2 DW 1234 SUM DW?MYDATA ENDS;代码段MYCODE SEGMENTASSUME CS:MYCODE,DS:MYDATASTART:3636MOV AX,MYDATA MOV DS,AX MOV AX,N1ADD AX,N2 MOV SUM,AX MOV AH,4CHINT 21HCODESEG ENDSEND START ;END后可无START由此可见,完整的汇编语言程序必须有代码段,而其它段不一定有。37373.程序结束伪指令程序结束伪
16、指令伪指令格式:END 名字功能:汇编程序遇到该指令时就结束汇编。其中,名字表示程序开始执行的起始地址,因此此名字相当于标号,所以伪指令格式END后可写标号,但若写名字,则其后不用冒号。如果有多个程序模块连接,主程序使用名字,其它子程序模块只用END,而不用名字。只有一个程序模块时,可不用名字,参见例5.4。38384.定义符号伪指令定义符号伪指令当程序中多次使用同一个值或表达式时,为方便和提高程序可读性,可用赋值伪操作为表达式赋予一个名字。1)等价伪指令(EQU)伪指令格式:EQU 功能:给符号名定义一个值,赋予另一个名字、表达式或助记符。3939例例5.5 COUNT EQU 300;CO
17、UNT=300PI EQU 3.14 ;PI=3.14ALPH EQU COUNT+2 ;ALPH=302MOV CX,COUNT ;(CX)300 40402)等号伪指令(=)伪指令格式:=功能:将表达式的值赋给符号名。41 41例例5.6 COUNT=8 ;COUNT=8COUNT=COUNT+2 ;COUNT=10ALPH=COUNT+2 ;ALPH=12“=”与“EQU”的区别是:对于一个符号名,“EQU”只能赋值一次,而“=”可多次赋值。42423)解除等价伪指令(PURGE)伪指令格式:PURGE 功能:解除EQU指定符号的定义,可用EQU对符号重新定义。4343例例5.7 COU
18、NT EQU 300PURGE COUNTCOUNT EQU 20044445.处理器选择伪指令处理器选择伪指令伪指令格式:.处理器功能:选择不同的处理器,其指令集有所不同。4545例5.8 .8086 ;选择8086指令系统.386P ;选择保护模式下386指令系统.586 ;选择Pentium指令系统46466.地址计数器地址计数器在汇编程序时,汇编程序使用地址计数器保存当前正在汇编的指令的偏移地址。当开始汇编或在每一个段开始时,计数器初值始化为0,在以后汇编过程中,每处理一条指令,地址计数器就增加一个值,此值为该指令的字节数。地址计数器的值用“$”表示。汇编语言允许用户使用“$”引用地址
19、计数器的值如:NUM DW 4,2+$,84747汇编时,若NUM分配的地址偏移量为10H,则数据的第1项值为4,数据的第2项值为14H,数据的第3项值为8;再如:JMP$+20汇编时,JMP指令的地址偏移量为2000H,则此$值为2000H,执行该条指令后,程序转移到偏移地址为2014H的指令处执行。48487.定位伪指令定位伪指令伪指令格式:ORG 功能:设置当前地址计数器($)的值。4949例例5.9 DATA SEGMENTORG 10NUM DB 20,1 DW?DATA ENDSORG 10使NUM的偏移地址不是0000H,而是000AH。50505.2.1 汇编语言程序设计的基本
20、步骤汇编语言程序设计的基本步骤一般编写汇编语言程序的步骤如下:分析要求,确定算法。此步决定程序的质量。根据算法,画出流程图。此步对初学者很重要。根据流程图编写程序。上机调试程序。5.2 汇编语言程序设计汇编语言程序设计51 51本节举例说明上述前三个步骤,第步由读者自行完成。本书所讨论的编程环境只限于实模式。此处先介绍一下流程图。流程图可直观地表达程序设计思路,是算法的具体体现。流程图一般有五种成分,如图5.3所示。5252图5.3 流程图的组成成分5353(1)执行框表示一段或一个模块的功能。(2)判断框对给定的条件进行判断,根据条件成立与否决定如何执行其后的操作。因此它有一个入口,多个出口
21、。(3)开始框和结束框表示程序的起始和终止。(4)指向线表示程序执行的顺序。(5)连接点用于将画在不同地方的流程连接在一起。框内外要有说明文字。程序有顺序、分支、循环和子程序四种结构形式,对应不同的流程图。下面分别介绍四种结构的汇编语言程序设计。54545.2.2 顺序程序顺序程序顺序程序结构完全按指令存放顺序逐条执行指令序列。实际上这种结构在任何一个程序中都存在,作为程序的一部分(程序段落)。一般只有顺序结构的程序都比较简单,其流程图如图5.4所示。5555图5.4 顺序结构流程图5656例例5.10 将2个用ASCII码表示的十进制数转换为对应的数值。设此2个数存放在存储单元,转换后存入储
22、单元。程序如下:DATA SEGMENTN DB 38H,32HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA5757 MOV DS,AX AND N,BYTE PTR 0FH AND N+1,BYTE PTR 0FH MOV AX,4C00H INT 21HCODE ENDS END START58585.2.3 分支程序分支程序 1.分支程序的结构形式分支程序的结构形式当解决问题要求根据不同条件采用不同方法时,在计算机程序设计中就表现为分支结构的程序设计。分支程序结构有两种形式,如图5.5所示。图5.5(a)相当于高
23、级语言中的if-else语句,图5.5(b)相当于高级语言中的case语句。if-else具有两个分支,case具有多个分支。它们的共同点是:执行方向不变;在某一特定条件下,只能执行一个分支。5959图5.5 分支结构流程图60602.分支程序设计方法分支程序设计方法程序的分支一般用条件转移指令实现。例例5.11 将一位用ASCII码表示的十六进制数转换为对应的数值。程序流程如图5.6所示。61 61图5.6 例5.11程序流程图6262程序如下:DATA SEGMENTACS DB 45HNUM DB?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAST
24、ART:MOV AX,DATA MOV DS,AX MOV AL,ASC6363SUB AL,48CMP AL,10JC DONESUB AL,7DONE:MOV NUM,AL MOV AX,4C00H INT 21HCODE ENDS END START6464例例5.12 编写如下符号函数的计算程序:程序流程如图5.7所示。1 x0y0 x=01 x06565图5.7 符号函数流程6666设x和y的偏移地址分别为X和Y,程序如下:DATA SEGMENTX DB 12Y DB?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,D
展开阅读全文