微机电子教程 第四讲汇编程序设计.pptVIP

  • 1
  • 0
  • 约1.82万字
  • 约 78页
  • 2017-06-05 发布于湖北
  • 举报
1.段定义伪指令 SEGMENT/ENDS ——将程序分成段:代码段,数据段,堆栈段,附加段 格式: 段名 SEGMENT [定位类型][组合属性][‘类别名’] … 段体 … 段名 ENDS 段名含段的标志符,有段基地址和段内偏移量两个属性,与某个存储单元相联系 功能:指出段名和段的各种属性,并表示段的开始和结束位置 (1)定位类型——用于告诉链接程序,链接时(多模块.obj)本段首地址的边界定位方式,常有四种: PARA 、PAGE、 WORD 、BYTE ① PARA 段的起始地址必须是16的倍数(XXXX0H),这是一 种默认方式 ② PAGE 段的起始地址必须是256的倍数(XXX00H),256字节 为一页,在页的起点上 ③ WORD 段的起始地址必须是偶数(XX…0B) ④ BYTE 段的起始地址可以是任何地址 (2) 组合类型 在多模块(每个模块有自己的代码段,数据段,堆栈段)组合时,告诉Link程序本段要与其他模块中同名段的组合链接关系。 常有6种: ①NONE: 本段与其他同名段无组合关系,并有自己的段起始地址, ——这是一种默认方式 ②PUBLIC: 在满足定位类型的前提下,LINK程序将其与其他模块中的同名段邻接在一起,共用一个段地址。 ③ STACK: 同PUBLIC 链接以后作为堆栈段,并初始化SS,SP,若不说明STACK,必须由用户产生。程序的开始地址由指定完成初始化SS,SP。 ④ COMMON:各模块中,同名段重叠,覆盖,有着相同的段地址,段长由最长的COMMON段决定。段的内容为所链接的最后一个模块中COMMON段的内容以及没有覆盖到的前面COMMON段的内容。 ⑤MEMERY:链接在其他所有段的后面(存储器高地址区域 ),若有多个MEMERY段,则只认第一个,其余按COMMON处理。 ⑥AT表达式:指定本段存放的段地址(代码段除外) 例:AT 0930H 本段从0903H开始存放 例: 两个模块 模块1: STACK SEGMENTY STACK DW 20 DUP(?) STACK ENDS DATA SEGMENT COMMON …… DATA ENDS CODE SEGMENT PUBLIC …… CODE ENDS END (3) 类别名 ‘ 类别名’ 同名,同类别的段在内存中依序连续存放。典型类别名如‘STACK’、‘CODE’和‘DATA’等,也允许用户使用其它类别名。若缺省‘类别名’,则表明该段类别为空。 模块2: STACK SEGMENT STACK DW 30 DUP(?) STACK ENDS DATA SEGMENT COMMON …… DATA ENDS CODE SEGMENT PUBLIC …… CODE ENDS END 汇编连接后,有 : . . . . . . . . . 模块1DATA 模块2代码 模块1代码 模块2 DATA 设模块2DATA 为模块1DATA STACK 50个字 2. 段寄存器说明伪指令 格式:ASSUME 段寄存器:段名[,段寄存器:段名,…] ① 指明程序中定义的段用哪一个段寄存器去寻址。 ② 并没有真正的将段地址装入段寄存器,段寄存器的初

文档评论(0)

1亿VIP精品文档

相关文档