ZHCUAV7Z september 1995 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
此示例使用三个源文件:module1.asm 和 module2.asm,这两个文件都包含 globals.def。
module1.asm
.text
.bss dflag, 1
.bss array, 100
dflag_a .word dflag
array_a .word array
offst_a .word offst
.copy globals.def
LDR r4, array_a
LDR r5, offst_a
LDR r3, dflag_a
LDR r0, [r4, r5]
STR r0, [r3]
module2.asm
.text
.bss offst, 1
offst_a .word offst
.copy globals.def
LDR r4, offst_a
STR r0, [r4]
globals.def
.global array
.global offst
.global dflag
以下步骤会为 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
{
P_MEM : org = 0x00000000 len = 0x00001000
D_MEM : org = 0x00001000 len = 0x00001000
}
SECTIONS
{
.data: >D_MEM
.text: >P_MEM
.bss: >D_MEM
}
调用链接器:
此命令会创建一个名为 bttest.out 的可执行目标文件;使用此文件作为绝对列表器的输入。 |
|
步骤 3: | 下面,调用绝对列表器:
此命令会创建名为 module1.abs 和 module2.abs 的两个文件: module1.abs: |
.nolist
array .setsym 000001001h
dflag .setsym 000001000h
offst .setsym 000001068h
.data .setsym 000001000h
edata .setsym 000001000h
.text .setsym 000000000h
etext .setsym 00000002ch
.bss .setsym 000001000h
end .setsym 00000106ch
.setsect ".text",000000000h
.setsect ".data",000001000h
.setsect ".bss",000001000h
.list
.text
.copy "module1.asm"
module2.abs: |
.nolist
array .setsym 000001001h
dflag .setsym 000001000h
offst .setsym 000001068h
.data .setsym 000001000h
edata .setsym 000001000h
.text .setsym 000000000h
etext .setsym 00000002ch
.bss .setsym 000001000h
end .setsym 00000106ch
.setsect ".text",000000020h
.setsect ".data",000001000h
.setsect ".bss",000001068h
.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 00000000 .text
16 .copy "module1.asm"
A 1 00000000 .text
A 2 00001000 .bss dflag, 1
A 3 00001001 .bss array, 100
A 4 00000000 00001000- dflag_a .word dflag
A 5 00000004 00001001- array_a .word array
A 6 00000008 00001068! offst_a .word offst
A 7 .copy globals.def
B 1 .global array
B 2 .global offst
B 3 .global dflag
A 8
A 9 0000000c E51F4010 LDR r4, array_a
A 10 00000010 E51F5010 LDR r5, offst_a
A 11 00000014 E51F301C LDR r3, dflag_a
A 12 00000018 E7940005 LDR r0, [r4, r5]
A 13 0000001c E5830000 STR r0, [r3]
No Errors, No Warnings
module2.abs PAGE 1
15 00000020 .text
16 .copy "module2.asm"
A 1 00000020 .text
A 2 00001068 .bss offst, 1
A 3 00000020 00001068- offst_a .word offst
A 4 .copy globals.def
B 1 .global array
B 2 .global offst
B 3 .global dflag
A 5
A 6 00000024 E51F400C LDR r4, offst_a
A 7 00000028 E5840000 STR r0, [r4]
No Errors, No Warnings