您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 微机原理与接口技术实用教程04
第四章汇编语言程序设计2020/1/20微机原理2本章要点汇编语言的基本语法规则汇编语言常用的伪指令和DOS功能调用顺序、分支、循环和子程序设计基本方法2020/1/20微机原理3一、汇编语言与机器语言1、机器语言:是计算机能够识别﹑直接执行的语言,这种形式也叫目标代码(机器码),全由0﹑1组成。(高级语言编的源程序在执行时也必须全翻译成机器语言)2、汇编语言:用机器语言指令的助记符来编写程序的语言称汇编语言(阅读理解方便,为程序员提供了完全控制目标代码的手段)。3、源程序:用各种语言编写的程序本身。4、汇编程序与编译程序:汇编语言源程序---》汇编---》目标代码高级语言源程序---》编译---》目标代码5、汇编语言包含:指令让微处理器执行操作的指令伪指令告诉汇编程序如何汇编的指令汇编语言的基本概念2020/1/20微机原理44.1汇编语言的基本语法汇编语言程序数据段代码段堆栈段存放常数、变量以及作为算术运算区和用来作为I/O接口传送数据的工作区堆栈段用来在内存中建立一个堆栈区,以便在中断和过程调用时使用,堆栈还起承上启下的作用,用于模块间参数的传送。2020/1/20微机原理54.1.1语句格式语句格式:名称空格或冒号操作助记符空格操作数;注释标志符的要求:(1)标识符是一个字符串,第一个字符必须是字母、“?”、“@”、或下划线“_”这四种字符中的一个。(2)从第二个开始,可以是字母、数字、“?”、“@”、“_”;(3)一个标识符的长度可以由1~31个字符组成。2020/1/20微机原理64.1.2语句类型与结构1.指令性语句的结构[标号:][前缀]指令助记符[操作数][;注释](1)方括号表示的成分可以选用或缺省。(2)标号是后面紧跟“:”的一个标识符,标号代表该行指令在存储器中的首地址,标号可作为转移指令和调用指令的一个操作数。(3)前缀如重复前缀、总线封锁前缀等。(4)操作数可以是一个、两个或没有,由指令类型决定,若有两个操作数,前面为目的操作数,后面为源操作数,中间用逗号隔开。(5)注释是以“;”开始的字符串,不影响程序的汇编与执行,仅用于增加源程序的可读性。2020/1/20微机原理72.指示性语句的结构[名字]伪指令助记符[操作数][;注释]说明:(1)名字可以是符号常量名、变量名、过程名、段名等,名字后面不能有“:”。(2)伪指令命令助记符共有40多个,按功能不同分成八类,本章介绍的常用五类共20多个。(3)操作数可少到一个没有,多到两个以上,操作数之间须用逗号分隔。2020/1/20微机原理83.宏指令语句的结构[宏名]宏操作助记符[操作数][;注释]说明:(1)宏名即宏指令名,是一标识符,宏名后面不能有“:”(2)宏操作助记符共有8个,分别是MACRO、ENDM、EXITM、LOCAL、REPT、IRPC、IRP、PURGE。(3)其余同指示性语句。2020/1/20微机原理94.1.3汇编语言的表达式1、常数:数值常数---可为各种数制,必须以数字打头,除十进制外,必须用后缀注明,如B﹑O﹑H等。字符串常数---由单引号括起的字符串,用来表示相应的ASCII码,如‘179’是31H﹑37H﹑39H。2、表达式:由操作数和操作符(运算符)构成,表达式的值必须在汇编或连接时就确定。2020/1/20微机原理104.1.4汇编语言的运算符算术运算符逻辑运算符关系运算符分析运算符分离运算符组合运算符2020/1/20微机原理111.算术运算符2.逻辑运算符3.关系运算符+﹑-﹑*﹑/(整除)﹑MOD(求二整数相除的余数)AND﹑OR﹑NOT﹑XOR按位进行EQ(相等)﹑NE(不等)﹑LT(小于)﹑GT(大于)﹑LE(小于等于)﹑GE(大于等于),关系成立返回全1,关系不成立返回全0(16位)2020/1/20微机原理123.分析运算符(1)SEG运算符取段地址运算符,该运算返回变量或标号所在段的段地址(字常量)。(2)OFFSET运算符取段内偏移地址符,该运算返回变量或标号所在段的段内偏移地址。(3)TYPE运算符取类型属性运算符,该运算返回变量或标号的类型值。若运算对象是标号,则返回标号的距离属性值,若运算对象是变量,则返回变量类型所占字节数。(4)LENGTH运算符取数组变量元素个数运算符,如果变量是用重复数据操作符DUP说明的,则返回DUP前面的数值(即重复次数);如果没有DUP说明,则返回值总是“1”。2020/1/20微机原理135.分离运算符(1)LOW运算符取地址表达式或16位绝对值低8位。(2)HIGH运算符取地址表达式或16位绝对值高8位。(3)SHORT运算符当转移指令的目标地址与该指令之间的距离在-128~+127字节范围内,可用SHORT运算符进行说明,以保证汇编程序能为该指令生成最短的机器码,从而提高运行效率。2020/1/20微机原理146.组合运算符(1)“:”运算符用来临时给变量、标号或地址表达式指定一个段属性。(2)PTR运算符赋予“表达式”指定的“类型”,新的类型只在所处的指令内有效。格式为:类型PTR表达式(3)THIS运算符该运算符和“=”(或EQU)伪指令连用,把它后面指定的类型属性或距离属性赋给当前的变量或标号。常用的格式为:变量或标号=THIS属性(4)圆括号“()”运算符用来改变被括运算符的优先级别。2020/1/20微机原理154.2伪指令4.2.1符号定义伪指令1.EQU伪指令格式:名字EQU表达式功能:是将数值或字符序列与一个指定的名字等价。有以下4种用法。(1)为常量定义一个符号,以便在程序中使用符号来表示常量。(2)为变量或标号定义新的类型属性并起一个新的名字。(3)为由地址表达式指出的任意存储单元定义一个名字。(4)为汇编语言中的任何符号定义一个新的名字。2020/1/20微机原理162.“=”伪指令“=”伪指令同EQU,但a,对同一个名称可定义多次b,表达式的值不得超过16位2进制数。3.LABEL伪指令格式:变量或标号名LABEL类型功能:为当前存储单元定义一个指定类型的变量名或标号。2020/1/20微机原理174.2.2变量定义伪指令常用的变量定义伪指令有DB、DW、DD、DQ、DT格式:[变量名]{DB│DW│DD│DQ│DT}〈表达式〉2.ASCII字符串3.地址表达式4.?表达式5.〈n〉DUP〈表达式〉表达式1.数值表达式2020/1/20微机原理184.2.3段定义伪指令段名SEGMENT[定位类型][组合类型][`类别`]┇;语句段名ENDS段名:是所定义段的名称。二个段名必须一致,具有段地址、偏移地址,以及后面用[]括起来的三个可选属性。2020/1/20微机原理19定位类型:表示对该段起始边界(段基址、段起始地址)的要求。BYTE字节边界,段起始地址可位于任何地方;WORD字边界,段起始地址能被2整除;PARA节边界,段起始地址能被16整除,是缺省的定位类型;PAGE页边界,段起始地址能被256整除;因为段地址只能被16整除,前二种情况段内偏移地址不一定从0起。2020/1/20微机原理20组合类型:表示该段与其他段的组合关系。NONE:缺省组合类型,表明本段与其他段逻辑上无关。PUBLIC:表明本段与其他模块中用PUBLIC说明的同名同类别段可以相继连成一个段,使用同一个段地址。STACK:同PUBLIC,但此组合类型,将来程序执行时SS与SP自动被赋予堆栈的栈底。COMMON:表明连接时该段与其他模块中属于该类别的同名同类别段可以相互重叠地放在一起,其长度为同名段中最长者的长度。2020/1/20微机原理21`类别`:是用单引号括起来的字符串。连接时,连接程序将不同模块中相同`类别`的各段在物理上相应地连接在一起。当程序只有一个模块时,除堆栈用STACK说明外,其他段的组合类别与类别均可省略。MEMORY:连接时被放在所装载程序的最高地址区,当有多个MEMORY类别段时,只将连接程序遇到的第一个MEMORY段为MEMORY段,其他的均作COMMON。AT表达式:表明该段的段地址由AT后的表达式给定,段内不应有任何指令语句或含初值的变量定义语句。2020/1/20微机原理224.2.4过程定义伪指令子程序通常以过程的形式编写。格式如下:〈过程名〉PROC[类型]┆RET〈过程名〉ENDP2020/1/20微机原理23(1)过程名是为该过程取的名字,具有与语句标号相同的属性,即具有段地址、偏移地址和类型三类属性。(2)地址属性是指过程中第一个语句的地址。(3)类型属性由格式中的类型指明,可以有NEAR和FAR两种。若类型缺省或为NEAR时,表示该过程只能为所在段的程序调用;若为FAR时,则可被跨段调用。(4)RET为过程返回指令,不能省,否则过程将无法返回。返回指令属于段内返回还是段间返回与过程类型有关。(5)过程既允许嵌套定义,也允许嵌套调用。2020/1/20微机原理244.2.5模块定义与通信伪指令1.NAME和END格式:[NAME〈模块名〉]┆END[标号]2.PUBLIC格式:PUBLIC〈符号表〉2020/1/20微机原理253.EXTRN格式:EXTRN〈符号:类型〉[,…]4.INCLUDE格式:INCLUDE〈文件名〉2020/1/20微机原理264.3宏指令宏指令是一组汇编语言语句序列的缩写,是程序员事先自定义的“指令”,此后在宏指令出现的地方,汇编程序自动把它们替换成相应的语句序列。宏指令的概念2020/1/20微机原理27宏指令的使用(1)宏定义格式:〈宏指令名〉MACRO[形参][,形参]…┆ENDM(2)宏调用格式:〈宏指令名〉[实参][,实参]…(3)宏扩展当汇编程序扫描到源程序中的宏调用时,就把对应宏定义的宏体指令序列插入到宏调用所在处,用实参替代形参,并在插入的每条指令前面加上一个“+”号,这一过程就称为宏扩展。2020/1/20微机原理28用于宏定义的其他伪指令(3)特殊的宏操作符%取表达式操作符&标识字符串或符号中形参操作符!标识普通字符操作符(1)LOCAL(2)PURGE2020/1/20微机原理29重复块宏指令格式:REPT〈整数表达式〉┆;重复体ENDM功能:重复执行重复体,重复次数必须有确定值且由整数表达式给出。2020/1/20微机原理304.4DOS功能调用和BIOS中断简介1.基本的输入与输出(1)AH=01H,输入一个字符程序:MOVAH,01HINT21H上述指令执行后,系统等待从键盘输入一个字符,一旦输入,则将该字符显示在屏幕上,并且将该字符放入AL寄存器。若输入的是Ctrl-Break,程序自动返回到DOS控制下。2020/1/20微机原理31(2)AH=02H,输出一个字符功能:将DL中的字符输出到屏幕。程序:MOVDL,’A’MOVAH,02HINT21H调用结果,在屏幕上显示字符A。(3)AH=05H,输出一个字符到打印机功能:将DL寄存器的字符输出到打印机。(4)AH=09H,输出字符串功能:把DS:DX所指单元内容作为字符串首字符,将该字符串逐个显示在屏幕上,直到遇到串尾标志‘$’为止。(5)AH=0AH,输入字符串2020/1/20微机原理32文件管理中的最基本的几个功能调用如下:(1)AH=3CH,创建一个文件入口参数:DS:DX←文件名字符串的起始地址CX←文件属性(0读写,1只读)。出口参数:若建立文件成功,则CF=0,AX=文件句柄;否则CF=1,AX=错误码(3、4或5),其中:3表示找不到路径名称,4表示文件句柄已用完,5表示存取不允许。2.文件管理2020/1/20微机原理33(2)AH=3DH,打开一个文件(3)AH=3EH,关闭一个文件(4)AH=3FH,读取一
本文标题:微机原理与接口技术实用教程04
链接地址:https://www.777doc.com/doc-3204236 .html