- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]chap2-3
第二章 汇编语言与汇编程序 2.1 符号指令中的表达式; 2.2 符号指令的寻址方式; 2.3 常用指令; 2.4 伪指令; 2.5 常用系统功能调用与BIOS。 伪指令语句 汇编时给汇编程序提供与硬件有关的汇编信息,本身并不产生目标代码,CPU不执行 是指示汇编程序进行汇编的操作 2.4.1 过程的定义 过程是一段可以由CALL指令调用,用RET返回的程序。 当整个源程序由主、子程序构成时,主、子程序都在代码段,且都可用过程来表示(即定义为过程) 过程的定义 过程由伪指令PROC和ENDP定义 定义过程的格式为: 过程名 PROC[NEAR]或FAR 过程名 ENDP PROC和ENDP必须成对出现,且前面都有同一过程名 过程的类型由PROC的操作数指出,若PROC后无操作数,则默认为NEAR类型 NEAR属性 调用程序和子程序在同一代码段中 段内调用 FAR属性 调用程序和子程序不在同一代码段中 段间调用 过程的调用 CALL 过程名 过程名是为该子程序起的名字 PROC和ENDP两伪指令之间,是为实现某功能的程序段,其中至少有一条子程序返回指令RET以便返回调用它的程序。 子程序也可以用“:”定义 “:” 定义的标号是为该子程序起的名字 主程序把用“:”定义的子程序作为远过程来调用。 若子程序与调用它的主程序在同一代码段,则必须用过程来定义该子程序。 中断调用都是远调用,所以中断服务子程序用“:”定义 若用过程来定义中断服务子程序定义过程为远过程,而不论他与调用程序是否在不同的代码段。 宏定义伪指令 为减少重复编写相同语句段的工作,我们可以使用“宏”功能。 宏定义是指用一个标识符(宏名)来代替一组指令序列(可同时包含指令性语句和指示性语句) 过程与宏的区别 对需重复使用的模块既可定义为过程,也可定义为宏。 宏由汇编程序识别,并将宏体代码插入;过程在汇编时仅产生CALL指令代码,该代码在程序执行时完成。 宏可以直接传递参数;但过程传递参数的编程困难。 汇编成机器代码时宏扩展增加空间开销;过程调用却能缩短源程序目标代码的长度,无论过程被调用多少次,仅增加CALL、RET代码 宏体执行时并不增加时间开销;过程调用时CALL、RET指令需保护、恢复现场和断点,增加时间开销 2.4.2 段的定义 定义一个段的格式是 段名 SEGMENT [定位方式] [组合方式] [ 类别名 ] 段名 ENDS 伪指令SEGMENT有3个可选择的操作数 定位方式 组合方式 类别名 定位方式 告诉链接程序链接时段的起始边界 PAGE 段起始地址必须是256的倍数(XXX00H),最低8位为0 PARA 段起始地址必须是16的倍数(XXXX0H),最低4位必须为0 WORD 段起始地址必须是偶数(XX…0B),最低1位必须为0 BYTE 段起始地址为任意值,即从任何地址开始都行 缺省类型为PARA 组合方式 在多模块(每个模块有自己的代码段、数据段、堆栈段)组合时,告诉链接程序本段与其他模块中同名段的链接关系 NONE 本段与其它同名段逻辑上不发生关系,有自己的段基地址 缺省选择 PUBLIC 在满足定位类型的前提下,链接程序将其与其他模块中的同名段邻接在一起,共用一个段地址。链接的先后次序由链接命令指定。 STACK 与PUBLIC同样处理,链接后作为堆栈段,并自动初始化SS、SP,SS指向第一个STACK段。 若程序中不说明STACK ,则必须由用户在程序的开始处,自己通过语句设置SS、SP。 COMMON 各模块中同名段重叠覆盖,有着相同的起始地 址 段的长度取决于最长的COMMON段 段的内容为所链接的最后一个模块中COMMON段的内容 AT表达式 链接程序把本段装在表达式值所指定的段地址 此方式不能指定代码段 例:AT 0903H ;本段从09030H开始存放。 MEMORY 链接在其他所有段的后面(高端存储区 ) 若有多个MEMERY段,则只认第一个,其余按COMMON处理 类别名 给各段的名字信息,表示段的类别。类别必须用单引号括起来 典型类别名如:‘STACK’、‘CODE’和‘DATA’等若缺省‘类别名’,则表明该段类别为空 同名同类别的段在内存中依序连续存放。 连接时LINK将把类别名相同的所有段存放在连续的存储区域中 2.4.3 汇编地址计数器 在汇编程序中,有一个软件计数器(LC)——地址计数器。 在每个段定义开始处,它被复位为0 当汇编程序逐行扫描语句时,用LC保存当前指令的地址 汇编地址计数器的当前值用符号$表示 ORG $的值可以用伪指令ORG来设置 ORG强行指定地址计数器LC的当前值,在段内改变它以后的代码或数据存放的偏移地址 格式1
文档评论(0)