ZHCU875Z August 2001 – October 2023 SM320F28335-EP
此示例使用三个源文件:module1.asm 和 module2.asm,这两个文件都包含 globals.def。
module1.asm
.text
array .usect ".ebss",100
dflag .usect ".ebss", 2
.copy globals.def
MOV ACC, #offset
MOV ACC, #dflag
module2.asm
offset .usect ".ebss", 2
.copy globals.def
MOV ACC, #offset
MOV ACC, #array
globals.def
.global dflag
.global array
.global offset
以下步骤会为 module1.asm 和 module2.asm 文件创建绝对列表:
步骤 1: | 首先汇编 module1.asm 和 module2.asm:
这将创建名为 module1.obj 和 module2.obj 的两个目标文件。 |
步骤 2: | 接下来,使用以下名为 bttest.cmd 的链接器命令文件链接 module1.obj 和 module2.obj: |
--output_file=bttest.out
--map_file=bttest.map
module1.obj
module2.obj
MEMORY
{
PAGE 0: ROM: origin=2000h length=2000h
PAGE 1: RAM: origin=8000h length=8000h
}
SECTIONS
{
.data: >RAM
.text: >ROM
.ebss: >RAM
}
调用链接器:
此命令会创建一个名为 bttest.out 的可执行目标文件;使用此文件作为绝对列表器的输入。 |
|
步骤 3: | 下面,调用绝对列表器:
此命令会创建名为 module1.abs 和 module2.abs 的两个文件: module1.abs: |
.nolist
array .setsym 000008000h
dflag .setsym 000008064h
offset .setsym 000008066h
.data .setsym 000008000h
edata .setsym 000008000h
.text .setsym 000002000h
etext .setsym 000002008h
.usect .setsym 000008000h
end .setsym 000008068h
.setsect ".text",000002000h
.setsect ".data",000008000h
.setsect ".ebss",00008000h
.list
.text
.copy "module1.asm"
module2.abs: |
.nolist
array .setsym 000008000h
dflag .setsym 000008064h
offset .setsym 000008066h
.data .setsym 000008000h
edata .setsym 000008000h
.text .setsym 000002000h
etext .setsym 000002008h
.usect .setsym 000008000h
end .setsym 000008068h
.setsect ".text",000002004h
.setsect ".data",000008000h
.setsect ".ebss",00008066h
.list
.text
.copy "module2.asm"
这些文件包含汇编器在步骤 4 中需要的以下信息:
.setsym 和 .setsect 指令仅用于创建绝对列表,而不是正常汇编。 |
|
步骤 4: | 最后,汇编由绝对列表器创建的 .abs 文件(请记住,调用汇编器时必须使用 --absolute_listing 选项):
此命令序列会创建名为 module1.lst 和 module2.lst 的两个列表文件;不会生成对象代码。这些列表文件类似于正常的列表文件;但是,显示的地址是绝对地址。 创建的绝对列表文件是 module1.lst(参见 module1.lst)和 module2.lst(参见 module2.lst)。 |
module1.abs PAGE 1
15 002000 .text
16 .copy "module1.asm"
1 002000 .text
2 008000 array .usect ".ebss",100
3 008064 dflag .usect ".ebss",2
4 .copy globals.def
1 .global dflag
2 .global array
3 .global offset
5 002000 FF20! MOV ACC,#offset
002001 8066
6 002002 FF20- MOV ACC,#dflag
002003 8064
module2.abs PAGE 1
15 002004 .text
16 .copy "module2.asm"
1 008066 offset .usect ".ebss",2
2 .copy globals.def
1 .global dflag
2 .global array
3 .global offset
3 002004 FF20- MOV ACC,#offset
002005 8066
4 002006 FF20! MOV ACC,#array
002007 8000