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
在宏中,可通过使用下标和强制的替代运算符(符号和下标周围的冒号)来访问替代符号的单个字符(子字符串)。可通过两种方式访问子字符串:
以下示例显示了带下标的替代符号函数。在第一个示例中,带下标的替代符号重新定义了 ADD 指令,以便它能够处理短立即值。在第二个示例中,带下标的替代符号用于查找从字符串 strg2 中的 start 位置开始的子字符串 strg1。子字符串 strg1 的位置被分配给替代符号 pos。
ADDX .macro dst, imm
.var TMP
.asg :imm(1):, TMP
.if $$symcmp(TMP,"#") = 0
ADD dst, dst, imm
.else
.emsg "Bad Macro Parameter"
.endif
.endm
ADDX R9, #100 ; macro call
ADDX R9, R8 ; macro call
substr .macro start,strg1,strg2,pos
.var LEN1,LEN2,I,TMP
.if $$symlen(start) = 0
.eval 1,start
.endif
.eval 0,pos
.eval 1,i
.eval $$symlen(strg1),LEN1
.eval $$symlen(strg2),LEN2
.loop
.break I = (LEN2 - LEN1 + 1)
.asg ":strg2(I,LEN1):",TMP
.eval i,pos
.break
.else
.eval I + 1,i
.endif
.endloop
.endm
.asg 0,pos
.asg "ar1 ar2 ar3 ar4",regs
substr 1,"ar2",regs,pos
.word pos