适用于 MicroBlaze 软核处理器的 mb-as
汇编程序支持的选项集与标准 GNU 编译器工具支持的选项集相同。它支持的汇编程序指令集与标准 GNU 汇编程序支持的指令集也相同。
mb-as
汇编程序支持 MicroBlaze 机器指令集(imm
指令除外)中的所有操作码。当使用的即时值较大时,mb-as
汇编程序可生成 imm
指令。汇编语言程序员从不需要使用 imm
指令来编写代码。如需了解有关 MicroBlaze 指令集的更多信息,请参阅MicroBlaze 处理器参考指南(UG081)。
mb-as
汇编语言需要所有 MicroBlaze 指令,且其中即时操作数指定为常量或标签。如果该指令需要 PC 相关操作数,那么 mb-as
汇编语言会按需计算该操作数并包含 imm 指令。
例如,branch immediate if equal (beqi
) 指令需要 PC 相关操作数。
汇编程序员应按如下方式使用该指令:
beqi r3, mytargetlabel
其中,mytargetlabel
是目标指令的标签。mb-as
汇编程序会按 mytargetlabel - PC
来计算指令的即时值。
如果此即时值大于 16 位,那么 mb-as
汇编程序会自动插入一条 imm 指令。如果在编译时 mytargetlabel
的值未知,那么 mb-as
汇编程序始终会插入一条 imm
指令。连接器的 relax 选项可用于移除任何不必要的 imm 指令。
同样,如果指令需要较大的常量作为操作数,那么汇编语言程序员应按原样使用此操作数,即,不使用 imm
指令。例如,以下代码会向寄存器 r3 的内容添加常量 200,000,并将结果存储在寄存器 r4 中:
addi r4, r3, 200000
mb-as
汇编程序可以识别出此操作数需要一条 imm 指令,并自动插入该指令。
除了标准 MicroBlaze 指令集外,mb-as
汇编程序还支持某些伪操作码,以简化汇编任务。下表列出了受支持的伪操作码。
伪操作码 | 解释 |
---|---|
nop | 无操作。替换为以下指令:or R0, R0, R0 |
la Rd, Ra, Imm | 替换为以下指令:addik Rd, Ra, imm; = Rd = Ra + Imm; |
not Rd, Ra | 替换为以下指令:xori Rd, Ra, -1 |
neg Rd, Ra | 替换为以下指令:rsub Rd, Ra, R0 |
sub Rd, Ra, Rb | 替换为以下指令:rsub Rd, Rb, Ra |