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
汇编 Thumb 或 Thumb-2 指令(UAL 语法)
.thumb
可以使用 .thumb 指令指示汇编器使用 Thumb(32 位)或 Thumb-2(16 位或 32 位)UAL 语法开始汇编 .thumb 指令之后的所有指令。汇编器会根据代码的语法结构确定指令是 16 位还是 32 位。
.thumb 指令会在将任何指令写入段之前执行隐式半字对齐,以确保所有 Thumb/Thumb-2 指令都是半字对齐的。这些指令还会重置已定义的所有局部标签。
在本示例中,汇编器汇编 16 位指令,开始汇编 32 位指令,并返回以汇编 16 位指令。
1 .global glob1, glob2
2 ****************************************************
3 ** 开始汇编 Thumb 指令。 **
4 ****************************************************
5 00000000 .thumb
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 LSLS r0, r0, #2
12 0000000a 3156 ADDS r1, #56h
13 0000000c 4778 BX pc
14 0000000e 46C0 NOP
15 ****************************************************
16 ** 切换到 ARM 模式以使用 **
17 ** 长乘法指令。 **
18 ****************************************************
19 00000010 .arm
20
21 00000010 E0845190 UMULL r5, r4, r0, r1
22 00000014 E28FE001 ADD lr, pc, #1
23 00000018 E12FFF1E BX lr
24 ****************************************************
25 ** 继续汇编 Thumb 指令。 **
26 ****************************************************
27 0000001c .thumb
28
29 0000001c 1A2D SUBS r5, r5, r0
30 0000001e D201 BCS $1
31 00000020 3C01 SUBS r4, #1
32 00000024 $1
33 00000024 00000000! glob1_a .word glob1
34 00000028 00000000! glob2_a .word glob2