ZHCU947E June 2015 – January 2023
分配替代符号
.asg "character string",substitution symbol
.define "character string",substitution symbol
.eval expression,substitution symbol
.asg 和 .define 指令用于将字符串分配给替代符号。替代符号存储在替代符号表中。.asg 指令的使用方法与 .set 指令有诸多相同之处,区别在于 .set 会为符号分配一个常量值(不能重新定义),而 .asg 会为替代符号分配一个字符串(可重新定义)。
.define 指令的运行方式与 .asg 指令相同,但 .define 不允许创建与寄存器符号或助记符同名的替代符号。它不会在汇编器中创建新的符号命名空间,而是使用现有的替代符号命名空间。.define 指令用于在转换 C/C++ 头文件时防止汇编环境遭损坏。有关在汇编源代码中使用 C/C++ 头文件的更多信息,请参见GUID-413E9C31-DDE9-4735-87A6-20C56CBC9D51.html#GUID-413E9C31-DDE9-4735-87A6-20C56CBC9D51。
.eval 指令对存储在替代符号表中的替代符号执行算术运算。该指令会计算 表达式 并将结果的字符串值分配给替代符号。.eval 指令作为 .loop/.endloop 块中的计数器特别有用。
有关如何关闭替代符号的信息,请参阅 .unasg/.undefine 主题。
此示例演示了如何使用 .asg 和 .eval。
1 .sslist ; show expanded substitution symbols
2
3 .asg *+B14(100), GLOB100
4 .asg *+B15(4), ARG0
5
6 00000000 003B22E4 LDW GLOB100,A0
# LDW *+B14(100),A0
7 00000004 00BC22E4 LDW ARG0,A1
# LDW *+B15(4),A1
8 00000008 00006000 NOP 4
9 0000000c 010401E0 ADD A0,A1,A2
10
11 .asg 0,x
12 .loop 5
13 .word 100*x
14 .eval x+1,x
15 .endloop
1 00000010 00000000 .word 100*x
# .word 100*0
1 .eval x+1,x
# .eval 0+1,x
1 00000014 00000064 .word 100*x
# .word 100*1
1 .eval x+1,x
# .eval 1+1,x
1 00000018 000000C8 .word 100*x
# .word 100*2
1 .eval x+1,x
# .eval 2+1,x
1 0000001c 0000012C .word 100*x
# .word 100*3
1 .eval x+1,x
# .eval 3+1,x
1 00000020 00000190 .word 100*x
# .word 100*4
1 .eval x+1,x
# .eval 4+1,x