Microsoft ARM汇编器的部分Directives参考
作者:陆麟
转载请征得作者同意.
2003.5.16
下面列出的是MS ARM汇编器的数据初始化部分的directive. 版权是MS的. 翻译是我干的. 方便一下参考.
Directive Syntax Description
DCB label DCB expression-list 定义1个或多个字节,在THUNB代码中使用则需要DATA directive.
相当于 = directive.
= label = expression-list 相当于DCB
DCD label DCD expression-list 定义1个或多个字, 相当于 & directive.
& label & expression-list 相当于DCD
DCDO label DCDO expression-list 定义1个或多个字, 4字节对齐. 作为从sb(r9)的偏移.
DCDU label DCDU expression-list 定义1个或多个字, 不对齐. 在代码段中使用时需要用ALIGN来对齐下一代码行.
DCFD {label} DCFD fp-constant{ 定义DOUBOULE类型的浮点数. 第一个数分配时4字节对齐.
,fp-constant}
DCFDU {label} DCFD fp-constant{ 定义DOUBOULE类型的浮点数. 不对齐.
,fp-constant}
DCFS {label} DCFS fp-constant{ 定义单精度类型的浮点数. 第一个数分配时4字节对齐.
,fp-constant}
DCFSU {label} DCFS fp-constant{ 定义单精度类型的浮点数. 不对齐.
,fp-constant}
DCI label DCI expression-list 在ARM代码中, 定义1个或者更多的字. 4字节对齐. 在THUNB代码中,定义1个或更多的半字.
DCW label DCW expression-list 定义1个或多个半字.
DCWU label DCW expression-list 定义1个或者多个半字. 不对齐. 在代码中使用注意:在后面的代码前加ALIGN.
确保对齐.
FIELD label FIELD expression 保留存储空间. 每次使用, 保留的空间就增大expression指定的值.
此directive需要搭配MAP directive使用.
# label # expression 同FIELD directive
MAP MAP expression{,base-register} 在expression指定地方设定一片区域的存储MAP.同^
directive
^ ^ expression{,base-register} 同MAP directive.
SPACE label SPACE numeric-expression 保留空间numberic-expression指定大小的空间.
以0初始化.同 % directive.
% label % numeric-expression 同 SPACE directive.
关于MAP,FIELD,SPACE的实例:(实例来源于WINDOWS CE OS ARM初始化部分源代码)
^ 0xFFFD0000
FirstPT # 0x4000
PageTables # 0x4000
# 0x8000
# 0x10000 ; not mapped
ExVector # 0x1000
# 0x1400 ; not mapped
# 0x0400 ; 1K interrupt stack
IntStack # 0x2000 ; not mapped (ffff2800)
# 0x0100 ; not mapped (FIQ stack) (ffff4800)
# 0x0700 ; 2K-256 abort stack (ffff4900)
AbortStack # 0x1800 ; not mapped (ffff5000)
# 0x0100 ; not mapped (FIQ stack) (ffff6800)
FIQStack # 0xC000-0x6900 ; not mapped (ffff6900)
KDBase # 0x07E0 ; 2K-32 kernel stack
KStack # 0x0020 ; temporary register save area
KData # 0x400 ; kernel data area
;-----------------------------------------------------------------------
; .KDATA area is used to reserve physical memory for the above structures.
AREA |.KDATA|,DATA,NOINIT
EXPORT ExceptionVectors
KDataArea
PTs % 0x4000 ; space for first-level page table
% 0x4000 ; space for 2nd-level page tables
ExceptionVectors
% 0x0400 ; space for exception vectors
% 0x0400 ; space for interrupt stack
% 0x0100 ; space for FIQ stack
% 0x0700 ; space for Abort stack
KPage % 0x0c00 ; space for kernel stack & KDataStruct
HighPT % 0x0400 ; space for 2nd level page table to map 0xFFF00000
KDEnd % 0