ImageVerifierCode 换一换
格式:PPT , 页数:43 ,大小:390.54KB ,
资源ID:10297690      下载积分:12 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/10297690.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(四川大学计算机学院-汇编语言ch9.ppt)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

四川大学计算机学院-汇编语言ch9.ppt

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第九章 高级宏汇编语言,学习目的:通过这一章的学习,掌握结构、记录等复杂数据类型的定义和使用方法;,掌握汇编语言中“宏”的概念,能够在程序设计中正确使用宏指令;,掌握条件汇编和重复汇编的概念,并且能够在程序设计中正确使用。,宏指令,在程序设计中,遇到功能独立、又经常使用的功能模块,可以选择做成子程序的形式,也可以选择做成宏指令的形式。,宏指令的概念和子程序有相似之处,但是也有较大的差别。,宏指令的使用必须经过三个过程:宏定义、宏调用、宏展开。,(1)宏定义,格式1(不带入口参数的宏定义),宏指令名称

2、MACRO,;指令和伪指令序列,称为宏体,ENDM,格式2(带入口参数的宏定义),宏指令名称MACRO形参1,形参2,,;宏体,ENDM,宏定义的意义:把一组具有独立功能的一段程序组织为一个功能模块,使用一个宏指令名称来代表这段程序。在定义之后,引用这个宏指令名称,就相当于引用这段程序。,宏定义的特征:,宏定义允许嵌套,在一个宏定义中可以引用另一个宏。,如果宏定义是带参数的,那么在引用该宏指令时必须给出相应的实参。,例子:P202,注意,宏定义是由程序员在源程序中完成的。,(2)宏调用,在宏指令定义之后,就可以在源程序中调用已定义的宏指令,调用格式很简单,直接给出宏指令名称就行,如果该宏定义时

3、是带形参的,那么调用时一定按照定义时的顺序给出各个实参。,格式:,宏指令名称,宏指令名称实参1,实参2,,例子:P203,宏调用这个过程也是由程序员在源程序中实现的。,例如:,宏定义:,TESTMACROOP,AD&OPAX,BX,ENDM,宏调用:,TESTD,TESTC,宏展开:,ADDAX,BX,ADCAX,BX,如果这里不使用&操作符,这种类型实参调用就无法实现。,(2)文本操作符,如果实参由比较复杂的字符串组成,包含逗号、空格等分隔字符,那么就需要使用文本操作符把它括起来,避免汇编程序把一个复杂的实参解释为多个实参。一般在宏调用时使用。,例如:,宏定义:,STRINGMACROSTR

4、DB&STR&,ENDM,注意,不能写成 STR,如果这样写,它将被解释为普通的字符串,不会被解释为对STR形参的 引用。,宏调用:,STRING,宏展开:,DBHello,World!,如果宏调用时不使用文本操作符,实参会被解释成两个,而不是一个。,关于&操作符和操作符的使用,还可以参见教材P205,(3)表达式操作符%,%操作符把后面的文本解释为表达式,它的功能是取表达式的最终的值。使用这个操作符可以把表达式的值作为实参引用,而不是引用表达式文本本身。一般在宏调用时使用。,例如:,宏定义:,TESTMACRO NUM,PROMPT&NUMDBWARNING&NUM&,ENDM,宏调用:,

5、CONT=0,TEST%CONT,TEST%CONT+1,宏展开:,PROMPT0DBWARNING0,PROMPT1DBWARNING1,如果不使用%操作符,那么宏展开后:,PROMTCONTDBWARNINGCONT,PROMTCONT+1DBWARNINGCONT+1,(4)字符操作符!,用于把紧跟其后的宏操作符解释为普通字符。,例如:,宏定义:,STRINGMACROSTR,PROMPTDB&STR&,ENDM,宏调用:,STRING1:,宏展开:,PROMPTDBINPUT NUMBER1:,如果大于符号前面不使用!操作符,那么它将被解释为文本操作符的后半部分。,9.2.3 局部符号

6、伪指令,先看一个例子:,宏定义:,ERRORMACRO,CMPAX,BX,JAL1,MOVAX,0,JMPL2,L1:MOVAX,0FFH,L2:LABELNEAR,ENDM,这个宏体中使用了标号,那么在多次进行宏调用以后,会出现重复定义的标号L1和L2,从而导致语法错误。,对于这种情况,一种解决方法是把标号设置为形参,在宏调用时指定实际的标号,这种方法比较麻烦。因为用户本身没有通过实参指定标号的需求。,另一种方法是把标号作为局部符号,在宏展开时所有局部符号都会自动取和上一次展开不同的值。,宏展开时局部符号的自动生成格式为:?XXXX。其中XXXX是四位整数组成的字符串。,例子:P206,9.

7、2.4 宏库的制作,宏库就是把多个常用的宏指令定义在一个以.LIB为后缀名的文件中。这个文件就称为宏库文件。,在源程序中使用INCLUDE伪指令装入指定的宏库文件以后,就可以在源程序中调用宏库中定义的宏指令。多使用已有的宏指令,可以提高编程效率。,INCLUDE伪指令的格式:,INCLUDE库文件名,一般在源程序最开始使用。例子:P207,9.2.5 宏指令和子程序的区别与联系,子程序的特征:,1)子程序编制完成后,通过在主程序中使用CALL指令来调用,不需要重复编制。,2)子程序的调用、返回、执行现场的保护与恢复、参数的传递都是在程序执行过程中完成的,需要花费一定的CPU时间,调用次数越多,

8、累积花费时间越多。,3)子程序占用的空间大小很明确,就是子程序本身所占用的空间,没有更多的额外空间被占用。,宏指令特征:,1)宏指令定义完毕以后,在源程序中使用宏指令名称对其进行调用,不需要重新编制。,2)宏指令的展开过程是由汇编程序在汇编过程中自动完成的,在程序执行过程中没有调用、返回、参数传递等等过程,程序执行时,花费CPU时间相对较少。,3)宏指令所占用的空间由调用次数决定,调用一次就要重新把对应代码展开一次,如果宏指令对应的代码片段比较长,调用次数又比较多,那么将耗费大量的内存空间。,相对而言,子程序在程序执行阶段会花费较多的CPU时间,但是它会很节约内存空间。,宏指令在程序执行阶段花

9、费较少的CPU时间,因为它相对子程序省去了一些过程,但是它可能很花费内存空间。,二者有一个共同点:不需要重复编制对应功能模块的代码。,仔细分析:,子程序的弱点在于程序执行阶段花费CPU时间较多,主要有这几个过程需要额外的花费CPU时间:子程序调用、子程序返回、现场保护、参数传递过程。,前面两个过程几乎是每个子程序共有的特征,不能改变;第三个特征也是必须的,不可能有太大的变动。,第四个过程在不同的子程序之间可能差别较大,实际上花费时间最多的也是这个过程。,既然如此,考虑把参数传递较少的功能模块组织为子程序的形式是合适的。,子程序的优点在于节约空间,调用时不会再分配空间,那么子程序越长,优势越大。

10、综合上面的分析:参数较少,代码较长的功能模块适合于组织成子程序的形式。,宏指令的优点在于程序执行阶段没有调用、返回、参数传递的过程,不需要花费额外的CPU时间。,缺点在于每次调用都要重新分配代码空间。,综合分析的结果:参数较多,且代码较短的功能模块适合组织为宏指令的形式。,上面的判断标准都是相对的标准,不是绝对的,具体程序设计时应当如何取舍,由程序员根据实际情况决定。,9.3 重复汇编,重复汇编是指在汇编过程中,对指定的语句序列进行反复的汇编。,注意,这里的重复是指汇编过程中的重复操作,不是指程序执行阶段所用到的循环结构。,重复汇编是通过重复汇编伪指令来实现的。,(1)定重复汇编伪指令REP

11、T/ENDM,格式:,REPT表达式,;语句序列,ENDM,功能:重复汇编REPT和ENDM之间的语句序列,表达式的值决定了重复汇编的次数。,例子:见教材P209 例9.3.1 和 例9.3.2,例:,使用无条件跳转指令实现跳转表,原来的方法在P107,现在使用重复汇编来实现。,JMPTABLEMACRONUM,JMPBRAN&NUM,ENDM,NUMBER=0,REPT10,JMPTABLENUMBER,NUMBER=NUMBER+1,ENDM,(2)不定重复汇编伪指令IRP/ENDM,格式:,IRP形参,,;语句序列,ENDM,把IRP和ENDM之间的语句重复汇编,每一次重复都取一个新的实

12、参取代语句中的形参,重复汇编的次数由实参个数决定。,例子:P210,(3)不定字符重复汇编IRPC/ENDM,格式:,IRPC形参,字符串,;语句序列,ENDM,不定字符重复汇编和前面讲到的不定重复汇编很相似,所不同的是它可以结合&操作符使用。,例子:P210,9.4 条件汇编,条件汇编是指有选择的对程序片段进行汇编,条件满足时才对程序片段进行汇编,否则不汇编。,这里所说的条件是汇编过程中所使用的条件判断,不是程序执行阶段所使用的分支结构。,条件汇编是通过条件汇编伪指令实现的。,条件汇编格式1:,IFXX表达式,;语句序列1,ELSE,;语句序列2,ENDIF,其中XX表示某种判断类型,表达式

13、是具体需要判断的对象。,如果条件成立,则对语句序列1进行汇编,否则,汇编语句序列2。,条件汇编格式2:,IFXX表达式,;语句序列,ENDIF,如果条件成立,对其中的语句序列进行汇编,否则不汇编。,IFXX中的XX为具体的判断类型,可以参见教材P212 表9-1。,条件汇编和重复汇编可以在源程序中直接使用,也可以在宏定义中使用。,例子:P211 例9.4.1 和 P212 例9.4.2,9.5 汇编过程,这里简要说明一下汇编程序解释源程序的大致过程。,和人阅读文章的过程相似,汇编程序要完全理解一个源程序,需要阅读源程序三次,也就是说,对源程序实行三次扫描,最后才能生成正确的目标代码。,(1)第

14、一次扫描,汇编程序第一次扫描源程序主要完成的工作是建立若干线性表,对进一步解释源程序作准备。,所建立的线性表主要有如下这些:,1)段表,每个表项的字段组成如下:,段名,段基值,段类型,源程序中所有关于定义段的信息都统计在这个表格中。,2)变量表,每个表项的字段组成如下:,变量名,所在段名,偏移量,类型,数组长度,初始值。,源程序中所有关于定义变量的信息都统计在这个表中。,3)标号表,每个表项的字段组成:,标号名,所在段名,偏移量、类型,源程序中所有关于定义标号的信息都统计在这个表中。,4)不可重定义替换表,每个表项的字段组成:,替换文本,原始文本,源程序中所有用EQU伪指令定义的常量都统计在这

15、个表中。,5)可重定义替换表,每个表项字段组成如下:,替换文本,原始文本,所有用“=”定义的常量都统计在这个表格中,由于可以重新定义,在以后的源程序扫描中,这个表可能被修改。,注意,除了这个表在后面的扫描过程中可以修改以外,其他的表在第一次扫描以后就确定下来,以后的扫描过程只能进行查表的操作,不能再修改这些表。,第一次扫描过程实际上是在统计源程序中所有用户定义的标识符,并且分类别给它们建立线性表,为后面的扫描过程做准备。,所有有关符号定义的语法错误都是在第一次扫描中被发现的。,(2)第二次扫描,汇编程序进行第二次扫描所要完成的工作是常量替换,计算表达式。,1)常量替换,查找第一次扫描中建立的不

16、可重复替换表、可重复替换表,把常量标识符替换为它对应的原始文本(现在还不会解释文本的具体含义);同时根据“=”提供的重新定义,可能会修改可重复替换表中的相关内容。,2)计算表达式,在替换常量的同时,汇编程序会识别源程序中的所有表达式,计算它们的最终运算结果,并用运算结果替换原来的表达式文本。,如果在表达式中出现变量名称或者段名称,那么这个过程可能需要查找由第一次扫描生成的变量表和段表。,第二次扫描主要完成常量和表达式的替换,需要查找第一次扫描建立的表格。,(3)第三次扫描,汇编程序第三次扫描扫描源程序要完成如下工作:按照段表中的定义,生成数据段、堆栈段、代码段;把变量引用替换为相应的位移量;确定指令的寻址方式;计算转移指令中使用的位移量;生成指令的机器代码。,这个过程中会反复的、经常的查找第一次扫描建立的段表、变量表、标号表。,所有变量、标号引用错误都是在这个阶段发现的。,汇编过程经过三次源程序扫描以后完成,最后生成OBJ文件。,在连接过程中,OBJ文件中的段信息会被加入到EXE文件的PSP(程序段前缀)中保存。,

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服