高级汇编语言技术教学课件.ppt_第1页
高级汇编语言技术教学课件.ppt_第2页
高级汇编语言技术教学课件.ppt_第3页
高级汇编语言技术教学课件.ppt_第4页
高级汇编语言技术教学课件.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言程序设计 assemblylanguageprogramming 第七章高级汇编语言技术 2 教学重点 在掌握基本的汇编语言程序设计方法之后进一步学习如何提高编程效率的各种实用方法 宏汇编重复汇编条件汇编 统称宏结构 宏 macro 是汇编语言的一个特点 它是与子程序类似又独具特色的另一种简化源程序的方法 3 宏 具有宏名的一段汇编语句序列 宏定义时书写宏指令 这段汇编语句序列的缩写 宏调用时书写宏展开 宏指令处用宏体代替的过程 宏汇编时实现 7 1宏汇编 宏的使用有三个步骤 宏定义 宏调用 宏展开 4 macro namemacro 哑元表 宏定义体 endm 宏定义 哑元相当于c语言函数定义中形参 宏的参数功能强大 颇具特色 宏定义体可以是任何合法的汇编语句 既可以是硬指令序列 又可以是伪指令序列 也可以使用已经定义过的宏指令或者嵌套进行宏定义 配合宏 还有宏操作符和与宏有关的伪指令 7 1 1宏的使用过程 5 宏定义 mainbeginmacro 定义名为mainbegin的宏 无参数movax data 宏定义体movds axendm 宏定义结束mainendmacroretnum 带有哑元retnummoval retnum 宏定义中使用参数movah 4chint21hendm 宏注释符 7 1 1宏的使用过程 6 macro name 实元表 宏调用 start mainbegin 宏调用 建立ds内容dispmsgstring 宏调用 显示字符串mainend0 宏调用 返回dosendstart宏调用的实质 在汇编过程中进行宏展开 实元相当于c语言函数调用中的实参 对宏指令的调用必须先定义后调用 7 1 1宏的使用过程 7 在汇编时 用宏定义体的代码序列替代宏指令的过程 宏展开 宏展开的具体过程 当汇编程序扫描源程序遇到已有定义的宏调用时 即用相应的宏定义体取代源程序的宏指令 同时用位置匹配的实参对形参进行取代 若实元数 哑元数 则多余的实元无效 若实元数 哑元数 则多余的哑元作 空null 处理 7 1 1宏的使用过程 8 宏展开举例 start mainbegin 宏指令1movax data 宏展开1movds axmainend0 宏指令1moval 0 宏展开1movah 4ch1int21 7 1 1宏的使用过程 9 宏的参数使用非常灵活 宏的参数 宏定义时 可以无参数 例如 mainbegin可以带有一个参数 例如 mainend也可以具有多个参数 例如 例7 1实际参数可以是常数 变量 存储单元 指令 操作码 或它们的一部分 也可以是表达式 7 1 2宏的参数 10 multiplymacroopr1 opr2 resultpushdxpushaxmovax opr1imulopr2movresult axpopaxpopdxendm 宏展开 1pushdx1pushax1movax cx1imulvar1movxyz bx ax1popax1popdx 例7 1两个字相乘 多个变元 multiplycx var xyz bx 7 1 2宏的参数 宏定义 宏调用 11 saveregmacropushaxpushbxpushcxpushdxpushsipushdiendm 宏调用 savereg宏展开 1pushax1pushbx1pushcx1pushdx1pushsi1pushdi 例7 2保存寄存器 无参数 7 1 2宏的参数 宏定义 12 宏定义 shrotmacroop od numpushcxmovcl numopod clpopcxendm 宏展开 1pushcx1movcl 71shlax cl1popcx1pushcx1movcl 61rorax cl1popcx 例7 3统一循环移位和移位指令 变元是操作码 宏调用 shrotshl ax 7shrotror x 6 7 1 2宏的参数 13 宏定义 shiftmacroop od numpushcxmovcl nums opod clpopcxendm 例7 4统一移位指令 变元是操作码的一部分 宏调用 shiftal ax 4shifthrax 4 宏展开 1pushcx1movcl 41salax cl1popcx1pushcx1movcl 41shrax cl1popcx 7 1 2宏的参数 14 与宏有关的伪操作 局部标号伪操作 local标号列表宏定义体采用了标号 应使用local加以说明 它必须是宏定义macro语句之后的第一条语句 宏展开时 local定义的标号也由 0000 ffff替代宏定义删除伪操作 purge宏名表不需要某个宏定义时 可以把它删除宏定义退出伪操作 exitm伪指令exitm表示结束当前宏调用的展开 7 1 3与宏有关的伪操作 15 宏定义 absolmacrooperlocalnextcmpoper 0jgenextnegopernext endm宏调用 absolvar absolbx 宏展开 1cmpvar 01jge 00001negvar 0000 1cmpbx 01jge 00011negbx1 0001 例7 5求绝对值 使用local伪操作 7 1 3与宏有关的伪操作 16 宏定义 addmacroopr1 opr2 result endm宏调用 addxx yy zzpurgeadd 取消宏定义 宏指令名与指令助记符或伪操作名相同 宏指令的优先级最高 7 1 3与宏有关的伪操作 17 宏注释符 用于表示在宏定义中的注释 采用这个符号的注释 在宏展开时不出现 替换操作符 用于将参数与其他字符分开 如果参数紧接在其他字符之前或之后 或者参数出现在带引号的字符串中 就必须使用该伪操作符 表达式操作符 用在宏调用中 表示将后跟的一个表达式的值作为实参 而不是将表达式本身作为参数 宏操作符 7 1 4宏操作符 18 字符串传递操作符 用于括起字符串 在宏调用中 如果传递的字符串实参数含有逗号 空格等间隔符号 则必须用这对操作符 以保证字符串的完整 转义操作符 用于指示其后的一个字符作为一般字符 不含特殊意义 宏操作符 7 1 4宏操作符 19 例7 6 使用 注释 qmacrom displayamessage每次展开保留此注释 misastring每次展开不保留此注释 endm 7 1 4宏操作符 20 leapmacrocond labj condlabendm 宏定义 宏调用 leapz there leapnz here 宏展开 1jzthere 1jnzhere 例7 7 变元是操作码的一部分 7 1 4宏操作符 21 msggenmacrolab num xyzlab numdb hellomr xyz endm 宏定义 宏调用 msggenmsg 1 wang 宏展开 例7 8 变元是ascii串 msg1db hellomr wang 7 1 4宏操作符 22 宏定义data1macroa bdwa bendm宏调用x 10y 20data1 x ydata2x y 例7 9 使用 宏展开1dw10 201dwx y 7 1 4宏操作符 23 dstringmacrostringdb string 0dh 0ah endm 宏定义 宏调用 dstringdstring 宏展开 1db thisisaexample 0dh 0ah 1db 0 number 10 0dh 0ah 例7 10 使用和 传递操作符 转义操作符 7 1 4宏操作符 24 7 1 5在宏定义内使用宏 宏定义体中可以使用宏 有两种情形 宏定义中可以使用宏调用 前提是必须先定义后调用宏体中包含宏定义 25 例7 11在宏定义内使用宏调用 宏定义 difmacrox ymovax xsubax yendmdifsqrmacrox y zpushdxpushaxdifx yimulaxmovz axpopaxpopdxendm 宏调用 difsqrv1 v2 v3宏展开 1pushdx1pushax2movax v12subax v21imulax1movz ax1popax1popdx 26 例7 12在宏定义内使用宏调用 宏定义 dfmacmacromnam opmnammacrox y zpushaxmovax xopax ymovz axpopaxendmendm 宏调用 dfmacaddition adddfmaclogor or 则形成两条宏指令 addition logor 宏调用宏展开 addtionx y z1pushax1movax x1addax y1movz ax1popaxlogorx y z1pushax1movax x1orax y1movz ax1popax 27 源程序 asm文件 经汇编程序汇编 主要输出是obj文件和lst文件 列表文件 lst文件同时列出源程序和机器语言程序清单 并给出符号表 lall 在lst清单中列出宏展开后的全部语句 sall 在lst清单中不列出任何宏展开后的语句 xall 只列出产生目标代码的语句page256 257例7 12 列表伪操作 7 1 6列表伪操作 28 1 缩短源代码2 扩充指令集3 改变某些助记符的意义 汇编语言程序指令 指令伪指令 伪操作 宏指令 宏指令的用途 7 1宏汇编 29 子程序 在程序执行期间被调用 只占用自身大小的一段空间 主程序 callsub1 callsub1 callsub1 子程序sub1 ret 宏调用与子程序调用的区别 7 1宏汇编 30 宏定义 宏调用 宏展开 qmacrox yendm qa b qc d qe f 宏调用 在汇编期间被展开 每调用一次就把宏定义体展开一次 7 1宏汇编 31 比较 仅是源程序级的简化 宏调用在汇编时进行程序语句的展开 不需要返回 不减小目标程序 执行速度没有改变通过形参 实参结合实现参数传递 简捷直观 灵活多变 还是目标程序级的简化 子程序调用在执行时由call指令转向 ret指令返回 形成的目标代码较短 执行速度减慢需要利用寄存器 存储单元或堆栈等传递参数 宏 子程序 7 1宏汇编 32 7 2重复汇编 重复汇编指在汇编过程中 重复展开一段 基本 相同的语句重复汇编没有名字 不能被调用重复汇编常用在宏定义体中 也可以在一般汇编语句中使用 重复汇编伪指令有三个 rept 按参数值重复irp 按参数个数重复irpc 按参数的字符个数重复最后 用endm结束 7 2重复汇编 33 rept格式 rept表达式 重复块endm 例7 13x 0rept10x x 1dbxendm 1db11db21db3 1db10 汇编后 7 2 1重复伪操作rept 7 2重复汇编 34 char a tablelabelbyterept26dbcharchar char 1endm 1db61h1db62h1db63h 1db7ah 汇编后 例7 14把字符 a 到 z 的ascii码填入数组table 35 irp格式 irp哑元 重复块endm每次重复用自变量表中的一项取代哑元 重复次数由自变量的个数决定 例7 15irpreg pushregendm 1pushax1pushbx1pushcx1pushdx 汇编后 7 2 2不定重复伪操作irp 36 datasegmentarraylabelbyteirpk db no k endmdataends datasegmentarraylabelbyte1db no 1 1db no 2 1db no 3 1db no 4 1db no 5 dataends 汇编后 例7 16 在数据段产生字符区array 包括5个字符串 no k 37 irpc格式 irpc哑元 字符串 重复块endm每次重复用字符串中的一个字符取代哑元 重复次数等于字符串中的字符数 例 在数据段产生字符区array 包括5个字符串 no k 7 2 3不定重复伪操作irpc 38 按参数字符个数重复 irpcregad dcbapop regad xendm 1popdx1popcx1popbx1popax 39 datasegmentarraylabelbyteirpck 12345db no k endmdataends datasegmentarraylabelbyte1db no 1 1db no 2 1db no 3 1db no 4 1db no 5 dataends 汇编后 例7 17 在数据段产生字符区array 包括5个字符串 no k 40 根据条件把一段源程序包括在汇编语言范围内 或者排除在外一般格式 if 自变量 为条件 自变量满足条件则汇编此块 else 自变量不满足条件则汇编此块endif 7 3条件汇编 41 if表达式ife表达式ifdef符号ifndef符号ifbifnbifidn ifdif 详见page266 常见条件汇编语句 42 pdatamacronumifnumlt100 如果num 100 则汇编如下语句dbnumdup else 否则 汇编如下语句db100dup endifendmpdata12 宏调用 db12dup 宏汇编结果 pdata102 宏调用 db100dup 宏汇编结果 例7 18 43 宏结构的作用 宏汇编 重复汇编和条件汇编为源程序的编写提供了很多方便 灵活运用它们可以编写出非常良好的源程序来汇编系统中有些以圆点起始的伪指令 如 startup exit等 实际上是一种宏结构 44 dstringmacrostring 定义字符串db 设置数据段地址movax dssegmovds axendmdispmsgmacromes

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论