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
条件汇编指令包括 .if/.elseif/.else/.endif 和 .loop/ .break/.endloop。它们可以互相嵌套,深度最多可达 32 级。条件代码块的格式为:
.if 明确定义的表达式 | |
[.elseif 明确定义的表达式] | |
[.else] | |
.endif |
.elseif 和 .else 指令在条件汇编中是可选的。.elseif 指令可在条件汇编代码块中多次使用。省略 .elseif 和 .else 时,如果 .if 表达式为 false (0),汇编器会继续汇编位于 .endif 指令之后的代码。请参阅 汇编条件代码块 了解有关 .if/ .elseif/.else/.endif 指令的更多信息。
.loop/.break/.endloop 指令可反复汇编一个代码块。可重复代码块的格式为:
.loop [明确定义的表达式] | |
[.break [明确定义的表达式]] | |
.endloop |
.loop 指令可选的明确定义的表达式 会评估循环记数(要执行的循环数)。如果忽略此表达式,循环记数默认为 1024 次,除非汇编器遇到 .break 指令,其表达式为 true(非零)。请参阅 重复汇编条件代码块 了解有关 .loop/.break/.endloop 指令的更多信息。
在重复汇编中 .break 指令及其表达式是可选的。如果表达式评估为 false,循环会继续。如果 .break 表达式评估为 true,或省略 .break 表达式,汇编器会中断循环。循环中断后,汇编器会继续处理位于 .endloop 指令之后的代码。如需更多信息,请参阅 节 5.8。
.loop/.break/.endloop 指令、嵌套条件汇编指令和条件汇编代码块中的内置替代符号函数展示了 .loop/.break/ .endloop 指令,正确嵌套的条件汇编指令,以及条件汇编代码块中使用的内置替代符号函数。
.asg 1,x
.loop
.break (x == 10) ; if x == 10, quit loop/break with expression
.eval x+1,x
.endloop
.asg 1,x
.loop
.if (x == 10) ; if x == 10, quit loop
.break (x == 10) ; force break
.endif
.eval x+1,x
.endloop
.fcnolist
*
*Double Add or Subtract
*
DBL .macro ABC, dsth, dstl, srch, srcl ; add or subtract double
.if $$symcmp(ABC,"+")
ADDS dstl, dstl, srcl ; add double
ADC dsth, dsth, srch
.elseif $$symcmp(ABC,"-")
SUBS dstl, dstl, srcl ; subtract double
SUBS dsth, dsth, srch
.else
.emsg "Incorrect Operator Parameter"
.endif
.endm
*Macro Call
DBL -, R4, R5, R6, R7