




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章 汇编语言程序设计,2019/9/6,微机原理,2,本章要点,汇编语言的基本语法规则,汇编语言常用的伪指令和DOS功能调用,顺序、分支、循环和子程序设计基本方法,2019/9/6,微机原理,3,一、汇编语言与机器语言 1、机器语言:是计算机能够识别直接执行的语言,这种形式也叫 目标代码(机器码),全由01组成。(高级语言编的源程序在执行 时也必须全翻译成机器语言) 2、汇编语言:用机器语言指令的助记符来编写程序的语言称汇编语言 (阅读理解方便,为程序员提供了完全控制目标代码的手段)。 3、源程序:用各种语言编写的程序本身。 4、汇编程序与编译程序: 汇编语言源程序-汇编-目标代码 高级语言源程序-编译-目标代码 5、汇编语言包含:指令 让微处理器执行操作的指令 伪指令 告诉汇编程序如何汇编的指令,汇编语言的基本概念,2019/9/6,微机原理,4,4.1 汇编语言的基本语法,汇编语言程序,数据段,代码段,堆栈段,存放常数、变量以及作为 算术运算区和用来作为I/O 接口传送数据的工作区,堆栈段用来在内存中建立 一个堆栈区,以便在中断 和过程调用时使用,堆栈 还起承上启下的作用,用 于模块间参数的传送。,2019/9/6,微机原理,5,4.1.1 语句格式,语句格式: 名称 空格或冒号 操作助记符 空格 操作数 ;注释,标志符的要求: (1)标识符是一个字符串,第一个字符必须是字母、“?”、“”、 或下划线“_”这四种字符中的一个。 (2)从第二个开始,可以是字母、数字、“?”、“”、“_”; (3)一个标识符的长度可以由131个字符组成。,2019/9/6,微机原理,6,4.1.2 语句类型与结构,1.指令性语句的结构 标号:前缀 指令助记符 操作数;注释 (1)方括号表示的成分可以选用或缺省。 (2)标号是后面紧跟“:”的一个标识符,标号代表该行指令在存 储器中的首地址,标号可作为转移指令和调用指令的一个操作数。 (3)前缀如重复前缀、总线封锁前缀等。 (4)操作数可以是一个、两个或没有,由指令类型决定,若有两 个操作数,前面为目的操作数,后面为源操作数,中间用逗号隔开。 (5)注释是以“;”开始的字符串,不影响程序的汇编与执行,仅 用于增加源程序的可读性。,2019/9/6,微机原理,7,2. 指示性语句的结构 名字 伪指令助记符 操作数;注释 说明: (1)名字可以是符号常量名、变量名、过程名、 段名等,名字后面不能有“:”。 (2)伪指令命令助记符共有40多个,按功能不同分成 八类,本章介绍的常用五类共20多个。 (3)操作数可少到一个没有,多到两个以上,操作数 之间须用逗号分隔。,2019/9/6,微机原理,8,3. 宏指令语句的结构 宏名 宏操作助记符 操作数;注释 说明: (1)宏名即宏指令名,是一标识符,宏名后面不能有“:” (2)宏操作助记符共有8个,分别是MACRO、ENDM、 EXITM、LOCAL、REPT、IRPC、IRP、PURGE。 (3) 其余同指示性语句。,2019/9/6,微机原理,9,4.1.3 汇编语言的表达式,1、常数: 数值常数-可为各种数制,必须以数字打头,除十进制外, 必须用后缀注明,如BOH等。 字符串常数-由单引号括起的字符串,用来表示相应的ASCII码, 如179是31H37H39H。 2、表达式: 由操作数和操作符(运算符)构成,表达式的值必 须在汇编或连接时就确定。,2019/9/6,微机原理,10,4.1.4 汇编语言的运算符,算术运算符,逻辑运算符,关系运算符,分析运算符,分离运算符,组合运算符,2019/9/6,微机原理,11,1.算术运算符,2.逻辑运算符,3.关系运算符,+-*/(整除) MOD(求二整数相除的 余数),ANDORNOT XOR按位进行,EQ(相等)NE(不等) LT(小于)GT(大于) LE(小于等于)GE(大于 等于),关系成立返回全1, 关系不成立返回全0(16位),2019/9/6,微机原理,12,3.分析 运算符,(1)SEG运算符 取段地址运算符,该运算返回变量或标号 所在段的段地址(字常量)。,(2)OFFSET运算符 取段内偏移地址符,该运算返回变量或标号 所在段的段内偏移地址。,(3)TYPE运算符 取类型属性运算符,该运算返回变量或标号 的类型值。若运算对象是标号,则返回标号 的距离属性值,若运算对象是变量,则返回 变量类型所占字节数。,(4)LENGTH运算符 取数组变量元素个数运算符,如果变量是 用重复数据操作符DUP说明的,则返回DUP 前面的数值(即重复次数);如果没有DUP 说明,则返回值总是“1”。,2019/9/6,微机原理,13,5.分离 运算符,(1)LOW运算符 取地址表达式或16位绝对值低8位。,(2)HIGH运算符 取地址表达式或16位绝对值高8位。,(3)SHORT运算符 当转移指令的目标地址与该指令之 间的距离在-128+127字节范围内 ,可用SHORT运算符进行说明,以 保证汇编程序能为该指令生成最短的 机器码,从而提高运行效率。,2019/9/6,微机原理,14,6.组合 运算符,(1)“:”运算符 用来临时给变量、标号或地址表达式指定一个 段属性。,(2) PTR运算符 赋予“表达式”指定的“类型”,新的类型只在所处 的指令内有效。格式为:类型 PTR 表达式,(3) THIS运算符 该运算符和“=”(或EQU)伪指令连用,把它后 面指定的类型属性或距离属性赋给当前的变量或 标号。常用的格式为: 变量或标号=THIS 属性,(4)圆括号“( )”运算符 用来改变被括运算符的优先级别。,2019/9/6,微机原理,15,4.2 伪指令,4.2.1 符号定义伪指令,1.EQU伪指令 格式:名字 EQU 表达式 功能:是将数值或字符序列与一个指定的名字等价。有以下4种用法。 (1)为常量定义一个符号,以便在程序中使用符号来表示常量。 (2)为变量或标号定义新的类型属性并起一个新的名字。 (3)为由地址表达式指出的任意存储单元定义一个名字。 (4)为汇编语言中的任何符号定义一个新的名字。,2019/9/6,微机原理,16,2.“=”伪指令 “=”伪指令同EQU,但 a,对同一个名称可定义多次 b,表达式的值不得超过16位2进制数。,3. LABEL伪指令 格式:变量或标号名 LABEL 类型 功能:为当前存储单元定义一个指定类型的变量名或标号。,2019/9/6,微机原理,17,4.2.2 变量定义伪指令,常用的变量定义伪指令有DB、DW、DD、DQ、DT 格式: 变量名 DBDWDDDQDT 表达式,2. ASCII字符串,3. 地址表达式,4. ?表达式,5.nDUP 表达式,表达式,1. 数值表达式,2019/9/6,微机原理,18,4.2.3 段定义伪指令,段名 SEGMENT 定位类型组合类型类别 ;语句 段名 ENDS 段名:是所定义段的名称。二个段名必须一致,具有段地址、 偏移地址,以及后面用 括起来的三个可选属性。,2019/9/6,微机原理,19,定位类型: 表示对该段起始边界(段基址、段起始地址)的要求。 BYTE 字节边界,段起始地址可位于任何地方; WORD 字边界,段起始地址能被2整除; PARA 节边界,段起始地址能被16整除,是缺省的定位类型; PAGE 页边界,段起始地址能被256整除; 因为段地址只能被16整除,前二种情况段内偏移地址不一 定从0起。,2019/9/6,微机原理,20,组合类型:表示该段与其他段的组合关系。 NONE: 缺省组合类型,表明本段与其他段逻辑上无关。 PUBLIC:表明本段与其他模块中用PUBLIC说明的同名同类别段 可以相继连成一个段,使用同一个段地址。 STACK: 同 PUBLIC,但此组合类型,将来程序执行时SS与SP 自动被赋予堆栈的栈底。 COMMON:表明连接时该段与其他模块中属于该类别的同名同类 别段可以相互重叠地放在一起,其长度为同名段中最 长者的长度。,2019/9/6,微机原理,21,类别:是用单引号括起来的字符串。连接时,连接程序将不 同模块中相同类别的各段在物理上相应地连接在一起。当程 序只有一个模块时,除堆栈用STACK说明外,其他段的组合 类别与类别均可省略。,MEMORY:连接时被放在所装载程序的最高地址区,当有多个 MEMORY类别段时,只将连接程序遇到的第一个 MEMORY段为MEMORY段,其他的均作COMMON。 AT 表达式:表明该段的段地址由AT后的表达式给定,段内不应 有任何指令语句或含初值的变量定义语句。,2019/9/6,微机原理,22,4.2.4 过程定义伪指令,子程序通常以过程的形式编写。格式如下: 过程名 PROC 类型 RET 过程名 ENDP,2019/9/6,微机原理,23,(1)过程名是为该过程取的名字,具有与语句标号相同的属性, 即具有段地址、偏移地址和类型三类属性。 (2)地址属性是指过程中第一个语句的地址。 (3)类型属性由格式中的类型指明,可以有NEAR和FAR两种。 若类型缺省或为NEAR时,表示该过程只能为所在段的程序调用; 若为FAR时,则可被跨段调用。 (4) RET为过程返回指令,不能省,否则过程将无法返回。 返回指令属于段内返回还是段间返回与过程类型有关。 (5)过程既允许嵌套定义,也允许嵌套调用。,2019/9/6,微机原理,24,4.2.5 模块定义与通信伪指令,1. NAME和END 格式: NAME 模块名 END 标号,2. PUBLIC 格式: PUBLIC 符号表,2019/9/6,微机原理,25,3. EXTRN 格式:EXTRN 符号:类型,,4. INCLUDE 格式:INCLUDE 文件名,2019/9/6,微机原理,26,4.3 宏指令,宏指令是一组汇编语言语句序列的缩写,是程序员事先 自定义的“指令”,此后在宏指令出现的地方,汇编程序 自动把它们替换成相应的语句序列。,宏指令的概念,2019/9/6,微机原理,27,宏指令的使用,(1)宏定义 格式:宏指令名 MACRO 形参,形参 ENDM,(2)宏调用 格式:宏指令名 实参,实参,(3)宏扩展 当汇编程序扫描到源程序中的宏调用时,就把对应宏定义的宏 体指令序列插入到宏调用所在处,用实参替代形参,并在插入 的每条指令前面加上一个“+”号,这一过程就称为宏扩展。,2019/9/6,微机原理,28,用于宏定义的其他伪指令,(3)特殊的宏操作符 % 取表达式操作符 标识字符串或符号中形参操作符 ! 标识普通字符操作符,(1)LOCAL,(2)PURGE,2019/9/6,微机原理,29,重复块宏指令,格式: REPT 整数表达式 ;重复体 ENDM 功能:重复执行重复体,重复次数必须有确定 值且由整数表达式给出。,2019/9/6,微机原理,30,4.4 DOS功能调用和BIOS中断简介,1. 基本的输入与输出,(1)AH=01H,输入一个字符 程序:MOV AH,01H INT 21H 上述指令执行后,系统等待从键盘输入一个字符,一旦输入, 则将该字符显示在屏幕上,并且将该字符放入AL寄存器。 若输入的是 Ctrl-Break,程序自动返回到DOS控制下。,2019/9/6,微机原理,31,(2)AH=02H,输出一个字符 功能:将DL中的字符输出到屏幕。 程序:MOV DL,A MOV AH,02H INT 21H 调用结果,在屏幕上显示字符A。,(3)AH=05H,输出一个字符到打印机 功能:将DL寄存器的字符输出到打印机。 (4)AH=09H,输出字符串 功能:把DS:DX所指单元内容作为字符串首字符,将该字符 串逐个显示在屏幕上,直到遇到串尾标志为止。 (5)AH=0AH,输入字符串,2019/9/6,微机原理,32,文件管理中的最基本的几个功能调用如下: (1)AH=3CH,创建一个文件 入口参数:DS:DX文件名字符串的起始地址 CX文件属性(0读写,1只读)。 出口参数:若建立文件成功,则CF=0,AX=文件句柄; 否则CF=1,AX=错误码(3、4或5), 其中:3表示找不到路径名称, 4表示文件句柄已用完, 5表示存取不允许。,2. 文件管理,2019/9/6,微机原理,33,(2)AH=3DH,打开一个文件 (3)AH=3EH,关闭一个文件 (4)AH=3FH,读取一个文件 (5)AH=40H,写文件,2019/9/6,微机原理,34,3.ROM BIOS 中断调用,BIOS中断调用的方法是:首先按照要求将入口参数 置入相应寄存器,然后写明软件中断指令INT n。 例如,键盘I/O的中断调用类型码是16H,以下指令 实现将从键盘输入字符的ASCII码 致送入AL寄存器中: MOV AH,0 INT 16H,2019/9/6,微机原理,35,4.5 汇编语言程序设计方法,4.5.1 设计步骤,建立数学模型,确立数据结构与算法,绘制流程图及编制程序,调制,2019/9/6,微机原理,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 STACK DB 50 DUP(?) STACK ENDS,2019/9/6,微机原理,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/9/6,微机原理,38,4.5. 3 分支程序设计,分支结构的程序需要由控制转移类指令来实现。 转移指令:能够改变程序指令指针IP的内容(增加、减少), 也可能同时改变CS和IP的内容,从而改变程序的走向。,无条 件转 移指 令,条件 转移 指令,2019/9/6,微机原理,39,(1) 直接转移:指令中直接给出转移的目标指令的标号 a、段内短转移: 给出对于当前指令IP值的带符号的8位位移量,执行时 IP+D8 送 IP, D8=目的偏移地址当前IP, 范围: 128 127 例:JMP SHORT OPR ;OPR是目标指令的语句标 ;号或者标号的表达式。 SHORT是伪指令中的属性运算符,指出转移目标在 128 127 范围内。,1.无条件转移指令,2019/9/6,微机原理,40,b、段内近转移: 给出对于当前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/9/6,微机原理,41,(2) 间接转移:指令中给出的是存放转移目标指令的地址。 a、段内间接转移:转移目标的地址在存储器或寄存器中; b、段间间接转移:转移目标的地址只能在存储器中。 例:JMP OPR1;OPR1取决于寻址方式: 段内:寻址方式给出的一个字送IP 段间:寻址方式给出的二个字送CS:IP,2019/9/6,微机原理,42,2.条件转移指令,满足一定条件,则发生转移 常用标志寄存器中的状态标志作为判断条件 a、对于带符号数,常用大于、小于、等于 greater、less、equal 对于无符号数,常用高于、低于、等于 above、below、equal b、都是位移量为8位的相对寻址方式 转移范围 128 127,2019/9/6,微机原理,43,2019/9/6,微机原理,44,4.5. 4 循环程序设计,1.循环程序的构成,任何循环程序都可分为循环初始部分、循环体和循环结束 部分。循环初始部分为进入循环做必要的准备工作。循环 体是程序中重复执行的程序段,由两部分组成。 (1)循环工作部分:用于执行程序的实际任务。 (2)循环参数修改及循环控制部分:为进入下一次循环, 修改地址指针、计数器内容等项参数;检测循环是否已执 行了规定的次数,从而确定继续循环还是结束循环。 (3)循环结束部分:进行循环之后的处理。,2019/9/6,微机原理,45,2.循环程序的类型,循环体的结构依照问题的不同,一般可以分为 两种类型:先判断后处理;先处理后判断。,3.控制循环次数的方法,(1)用计数控制循环。对于循环次数已知的程序, 或是在进入循环前可由某变量确定循环次数的程序, 通常用计数器来控制循环。,2019/9/6,微机原理,46,(2)用条件控制循环。适用于某些循环次数未知的 程序,或循环次数可变的程序,可以由问题给出的 条件控制循环结束。,(3)多重循环程序设计。在实际工作中,一个循 环结构常常难以解决实际应用问题,所以人们引入 了多重循环。这些循环是一层套一层的,因此又称 为循环的嵌套。内层循环必须完全包含于外层循环 内,不允许循环结构交叉。转移指令只能从循环结 构内转出或可在同层循环内转移,而不能从一个循 环结构外转入该循环结构内。,2019/9/6,微机原理,47,4.5.5 子程序设计,1、子程序(过程): 可以被其他程序调用的能完成确定功能的独立程序段 子程序说明文件:子程序应当有自己的说明文件,要说明: a,功能描述; b,用到的寄存器和存储单元; c,入口和出口参数; d,用到的其他子程序。 2、子程序二种形式: a,简单地用标号开头,RET结尾的程序段; b,用过程伪指令定义一段程序为一个过程。,2019/9/6,微机原理,48,3、过程定义伪指令 格式: 过程名 PROC 类型 ;过程体 RET 过程名 ENDP 类型: FAR 可供段间调用 NEAR 只可段内调用,是缺省的类型。,2019/9/6,微机原理,49,4、子程序的使用:调用和返回指令 (1) 调用指令: 段内调用: CALL OPR ;SP-2 SP, IP (SP+1,SP) ; OPR的偏移地址 IP ;OPR是过程名或语句标号 ;段内直接调用 CALL OPR1 ;SP-2 SP, IP (SP+1,SP) ;转移目的的偏移量 IP ;OPR1是由寻址方式给出的转移目的的有效地址 ;段内间接调用,2019/9/6,微机原理,50,(2) 返回指令: 段内返回: RET ;(SP+1,SP)IP ; SP+2 SP 段间返回: RETF ; (SP+1,SP)IP ; SP+2 SP ; (SP+1,SP) CS ; SP+2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 碳化钙及超细(纳米)晶硬质合金项目可行性研究报告
- 特种聚芳酯项目可行性研究报告
- 2025年中小学开展九一八防空演练方案4篇
- 品牌厨具产品经销合同
- 防欺诈骗保知识培训总结课件
- 防控知识培训与监督课件
- 互联网彩票市场发展态势分析
- 数据共享协议重要注意事项
- 上海租房协议3篇
- 解除劳动合同通知书(员工提前通知解除)5篇
- 委托进口代理合同
- 一篇入门EPC总承包项目的税务筹划
- 宝安区人民医院药品目录西药
- 满堂脚手架计算书
- 【大单元教学】微专题 牛顿运动定律 课时 省赛获奖
- 岳阳楼记翻译
- 护理不良事件培训
- 广告策划与创意课件改
- (完整word版)理论力学答案(谢传峰版)
- 中国产业结构与布局的历史演变
- GB/T 40800-2021铸钢件焊接工艺评定规范
评论
0/150
提交评论