ZHCUAV7Z september 1995 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , C346BA02 , C348A01 , CS241C01-Q1 , CS241C05-Q1 , CS246C01-Q1 , CS348C02-Q1 , OMAP-L132 , OMAP-L137 , OMAP-L138 , S470AV336LYSQRB , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
汇编 32 位指令
.state32
.arm
默认情况下,汇编器开始将文件中的所有指令汇编为 32 位指令。在使用 -mt 汇编器选项或 .state16 指令汇编 16 位指令时,可以使用 .state32 或 .arm 指令指示汇编器开始将 .state32/.arm 指令之后的所有指令汇编为 32 位指令。
在编写汇编代码时,.arg 指令用于指定 ARM UAL 语法。.state32 指令和 .arm 指令是等效的,因为 UAL 语法是向后兼容的。
这些指令会在将任何指令写入相应的段之前执行隐式字对齐,以确保所有 32 位指令都是字对齐的。这些指令还会重置已定义的所有局部标签。
在本示例中,汇编器汇编 32 位指令,开始汇编 16 位指令,并返回以汇编 32 位指令。
1 .global globs, filter
2 ****************************************************
3 ** 开始汇编 32 位指令。 **
4 ****************************************************
5 00000000 .state32
6 00000000 E28F4001 ADD r4, pc, #1
7 00000004 E12FFF14 BX r4
8 ****************************************************
9 ** 切换到 16 位指令以占用 **
10 ** 更少的代码空间。 **
11 ****************************************************
12 00000008 .state16
13 00000008 2200 MOV r2, #0
14 0000000a 2300 MOV r3, #0
15 0000000c 4C0B LDR r4, globs_a
16 0000000e 2500 MOV r5, #0
17 00000010 2600 MOV r6, #0
18 00000012 2700 MOV r7, #0
19 00000014 4690 MOV r8, r2
20 00000016 4691 MOV r9, r2
21 00000018 4692 MOV r10, r2
22 0000001a 4693 MOV r11, r2
23 0000001c 4694 MOV r12, r2
24 0000001e 4695 MOV r13, r2
25 00000020 4778 BX pc
26 00000022 46C0 NOP
27 ****************************************************
28 ** 继续汇编 32 位指令。 **
29 ****************************************************
30 00000024 .state32
31 00000024 E4940004 LDR r0, [r4], #4
32 00000028 E5941000 LDR r1, [r4]
33 0000002c EBFFFFF3! BL filter
34 00000030 E1500001 CMP r0, r1
35 00000034 30804005 ADDCC r4, r0, r5
36 00000038 20464001 SUBCS r4, r6, r1
37 0000003c 00000000! globs_a .word globs