ZHCU875Z August 2001 – October 2023 SM320F28335-EP
通常情况下,引用符号时会引用其运行时地址。但在运行时可能需要引用加载时地址。具体来说,将段从其加载地址复制到其运行地址的代码必须能够访问加载地址。.label 指令可定义一个引用段的加载地址的特殊符号。因此,如果正常符号相对于运行地址进行重定位,.label 符号也会相对于加载地址进行重定位。请参阅创建加载时地址标签,了解有关 .label 指令的更多信息。
#STDZ0755089和#STDZ0754221展示了 .label 指令的用法:将段从 SLOW_MEM 中的加载地址复制到 FAST_MEM 中的运行地址。图 8-4演示了#STDZ0755089的运行时执行。
如果使用表操作符,则不需要 .label 指令。请参阅节 8.8.4.1。
;---------------------------------------------------------
; define a section to be copied from SLOW_MEM to FAST_MEM
;---------------------------------------------------------
.sect ".fir"
.label fir_src ; load address of section
fir: ; run address of section
<code here> ; code for the section
.label fir_end ; load address of section end
;---------------------------------------------------------
; copy .fir section from SLOW_MEM to FAST_MEM
;---------------------------------------------------------
.text
MOV XAR6, fir_src
MOV XAR7, #fir
RPT #(fir_end - fir_src - 1)
k PWRITE *XAR7, *XAR6++
;---------------------------------------------------------
; jump to section, now in FAST_MEM
;---------------------------------------------------------
B fir
/*******************************************************************/
/* FIR 示例的部分链接器命令文件 */
/*******************************************************************/
MEMORY
{
PAGE 0 : FAST_MEM : origin = 0x00000800, length = 0x00002400
PAGE 0 : PROG : origin = 0x00002C00, length = 0x0000D200
PAGE 1 : SLOW_MEM : origin = 0x00000800, length = 0x0000F800
}
SECTIONS
{
.text: load = PROG PAGE 0
.fir: load = SLOW_MEM PAGE 1, run = FAST_MEM PAGE 0
}
有关在 C/C++ 代码中引用链接器符号的信息,请参阅节 8.6。