微机原理与接口技术实用教程4.ppt

上传人:本田雅阁 文档编号:3195574 上传时间:2019-07-29 格式:PPT 页数:55 大小:200.51KB
返回 下载 相关 举报
微机原理与接口技术实用教程4.ppt_第1页
第1页 / 共55页
微机原理与接口技术实用教程4.ppt_第2页
第2页 / 共55页
微机原理与接口技术实用教程4.ppt_第3页
第3页 / 共55页
微机原理与接口技术实用教程4.ppt_第4页
第4页 / 共55页
微机原理与接口技术实用教程4.ppt_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《微机原理与接口技术实用教程4.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术实用教程4.ppt(55页珍藏版)》请在三一文库上搜索。

1、第四章 汇编语言程序设计,2019/7/29,微机原理,2,本章要点,汇编语言的基本语法规则,汇编语言常用的伪指令和DOS功能调用,顺序、分支、循环和子程序设计基本方法,2019/7/29,微机原理,3,一、汇编语言与机器语言 1、机器语言:是计算机能够识别直接执行的语言,这种形式也叫 目标代码(机器码),全由01组成。(高级语言编的源程序在执行 时也必须全翻译成机器语言) 2、汇编语言:用机器语言指令的助记符来编写程序的语言称汇编语言 (阅读理解方便,为程序员提供了完全控制目标代码的手段)。 3、源程序:用各种语言编写的程序本身。 4、汇编程序与编译程序: 汇编语言源程序-汇编-目标代码 高

2、级语言源程序-编译-目标代码 5、汇编语言包含:指令 让微处理器执行操作的指令 伪指令 告诉汇编程序如何汇编的指令,汇编语言的基本概念,2019/7/29,微机原理,4,4.1 汇编语言的基本语法,汇编语言程序,数据段,代码段,堆栈段,存放常数、变量以及作为 算术运算区和用来作为I/O 接口传送数据的工作区,堆栈段用来在内存中建立 一个堆栈区,以便在中断 和过程调用时使用,堆栈 还起承上启下的作用,用 于模块间参数的传送。,2019/7/29,微机原理,5,4.1.1 语句格式,语句格式: 名称 空格或冒号 操作助记符 空格 操作数 ;注释,标志符的要求: (1)标识符是一个字符串,第一个字符

3、必须是字母、“?”、“”、 或下划线“_”这四种字符中的一个。 (2)从第二个开始,可以是字母、数字、“?”、“”、“_”; (3)一个标识符的长度可以由131个字符组成。,2019/7/29,微机原理,6,4.1.2 语句类型与结构,1.指令性语句的结构 标号:前缀 指令助记符 操作数;注释 (1)方括号表示的成分可以选用或缺省。 (2)标号是后面紧跟“:”的一个标识符,标号代表该行指令在存 储器中的首地址,标号可作为转移指令和调用指令的一个操作数。 (3)前缀如重复前缀、总线封锁前缀等。 (4)操作数可以是一个、两个或没有,由指令类型决定,若有两 个操作数,前面为目的操作数,后面为源操作数

4、,中间用逗号隔开。 (5)注释是以“;”开始的字符串,不影响程序的汇编与执行,仅 用于增加源程序的可读性。,2019/7/29,微机原理,7,2. 指示性语句的结构 名字 伪指令助记符 操作数;注释 说明: (1)名字可以是符号常量名、变量名、过程名、 段名等,名字后面不能有“:”。 (2)伪指令命令助记符共有40多个,按功能不同分成 八类,本章介绍的常用五类共20多个。 (3)操作数可少到一个没有,多到两个以上,操作数 之间须用逗号分隔。,2019/7/29,微机原理,8,3. 宏指令语句的结构 宏名 宏操作助记符 操作数;注释 说明: (1)宏名即宏指令名,是一标识符,宏名后面不能有“:”

5、 (2)宏操作助记符共有8个,分别是MACRO、ENDM、 EXITM、LOCAL、REPT、IRPC、IRP、PURGE。 (3) 其余同指示性语句。,2019/7/29,微机原理,9,4.1.3 汇编语言的表达式,1、常数: 数值常数-可为各种数制,必须以数字打头,除十进制外, 必须用后缀注明,如BOH等。 字符串常数-由单引号括起的字符串,用来表示相应的ASCII码, 如179是31H37H39H。 2、表达式: 由操作数和操作符(运算符)构成,表达式的值必 须在汇编或连接时就确定。,2019/7/29,微机原理,10,4.1.4 汇编语言的运算符,算术运算符,逻辑运算符,关系运算符,分

6、析运算符,分离运算符,组合运算符,2019/7/29,微机原理,11,1.算术运算符,2.逻辑运算符,3.关系运算符,+-*/(整除) MOD(求二整数相除的 余数),ANDORNOT XOR按位进行,EQ(相等)NE(不等) LT(小于)GT(大于) LE(小于等于)GE(大于 等于),关系成立返回全1, 关系不成立返回全0(16位),2019/7/29,微机原理,12,3.分析 运算符,(1)SEG运算符 取段地址运算符,该运算返回变量或标号 所在段的段地址(字常量)。,(2)OFFSET运算符 取段内偏移地址符,该运算返回变量或标号 所在段的段内偏移地址。,(3)TYPE运算符 取类型属

7、性运算符,该运算返回变量或标号 的类型值。若运算对象是标号,则返回标号 的距离属性值,若运算对象是变量,则返回 变量类型所占字节数。,(4)LENGTH运算符 取数组变量元素个数运算符,如果变量是 用重复数据操作符DUP说明的,则返回DUP 前面的数值(即重复次数);如果没有DUP 说明,则返回值总是“1”。,2019/7/29,微机原理,13,5.分离 运算符,(1)LOW运算符 取地址表达式或16位绝对值低8位。,(2)HIGH运算符 取地址表达式或16位绝对值高8位。,(3)SHORT运算符 当转移指令的目标地址与该指令之 间的距离在-128+127字节范围内 ,可用SHORT运算符进行

8、说明,以 保证汇编程序能为该指令生成最短的 机器码,从而提高运行效率。,2019/7/29,微机原理,14,6.组合 运算符,(1)“:”运算符 用来临时给变量、标号或地址表达式指定一个 段属性。,(2) PTR运算符 赋予“表达式”指定的“类型”,新的类型只在所处 的指令内有效。格式为:类型 PTR 表达式,(3) THIS运算符 该运算符和“=”(或EQU)伪指令连用,把它后 面指定的类型属性或距离属性赋给当前的变量或 标号。常用的格式为: 变量或标号=THIS 属性,(4)圆括号“( )”运算符 用来改变被括运算符的优先级别。,2019/7/29,微机原理,15,4.2 伪指令,4.2.

9、1 符号定义伪指令,1.EQU伪指令 格式:名字 EQU 表达式 功能:是将数值或字符序列与一个指定的名字等价。有以下4种用法。 (1)为常量定义一个符号,以便在程序中使用符号来表示常量。 (2)为变量或标号定义新的类型属性并起一个新的名字。 (3)为由地址表达式指出的任意存储单元定义一个名字。 (4)为汇编语言中的任何符号定义一个新的名字。,2019/7/29,微机原理,16,2.“=”伪指令 “=”伪指令同EQU,但 a,对同一个名称可定义多次 b,表达式的值不得超过16位2进制数。,3. LABEL伪指令 格式:变量或标号名 LABEL 类型 功能:为当前存储单元定义一个指定类型的变量名

10、或标号。,2019/7/29,微机原理,17,4.2.2 变量定义伪指令,常用的变量定义伪指令有DB、DW、DD、DQ、DT 格式: 变量名 DBDWDDDQDT 表达式,2. ASCII字符串,3. 地址表达式,4. ?表达式,5.nDUP 表达式,表达式,1. 数值表达式,2019/7/29,微机原理,18,4.2.3 段定义伪指令,段名 SEGMENT 定位类型组合类型类别 ;语句 段名 ENDS 段名:是所定义段的名称。二个段名必须一致,具有段地址、 偏移地址,以及后面用 括起来的三个可选属性。,2019/7/29,微机原理,19,定位类型: 表示对该段起始边界(段基址、段起始地址)的

11、要求。 BYTE 字节边界,段起始地址可位于任何地方; WORD 字边界,段起始地址能被2整除; PARA 节边界,段起始地址能被16整除,是缺省的定位类型; PAGE 页边界,段起始地址能被256整除; 因为段地址只能被16整除,前二种情况段内偏移地址不一 定从0起。,2019/7/29,微机原理,20,组合类型:表示该段与其他段的组合关系。 NONE: 缺省组合类型,表明本段与其他段逻辑上无关。 PUBLIC:表明本段与其他模块中用PUBLIC说明的同名同类别段 可以相继连成一个段,使用同一个段地址。 STACK: 同 PUBLIC,但此组合类型,将来程序执行时SS与SP 自动被赋予堆栈的

12、栈底。 COMMON:表明连接时该段与其他模块中属于该类别的同名同类 别段可以相互重叠地放在一起,其长度为同名段中最 长者的长度。,2019/7/29,微机原理,21,类别:是用单引号括起来的字符串。连接时,连接程序将不 同模块中相同类别的各段在物理上相应地连接在一起。当程 序只有一个模块时,除堆栈用STACK说明外,其他段的组合 类别与类别均可省略。,MEMORY:连接时被放在所装载程序的最高地址区,当有多个 MEMORY类别段时,只将连接程序遇到的第一个 MEMORY段为MEMORY段,其他的均作COMMON。 AT 表达式:表明该段的段地址由AT后的表达式给定,段内不应 有任何指令语句或

13、含初值的变量定义语句。,2019/7/29,微机原理,22,4.2.4 过程定义伪指令,子程序通常以过程的形式编写。格式如下: 过程名 PROC 类型 RET 过程名 ENDP,2019/7/29,微机原理,23,(1)过程名是为该过程取的名字,具有与语句标号相同的属性, 即具有段地址、偏移地址和类型三类属性。 (2)地址属性是指过程中第一个语句的地址。 (3)类型属性由格式中的类型指明,可以有NEAR和FAR两种。 若类型缺省或为NEAR时,表示该过程只能为所在段的程序调用; 若为FAR时,则可被跨段调用。 (4) RET为过程返回指令,不能省,否则过程将无法返回。 返回指令属于段内返回还是

14、段间返回与过程类型有关。 (5)过程既允许嵌套定义,也允许嵌套调用。,2019/7/29,微机原理,24,4.2.5 模块定义与通信伪指令,1. NAME和END 格式: NAME 模块名 END 标号,2. PUBLIC 格式: PUBLIC 符号表,2019/7/29,微机原理,25,3. EXTRN 格式:EXTRN 符号:类型,,4. INCLUDE 格式:INCLUDE 文件名,2019/7/29,微机原理,26,4.3 宏指令,宏指令是一组汇编语言语句序列的缩写,是程序员事先 自定义的“指令”,此后在宏指令出现的地方,汇编程序 自动把它们替换成相应的语句序列。,宏指令的概念,201

15、9/7/29,微机原理,27,宏指令的使用,(1)宏定义 格式:宏指令名 MACRO 形参,形参 ENDM,(2)宏调用 格式:宏指令名 实参,实参,(3)宏扩展 当汇编程序扫描到源程序中的宏调用时,就把对应宏定义的宏 体指令序列插入到宏调用所在处,用实参替代形参,并在插入 的每条指令前面加上一个“+”号,这一过程就称为宏扩展。,2019/7/29,微机原理,28,用于宏定义的其他伪指令,(3)特殊的宏操作符 % 取表达式操作符 标识字符串或符号中形参操作符 ! 标识普通字符操作符,(1)LOCAL,(2)PURGE,2019/7/29,微机原理,29,重复块宏指令,格式: REPT 整数表达

16、式 ;重复体 ENDM 功能:重复执行重复体,重复次数必须有确定 值且由整数表达式给出。,2019/7/29,微机原理,30,4.4 DOS功能调用和BIOS中断简介,1. 基本的输入与输出,(1)AH=01H,输入一个字符 程序:MOV AH,01H INT 21H 上述指令执行后,系统等待从键盘输入一个字符,一旦输入, 则将该字符显示在屏幕上,并且将该字符放入AL寄存器。 若输入的是 Ctrl-Break,程序自动返回到DOS控制下。,2019/7/29,微机原理,31,(2)AH=02H,输出一个字符 功能:将DL中的字符输出到屏幕。 程序:MOV DL,A MOV AH,02H INT

17、 21H 调用结果,在屏幕上显示字符A。,(3)AH=05H,输出一个字符到打印机 功能:将DL寄存器的字符输出到打印机。 (4)AH=09H,输出字符串 功能:把DS:DX所指单元内容作为字符串首字符,将该字符 串逐个显示在屏幕上,直到遇到串尾标志为止。 (5)AH=0AH,输入字符串,2019/7/29,微机原理,32,文件管理中的最基本的几个功能调用如下: (1)AH=3CH,创建一个文件 入口参数:DS:DX文件名字符串的起始地址 CX文件属性(0读写,1只读)。 出口参数:若建立文件成功,则CF=0,AX=文件句柄; 否则CF=1,AX=错误码(3、4或5), 其中:3表示找不到路径

18、名称, 4表示文件句柄已用完, 5表示存取不允许。,2. 文件管理,2019/7/29,微机原理,33,(2)AH=3DH,打开一个文件 (3)AH=3EH,关闭一个文件 (4)AH=3FH,读取一个文件 (5)AH=40H,写文件,2019/7/29,微机原理,34,3.ROM BIOS 中断调用,BIOS中断调用的方法是:首先按照要求将入口参数 置入相应寄存器,然后写明软件中断指令INT n。 例如,键盘I/O的中断调用类型码是16H,以下指令 实现将从键盘输入字符的ASCII码 致送入AL寄存器中: MOV AH,0 INT 16H,2019/7/29,微机原理,35,4.5 汇编语言程

19、序设计方法,4.5.1 设计步骤,建立数学模型,确立数据结构与算法,绘制流程图及编制程序,调制,2019/7/29,微机原理,36,4.5.2 顺序程序设计,例1:内存中自TABLESQ开始的16个存储单元连续存放着 自然数0到15的平方值,任一数 x(0x15)存放在其后 的 XX 单元,查表求出 x 这个数的平方值,并放到 YY 单元中。 DATA SEGMENT TABLESQ DB 0,1,4,9,16,25,36,49 DB 64,81,100,121,144,169,196,225 XX DB ? YY DB ? DATA ENDS STACK SEGMENT PARA STACK

20、 STACK DB 50 DUP(?) STACK ENDS,2019/7/29,微机原理,37,CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK BEGIN:MOV AX,DATA MOV DS,AX MOV BX,OFFSET TABLESQ MOV AH,0 MOV AL,XX ADD BX,AX MOV AL,BX MOV YY,AL MOV AH,4CH INT 21H CODE ENDS END BEGIN,2019/7/29,微机原理,38,4.5. 3 分支程序设计,分支结构的程序需要由控制转移类指令来实现。 转移指令:能够改变程序指令指

21、针IP的内容(增加、减少), 也可能同时改变CS和IP的内容,从而改变程序的走向。,无条 件转 移指 令,条件 转移 指令,2019/7/29,微机原理,39,(1) 直接转移:指令中直接给出转移的目标指令的标号 a、段内短转移: 给出对于当前指令IP值的带符号的8位位移量,执行时 IP+D8 送 IP, D8=目的偏移地址当前IP, 范围: 128 127 例:JMP SHORT OPR ;OPR是目标指令的语句标 ;号或者标号的表达式。 SHORT是伪指令中的属性运算符,指出转移目标在 128 127 范围内。,1.无条件转移指令,2019/7/29,微机原理,40,b、段内近转移: 给出

22、对于当前IP值的带符号的16位位移量,执行时 IP+D16 送 IP,D16=目的偏移地址当前IP,范围: 32768 32767 例: JMP NEAR PTR OPR JMP OPR ;NEAR可以省略,b、段内近转移: 给出对于当前IP值的带符号的16位位移量,执行时 IP+D16 送 IP,D16=目的偏移地址当前IP,范围: 32768 32767 例: JMP NEAR PTR OPR JMP OPR ;NEAR可以省略,2019/7/29,微机原理,41,(2) 间接转移:指令中给出的是存放转移目标指令的地址。 a、段内间接转移:转移目标的地址在存储器或寄存器中; b、段间间接转

23、移:转移目标的地址只能在存储器中。 例:JMP OPR1;OPR1取决于寻址方式: 段内:寻址方式给出的一个字送IP 段间:寻址方式给出的二个字送CS:IP,2019/7/29,微机原理,42,2.条件转移指令,满足一定条件,则发生转移 常用标志寄存器中的状态标志作为判断条件 a、对于带符号数,常用大于、小于、等于 greater、less、equal 对于无符号数,常用高于、低于、等于 above、below、equal b、都是位移量为8位的相对寻址方式 转移范围 128 127,2019/7/29,微机原理,43,2019/7/29,微机原理,44,4.5. 4 循环程序设计,1.循环程

24、序的构成,任何循环程序都可分为循环初始部分、循环体和循环结束 部分。循环初始部分为进入循环做必要的准备工作。循环 体是程序中重复执行的程序段,由两部分组成。 (1)循环工作部分:用于执行程序的实际任务。 (2)循环参数修改及循环控制部分:为进入下一次循环, 修改地址指针、计数器内容等项参数;检测循环是否已执 行了规定的次数,从而确定继续循环还是结束循环。 (3)循环结束部分:进行循环之后的处理。,2019/7/29,微机原理,45,2.循环程序的类型,循环体的结构依照问题的不同,一般可以分为 两种类型:先判断后处理;先处理后判断。,3.控制循环次数的方法,(1)用计数控制循环。对于循环次数已知

25、的程序, 或是在进入循环前可由某变量确定循环次数的程序, 通常用计数器来控制循环。,2019/7/29,微机原理,46,(2)用条件控制循环。适用于某些循环次数未知的 程序,或循环次数可变的程序,可以由问题给出的 条件控制循环结束。,(3)多重循环程序设计。在实际工作中,一个循 环结构常常难以解决实际应用问题,所以人们引入 了多重循环。这些循环是一层套一层的,因此又称 为循环的嵌套。内层循环必须完全包含于外层循环 内,不允许循环结构交叉。转移指令只能从循环结 构内转出或可在同层循环内转移,而不能从一个循 环结构外转入该循环结构内。,2019/7/29,微机原理,47,4.5.5 子程序设计,1

26、、子程序(过程): 可以被其他程序调用的能完成确定功能的独立程序段 子程序说明文件:子程序应当有自己的说明文件,要说明: a,功能描述; b,用到的寄存器和存储单元; c,入口和出口参数; d,用到的其他子程序。 2、子程序二种形式: a,简单地用标号开头,RET结尾的程序段; b,用过程伪指令定义一段程序为一个过程。,2019/7/29,微机原理,48,3、过程定义伪指令 格式: 过程名 PROC 类型 ;过程体 RET 过程名 ENDP 类型: FAR 可供段间调用 NEAR 只可段内调用,是缺省的类型。,2019/7/29,微机原理,49,4、子程序的使用:调用和返回指令 (1) 调用指

27、令: 段内调用: CALL OPR ;SP-2 SP, IP (SP+1,SP) ; OPR的偏移地址 IP ;OPR是过程名或语句标号 ;段内直接调用 CALL OPR1 ;SP-2 SP, IP (SP+1,SP) ;转移目的的偏移量 IP ;OPR1是由寻址方式给出的转移目的的有效地址 ;段内间接调用,2019/7/29,微机原理,50,(2) 返回指令: 段内返回: RET ;(SP+1,SP)IP ; SP+2 SP 段间返回: RETF ; (SP+1,SP)IP ; SP+2 SP ; (SP+1,SP) CS ; SP+2 SP RET n ;完成返回后,SP+n SP,201

28、9/7/29,微机原理,51,A、 CALL FAR PTR OPR 为段间调用(远调用),但如果OPR 已定义为FAR型,则段间调用指令也可以直接写成 CALL OPR。 B、调用指令和子程序如果不在同一段内时,即使地址通过偏移量 能达到,也是远调用。 C、调用指令和子程序在同一段内时,只有去掉FAR,才是段内调用。 D、根据PROC的类型,返回指令自动编译为RET或RETF。,规则,2019/7/29,微机原理,52,4.6 宏汇编及条件汇编,4.6.1 宏汇编,1. 宏定义 宏定义是用一组伪操作来实现的。 其格式如下。 Macro_name MACRO dumny_parameter_l

29、ist . (宏定义体) ENDM,2019/7/29,微机原理,53,2. 宏调用 经宏定义后的宏指令就可以在源程序中调用。这种对宏指令的 调用称为宏调用,宏调用的格式如下。 macro_name actual_parameter_list 实元表(actual_parameter_list)中的每一项为实元,相互之间用 逗号隔开。宏调用只需要有宏指令名,若宏定义中有形参,宏 调用时必须带有实际参数来替代形参,且一一对应。,3. 宏展开 汇编程序在对源程序汇编时,对每个宏调用作宏展开,即用宏 定义中的宏体取代宏指令名,并用实参一一对应形参,每条插 入的宏指令前加上加号“+”。,2019/7/29,微机原理,54,4.6.2 条件汇编,汇编程序能根据条件把一段源程序包括在汇编语言程序内或 者把它排除在外,这里就用到条件汇编这样的伪操作。 其格式如下: IF XX argument . ;自变量满足给定条件汇编此块 ELSE . ;自变量不满足给定条件汇编此块 ENDIF,2019/7/29,微机原理,55,4.7 小结,变量定义伪指令、段定义伪指令以及其它常用 伪指令的功能和用法。,本章需要掌握的知识点,顺序、分支、循环、子程序等4类结构程序 的特点和编程方法。,汇编语言程序的分段结构和语句格式,表达式和运算符的用法。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1