北航计算机系汇编语言课件3.宏汇编精选.pptVIP

北航计算机系汇编语言课件3.宏汇编精选.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北航计算机系汇编语言课件3.宏汇编精选

计算机组成原理与汇编语言 (汇编语言部分) 北航计算机学院 熊桂喜 Tel 82317634 email:xiongguixi@buaa.edu.cn 第三部分:宏汇编程序格式与伪指令 3.1 宏汇编语言程序的格式 典型的三段式完整程序的例子 ——冒泡排序法的例子 伪指令的基本格式 [符号] 伪指令 操作数1,操作数2,…操作数n ;注释 “符号” ——段名、子程序名、宏名、变量名、常量名等; “伪指令” ——定义或申明用的助记符,经过汇编后,不复存在; “操作数”——伪指令所带的参数,有的没有参数; 伪指令与指令的区分 指令经过汇编后会变为机器码,作为指令系列,会被装入代码段; 伪指令并不是“真”指令,其作用是组织程序、数据,为汇编器提供帮助,经过汇编后,不复存在。 操作符:指令和伪指令中用于指示性的指示符号或运算符号,它出现在指令和伪指令的操作数部分;除属性操作符(ptr,段,short,offset, seg等)外,经汇编后,都不复存在。 3.2 如何定义堆栈段、数据段和代码段(参见EXP41.asm) 定义段(segment)用到的伪操作 SEGMENT与ENDS 【对位】【组合】【’类别‘】三个属性 堆栈段、数据段、代码段——三段式格式 END 标号 ASSUME 设定CS,DS,SS 程序中对SS,SP,DS的初始化 返回DOS的操作(4Ch号DOS功能调用) 五个定义要素,缺一不可 定义子程序(proc)用到的伪操作 PROC与ENDP near与far属性,决定调用与返回时的指针类型(短—段内,长—段间) ASSUME 伪指令: 宏汇编的另外两种种格式(书上P144) 1. Main proc far PUSH DS ;PSP的DS SUB AX PUSH AX ;程序的返回值 ….. RET ;返回至PSP(有一条INT 20h) Main ENDP 2.参见EXP411.asm(例题的改写) .model small .stack .data .code ;4个语句定义了三个段 ….. mov ax,@data mov ds,ax ;初始化DS,SS,SP? SEGMENT伪指令的进一步分解 格式: segment_name SEGMENT [align] [combine] [‘class’] …… segment_name ENDS 解释 对位align:指明段开始的边界。 通常段为小边界,参数为PARA。 组合combine:指明程序连接时,该段是否和其它的段组合在一起(以后解释),参数为STACK, COMMON, PUBLIC 堆栈段通常定义 segment_name SEGMENT PARA STACK 类别class:指明段的类别 代码段‘code’,数据段‘data’,堆栈段‘stack’ 对位、组合、类别——告诉编译器,代码块之间如何组合。 3.3 如何定义数据(变量和常量) 用到的伪指令 DB 定义字节,常用于8位数,字符,字符串 DW 定义字,数组 DD 定义双字、逻辑地址、长指针、中断向量 EQU 定义常量,求长度 用到的操作符 DUP: 定义数组 $: 注意不是“$”,代表当前位置的偏移值(地址计数器) ?:代表变量未赋初值(实际上由编译器赋初值0) 常见的算术运算符号 定义数据的核心 (1)画内存图 (2)注意在DEBUG下 CS:IP,DS:0,SS:SP—三组值决定了程序的内存映像 数据定义的例子(书上) 例4.7至4.17 其他伪指令及伪操作 AT 表达式:指定段的值 ORG伪指令:指定当前的偏移值 LABEL:指定变量的类型(并不改变后面的定义) 注意与XXXX PTR比较 lebel在定义时通过别名改变类型 ptr 在引用时改变类型 都没有改变原来的定义属性 属性:数据——BYTE WORD DWORD 标号——near,far 其他不做要求的伪指令、操作符 处理器伪操作 类型伪操作操作:DQ,DT EVEN,ALIGN, TYPE,LENGTH,SIZE等(课堂及讲义上未出现的) 3.4 汇编程序的汇编(编译)、连接、调试 MASM 在

您可能关注的文档

文档评论(0)

tazhiq2 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档