ZHCUAV7Z september 1995 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
汇编 16 位指令(非 UAL 语法)
.state16
默认情况下,汇编器开始将文件中的所有指令汇编为 32 位指令。使用 .state16 指令指示汇编器从 16 位指令的位置开始汇编所有指令。该指令和 .state32 指令可实现在非 UAL 语法的两种汇编模式下进行切换。如果需要将整个文件汇编为 16 位指令以用于 V6 和更早的架构,可使用 −mt 汇编器选项,指示汇编器开始汇编过程,将所有指令汇编为 16 位指令。
.state16 指令会在将任何指令写入相应的段之前执行隐式半字对齐,以确保所有 16 位指令都是半字对齐的。.state16 指令还会重置已定义的所有局部标签。
在本示例中,汇编器汇编 16 位指令,开始汇编 32 位指令,并返回以汇编 16 位指令。
1 .global glob1, glob2
2 ****************************************************
3 ** 开始汇编 16 位指令。 **
4 ****************************************************
5 00000000 .state16
6
7 00000000 4808 LDR r0, glob1_a
8 00000002 4909 LDR r1, glob2_a
9 00000004 6800 LDR r0, [r0]
10 00000006 6809 LDR r1, [r1]
11 00000008 0080 LSL r0, r0, #2
12 0000000a 3156 ADD r1, #56h
13 0000000c 4778 BX pc
14 0000000e 46C0 NOP
15 ****************************************************
16 ** 切换到 32 位指令以使用 **
17 ** 32 位状态长乘法指令。 **
18 ****************************************************
19 00000010 .state32
20
21 00000010 E0845190 UMULL r5, r4, r0, r1
22 00000014 E28FE001 ADD lr, pc, #1
23 00000018 E12FFF1E BX lr
24 ****************************************************
25 ** 继续汇编 16 位指令。 **
26 ****************************************************
27 0000001c .state16
28
29 0000001c 1A2D SUB r5, r5, r0
30 0000001e D200 BCS $1
31 00000020 3C01 SUB r4, #1
32 00000022 $1
33 00000024 00000000! glob1_a .word glob1
34 00000028 00000000! glob2_a .word glob2