ZHCUAQ1F july 2015 – april 2023
定义过程
label .proc [variable1 [, variable2 , …]]
.endproc [register1 [, register2 , …]]
使用 .proc/.endproc 指令对来分隔您希望汇编优化器优化的代码段。该代码段称为过程。在段的开头使用 .proc,在段的末尾使用 .endproc。通过这种方法,您可以设置要由编译器优化的未调度汇编指令的段。这些指令必须成对使用;如果没有相应的 .endproc,则不要使用 .proc。使用 .proc 指令指定标签。线性汇编文件中可以有多个过程。
使用 .proc 指令中的可选 variable 参数指示哪些寄存器处于 live in 状态,并使用 .endproc 指令的可选寄存器参数指示每个过程中哪些寄存器处于 live out 状态。variable 可以是实际寄存器或符号名称。例如:
.PROC x, A5, y, B7
...
.ENDPROC y
如果值在过程之前已被定义并用作过程的输入,则它为 live in。如果值是在过程之前或过程中定义的,并且用作过程的输出,则它为 live out。如果您没有使用 .endproc 指令指定任何寄存器,则假定没有寄存器处于 live out 状态。
只有过程中的代码会被优化。汇编优化器会将过程之外的任何代码复制到输出文件,而不会对其进行修改。
请参阅节 5.4.1,了解 .proc 区域中不能出现的指令类型列表。
下面是使用 .proc 和 .endproc 的块移动示例:
move .proc A4, B4, B0
.no_mdep
loop:
LDW *B4++, A1
MV A1, B1
STW B1, *A4++
ADD -4, B0, B0
[B0] B loop
.endproc