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
定义汇编时常量
symbol .set value
symbol .equ value
.set 和 .equ 指令将一个常量值等同于 .set/.equ 符号。之后,可以使用该符号代替汇编源代码中的值。这样可将常量和其他值等同于有意义的名称。 .set 和 .equ 指令是相同的,可以互换使用。
表达式中不能使用未定义的外部符号和之后会在模块中定义的符号。如果表达式可重定位,所指定的符号也是可重定位的。
表达式的值出现在列表的对象字段中。此值不属于实际目标代码,不会写入输出文件。
利用由 .set 或 .equ 定义的符号可通过 .def 或 .global 指令使之变得外部可见(请参阅 .global/.def/.ref 主题)。您可以通过这种方式定义全局绝对常量。
此示例展示了如何使用 .set 和 .equ 指定符号。
1 *****************************************************
2 ** Equate symbol AUX_R1 to register AR1 and use **
3 ** it instead of the register. **
4 **********************************************
5 00000001 AUX_R1 .set R1
6 00000000 E3A01056 MOV AUX_R1, #56h
7
8 *****************************************************
9 ** Set symbol index to an integer expression. **
10 ** and use it as an immediate operand. **
11 *****************************************************
12 00000035 INDEX .equ 100/2 +3
13 00000004 E2810035 ADD R0, AUX_R1, #INDEX
14
15 *****************************************************
16 ** Set symbol SYMTAB to a relocatable expression.**
17 ** and use it as a relocatable operand. **
18 *****************************************************
19 00000008 0000000A LABEL .word 10
20 00000009' SYMTAB .set LABEL + 1
21
22 *****************************************************
23 ** Set symbol NSYMS equal to the symbol INDEX **
24 ** INDEX and use it as you would INDEX. **
25 *****************************************************
26 00000035 NSYMS .set INDEX
27 0000000c 00000035 .word NSYMS