ZHCU947E June 2015 – January 2023
由于在将诸如 \n 和 \t 之类的 C 字符串转义符用于 C/C++ 程序中的字符串常量之前,这些符号不会转换为十六进制字符 0x0A 和 0x09,因此其值为字符串的 C 宏无法在程序集替换符号中按预期表示。例如:
#define MSG "\tHI\n"
becomes, in assembly:
.define """\tHI\n""",MSG ; 6 quoted characters! not 5!
用在 C 字符串上下文中时,您希望将该语句转换为 5 个字符(制表符、H、I、换行符、NULL),但 .string 汇编器指令不知道如何执行 C 转义转换。
您可以像使用 C/C++ 一样,使用 .cstring 指令正确处理转义序列和 NULL 终止。将上述符号 MSG 与 .cstring 指令一同使用会导致分配 5 个字符的存储空间,这与在 C/C++ 强上下文中使用的结果相同。(有关 .cstring 指令语法,请参阅GUID-E222936C-3552-49DC-AE64-3FE817B20743.html#GUID-E222936C-3552-49DC-AE64-3FE817B20743。)