我正在尝试在汇编器中以固定大小的结构定义一些数据。我想声明一个固定数目的字节数据,用一个字符串初始化。在C中将是:
char my_string[32] = "hello";
它是32个字节,并在末尾填充了许多零。
汇编程序中相当于什么?我知道我可以手动计算字符串的长度,并声明必要的零字节数以填充到32,例如:
my_string:
  .asciz "hello"
  .zero 26
但是,如果该字符串是动态定义的(例如从外部定义或包含中),该怎么办?
我想我会为此使用带有本地标签的宏。例如:
    .macro padded_string string, max
1:
    .ascii "\string"
2:
    .iflt \max - (2b - 1b)
    .error "String too long"
    .endif
    .ifgt \max - (2b - 1b)
    .zero \max - (2b - 1b)
    .endif
    .endm
...这样使用:
my_string:
    padded_string "Hello world!", 16
(这具有类似于C的行为,如果字符串正好是max字符长,则不加终止符0。要确保终止字符串,只需将更.ascii改为即可.asciz。)