好记性不如铅笔头

ARM, 操作系统, 编程

《RealView编译工具汇编器指南》摘录:数据定义指令

备注:

1 本部分文档摘录自ARM网站【 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ic/index.html 】,版权归属于ARM。

2 作者只摘录了部分内容,全面详细的内容清参考ARM网址。

7.3. 数据定义指令

7.3.4. SPACE 或 FILL

SPACE 指令保留一个用零填充的内存块。 % 是 SPACE 的同义词。
FILL 指令保留一个用指定值填充的内存块。

语法

{label} SPACE expr
{label} FILL expr{,value{,valuesize}}
其中:
label
    是一个可选的标签。
expr
    取值为要填充的字节数或零(请参阅数字表达式)。
value
    取值为要填充保留字节的值。value 是可选的,如果省略则为 0。value 在 NOINIT 区中必须为 0。
valuesize
    为 value 的大小(字节)。 它可以是 1、2 或 4。valuesize 是可选的,如果省略则为 1。

用法

使用 ALIGN 指令可对齐 SPACE 或 FILL 指令后的任何代码。 有关详细信息,请参阅ALIGN。
另请参阅:
    DCB
    DCD 和 DCDU
    DCDO
    DCW 和 DCWU

示例

7.3.5. DCB

DCB 指令可分配一个或多个字节的内存,并定义内存的运行时初值。 = 是 DCB 的同义词。

语法

{label} DCB expr{,expr}…
其中:
expr
    可以是:
        一个数值表达式,取值为 –128 到 255 之间的整数(请参阅数字表达式)。
        用引号括起来的字符串。 字符串的字符加载到内存的连续字节中。

用法

如果 DCB 后面有一个指令,使用 ALIGN 指令可确保该指令是对齐的。 有关详细信息,请参阅ALIGN。
另请参阅:
    DCD 和 DCDU
    DCQ 和 DCQU
    DCW 和 DCWU
    SPACE 或 FILL

示例EADWRITE
data1 SPACE 255 ; defines 255 bytes of zeroed store
data2 FILL 50,0xAB,1 ; defines 50 bytes containing 0xAB

与 C 语言字符串不同的是,ARM 汇编器字符串不是空终止的。 可以使用 DCB,按如下方式构造空终止的 C 字符串:
C_string   DCB  “C_string”,0

7.3.6. DCD 和 DCDU

DCD 指令可分配一个或多个字的内存,在四个字节的边界上对齐,并定义内存的运行时初值。
& 是 DCD 的同义词。
DCDU 与之相同,不过内存对齐是任意的。

语法

{label} DCD{U} expr{,expr}
其中:
expr
    可以是:
        一个数值表达式(请参阅数字表达式)。
        一个程序相对的表达式。

用法

必要时,DCD 可在定义的第一个字前最多插入三个填充字节,以实现四字节对齐。
如果不需要对齐,则可使用 DCDU。
另请参阅:
    DCB
    DCI
    DCW 和 DCWU
    DCQ 和 DCQU
    SPACE 或 FILL

示例

data1   DCD     1,5,20      ; Defines 3 words containing
                            ; decimal values 1, 5, and 20
data2   DCD     mem06 + 4   ; Defines 1 word containing 4 +
                            ; the address of the label mem06
        AREA    MyData, DATA, READWRITE
        DCB     255         ; Now misaligned ...
data3   DCDU    1,5,20      ; Defines 3 words containing
                            ; 1, 5 and 20, not word aligned

 

Leave a Reply

2 × 4 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据