- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
                        查看更多
                        
                    
                第3章 汇编语言程序格式 3.1    汇编程序功能 3.2    伪操作 3.3    汇编语言程序格式 3.4    汇编语言程序的上机过程 3.1  汇编程序功能            计算机是通过执行指令序列来解决问题的。计算机的指令系统就是指该计算机能够执行的全部指令的集合。            指令的一般格式:            [标号:] 操作符  OPD, OPS  [;注释]            算术运算和位操作类指令的部分单操作数指令的格式:            [标号:] 操作符  OPD  [;注释] 汇编语言程序的建立及开发过程 汇编程序的主要功能 检查源程序 测出源程序中的语法错误,并给出出错信息 产生源程序的目标程序,并可给出列表文件(同时列出汇编语言和机器语言的文件,称为LST文件) 展开宏指令 3.2  伪操作 硬指令——使CPU产生动作、并在程序运行期间由计算机执行的语句。 伪指令(Directive)——不产生CPU动作、在程序执行前由汇编程序处理的说明性语句,例如,数据说明、变量定义等等。 伪指令与具体的处理器类型无关,但与汇编程序的版本有关。 汇编语言语句实例    MOV CX,0	;传送指令,具有2个操作数    DELAY:	NOP 	    ;空操作指令,没有操作数,带有标号 	 LOOP DELAY 	    ;循环指令,标号DELAY说明转移位置    BUFFER	DB 1,2,3,4,5,6,7 	  ;数据定义伪指令,在主存中开辟7个连续的字节单元,初值依次为1~7,BUFFER表示首地址  3.2.1  段定义伪操作 1.完整的段定义伪操作        存储器的物理地址是由段地址和偏移地址组合而成的,汇编程序在把源程序转换为目标程序时,必须确定标号和变量的偏移地址,并且需要把有关信息通过目标模块传送给连接程序,以便连接程序把不同的段和模块连接在一起,形成一个可执行程序。为此需要用段定义伪操作,格式如下:      段名 SEGMENT [定位]  [组合]  [使用] [类别 ] 		...     ;对数据段,附加段和堆栈段,一般是存储单元的定    ...  ;义,分配等伪操作,对代码段则是指令及伪操作.      段名 ENDS 完整段定义由SEGMENT和ENDS这一对伪指令实现,SEGMENT伪指令定义一个逻辑段的开始,ENDS伪指令表示一个段的结束 段定义指令后的4个关键字用于确定段的各种属性,堆栈段要采用stack组合类型,代码段应具有‘code’类别,其他为可选属性参数 如果不指定,则采用默认参数;但如果指定,注意要按照上列次序。        PAGE 该段必须从页的边界开始,即段的起始地址的最低两个十六进制数位必须为0  简化段定义伪指令的代码和数据段默认采用WORD定位,堆栈段默认采用PARA定位 完整段定义伪指令的默认定位属性是PARA,其低4位已经是0,所以默认情况下数据段的偏移地址从0开始  (2)组合类型说明程序连接时的段合并方法,即指定多个逻辑段之间的关系,可为:             PRIVATE 本段为私有段,与其他段没有逻辑关系,在连接时不与其他段合并,每段都有自己的段地址。这是完整段定义伪指令默认的段组合方式             PUBLIC	连接程序把本段与所有同名同类型的其他段相邻地连接在一起,然后为所有这些段指定一个共同的段地址,也就是合成一个物理段。这是简化段定义伪指令默认的段组合              STACK	本段是堆栈的一部分,连接程序将所有STACK段按照与PUBLIC段的同样方式进行合并。这是堆栈段必须具有的段组合 (3)使用类型是支持32位段而设置的属性,用来说明使用16位寻址方式还是32位寻址方式             对于16位x86 CPU来说,它默认是16位段,即USE16             而对于汇编32位x86 CPU指令时,它默认采用32位段,即USE32;但可以使用USE16指定标准的16位段 编写运行于实地址方式(8086工作方式)的汇编语言程序,必须采用16位段   (4)类别在引号中给出连接时组成段组的类型名。当连接程序组织段时,并不能把相同类别的段合并起来,但可将所有的同类别段相邻分配 段类别可以是任意名称,但必须位于单引号中 大多数MASM程序使用 code、data和stack’来分别指名代码段、数据段和堆栈段,以保持所有代码和数据的连续             此外,必须明确段与段寄存器的关系,可用ASSUME伪操作来实现。格式:         ASSUME  段寄存器:段名 [,段寄存器名:段名, ...]  作用: 通知MASM用指定的段
                 原创力文档
原创力文档 
                        

文档评论(0)