ZHCU875Z August 2001 – October 2023 SM320F28335-EP
条件汇编指令包括 .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.7。
.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
MACK3 .macrosrc1, src2, sum, k
; sum = sum + k * (src1 * src2)
.if k = 0
MOV T,#src1
MPY ACC,T,#src2
MOV DP,#sum
ADD @sum,AL
.else
MOV T,#src1
MPY ACC,T,#k
MOV T,AL
MPY ACC,T,#src2
MOV DP,#sum
ADD @sum,AL
.endif
.endm
.global A0, A1, A2
MACK3 A0,A1,A2,0
MACK3 A0,A1,A2,100