ZHCU947E June 2015 – January 2023
标记函数边界
symbol .asmfunc [stack_usage(num)]
.endasmfunc
.asmfunc 和 .endasmfunc 指令用于标记函数边界。这些指令与编译器 -g 选项 (--symdebug:dwarf) 一同使用,以允许以与 C/C++ 函数相同的方式调试汇编代码段。
您不应使用由编译器生成的相同指令(参见GUID-9E4B5608-CAAA-4AA1-84D8-33DC839540B9.html#GUID-9E4B5608-CAAA-4AA1-84D8-33DC839540B9)来完成汇编调试;这些指令只能由编译器用于为 C/C++ 源文件生成符号调试信息。
符号 是必须显示在标签字段中的标签。
.asmfunc 指令有一个可选参数 stack_usage,它表示该函数最多可以使用 num 个字节。
未包含在 .asmfunc 和 .endasmfunc 指令对中的连续范围汇编代码被赋予以下格式的默认名称:
$ filename: beginning source line: ending source line$
此示例为 userfunc 段生成调试信息。
1 00000000 .sect ".text"
2 .global userfunc
3 .global _printf
4
5 userfunc: .asmfunc stack_usage(16)
6 00000000 00000010! CALL .S1 _printf
7 00000004 01BC94F6 STW .D2T2 B3,*B15--(16)
8 00000008 01800E2A' MVKL .S2 RL0,B3
9 0000000c 01800028+ MVKL .S1 SL1+0,A3
10 00000010 01800068+ MVKH .S1 SL1+0,A3
11
12 00000014 01BC22F5 STW .D2T1 A3,*+B15(4)
13 00000018 0180006A' || MVKH .S2 RL0,B3
14
15 0000001c 01BC92E6 RL0: LDW .D2T2 *++B15(16),B3
16 00000020 020008C0 ZERO .D1 A4
17 00000024 00004000 NOP 3
18 00000028 000C0362 RET .S2 B3
19 0000002c 00008000 NOP 5
20 .endasmfunc
21
22 00000000 .sect ".const"
23 00000000 00000048 SL1: .string "Hello World!",10,0
00000001 00000065
00000002 0000006C
00000003 0000006C
00000004 0000006F
00000005 00000020
00000006 00000057
00000007 0000006F
00000008 00000072
00000009 0000006C
0000000a 00000064
0000000b 00000021
0000000c 0000000A
0000000d 00000000