MicroBlaze 汇编程序 - 2023.2 简体中文

Vitis 统一软件平台文档 嵌入式软件开发 (UG1400)

Document ID
UG1400
Release Date
2023-12-13
Version
2023.2 简体中文

适用于 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 汇编程序还支持某些伪操作码,以简化汇编任务。下表列出了受支持的伪操作码。

表 1. GNU 汇编程序支持的伪操作码
伪操作码 解释
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