4.子段 子段是更大的段中的较小的段,链接器可以像段一样 操作它; ○子段让用户可以更好的控制存储器映射; 可用.sect或者.usect指令来创建子段,子段名的格式为: section name:subsection name 同一个段中的子段可以独自分配地址,也可以一起 分配存储空间。 例,在段.text中创建一个func子段如下: .sect“text:func” 用户可以为其单独分配地址,也可以和.text段的其他 部分一起分配地址。 24
4.子段 ⚫ 子段是更大的段中的较小的段, 链接器可以像段一样 操作它; ⚫子段让用户可以更好的控制存储器映射; ⚫可用.sect或者.usect指令来创建子段,子段名的格式为: section name: subsection name ⚫同一个段中的子段可以独自分配地址,也可以一起 分配存储空间。 例,在段.text中创建一个_func子段如下: .sect “text:_func” 用户可以为其单独分配地址, 也可以和.text段的其他 部分一起分配地址。 24
5.段指针(Section Program Counters) 汇编器为每个段分配一个程序指针,这些程 序指针称为段指针(SPCs): 一个SPC指向一个段的当前地址: 初始时,汇编器设置每个SPC为0(默认初 始化段可定义非0值): 当汇编器在段中填充代码和数据时,SPC跟 着增加; 如果重新开始汇编一个段,汇编器会记得 该段SPC的原来值,并继续增加SPC。 25
5.段指针(Section Program Counters) ⚫ 汇编器为每个段分配一个程序指针, 这些程 序指针称为段指针(SPCs); ⚫ 一个SPC指向一个段的当前地址: ◆初始时, 汇编器设置每个SPC为0(默认,初 始化段可定义非0值); ◆当汇编器在段中填充代码和数据时, SPC跟 着增加; ◆如果重新开始汇编一个段, 汇编器会记得 该段SPC的原来值, 并继续增加SPC。 25
例5-1段伪指令的使用--源程序(单独列出) 汇编语言源程序: .data 初始化数据段 coeff.word011h,022h,033h;3组数据放入.data段 .bss buffer,10 :在.bss段保留10个单元 prt .word 0123h :.bss后0123h仍然在.data段 .text 初始化文本段 Add: MOV 0Fh.AC0 :2字节(省略@,DP直接寻址) Aloop:SUB #1,AC0 :2字节指令 BCC Aloop,ACO>=#0 :3字节指令 .data 初始化数据段 ivals .word 0AAh,0BBh,0CCh :3组数据放入.data段 26
汇编语言源程序: .data coeff .word 011h,022h,033h .bss buffer, 10 prt .word 0123h .text Add: MOV 0Fh, AC0 Aloop: SUB #1, AC0 BCC Aloop, AC0>=#0 .data ivals .word 0AAh, 0BBh, 0CCh ;初始化数据段 ;3组数据放入.data段 ;在.bss段保留10个单元 ;.bss后0123h仍然在.data段 ;初始化文本段 ;2字节(省略@,DP直接寻址) ;2字节指令 ;3字节指令 ;初始化数据段 ;3组数据放入.data段 26 例5-1 段伪指令的使用---源程序(单独列出)
例5-1段伪指令的使用-源程序(单独列出) var2 .usect“newvars'”,1建newvarsi命名段保留1个单元 inbuf,usect“newvars'”,7,在newvars段保留7个单元 .text 初始化文本段 mpy:MOV 0Ah,AC1 :1字指令(省略@,DP直接寻址) mloop:MOVT3,HI(AC2):2字节指令 MPYK#10,AC2,AC1:3字节指令 BCC mloop,!overflow(AC13字节指令 sect“vectors” :建立vectors命名段 .word 011h,033h :2组数据放入vectorsi命名段 27
var2 .usect “newvars”, 1 inbuf .usect “newvars”, 7 .text mpy: MOV 0Ah, AC1 mloop: MOV T3, HI(AC2) MPYK #10, AC2, AC1 BCC mloop, !overflow(AC1) .sect “vectors” .word 011h, 033h 例5-1 段伪指令的使用---源程序(单独列出) ;建newvars命名段,保留1个单元 ;在newvars段保留7个单元 ;初始化文本段 ;1字指令(省略@,DP直接寻址) ;2字节指令 ;3字节指令 ;3字节指令 ;建立vectors命名段 ;2组数据放入vectors命名段 27
例5-1段伪指令的使用段总结 汇编语言源程序经过汇编后,共建立了5个段: >.text段一文本段,段内有10个字可执行的程序代码 >.data段一已初始化的数据段,段内有7个字的数据 >vectors.段一用.sect命令生成的命名段,段内有2个字 的初始化段数据 >.bss段一未初始化的数据段,在存储器中为变量保留 10个存储单元 >newvars段一用.usect命令建立的未初始化的命名段, 为变量保留8个存储单元 28
汇编语言源程序经过汇编后,共建立了5个段: ➢.text段——文本段,段内有10个字可执行的程序代码 ➢.data段——已初始化的数据段,段内有7个字的数据 ➢vectors段——用.sect命令生成的命名段,段内有2个字 的初始化段数据 ➢.bss段——未初始化的数据段,在存储器中为变量保留 10个存储单元 ➢newvars段——用.usect命令建立的未初始化的命名段, 为变量保留8个存储单元 28 例5-1 段伪指令的使用--- 段总结