(二)汇编语句组成

一个完整的 RISC-V 汇编程序有多条 语句(statement) 组成。

一条典型的 RISC-V 汇编 语句 由 3 部分组成:

1.标签

  • List item label(标签): 标签是标识程序位置的记号。通常定义一个名称然后加上":"后缀。这些程序位置可以被其他汇编指或指示符令引用。
    下面的汇编程序包含两个标签,第1行的x:和第4行的sum10:。标签x:处包含了一个变量,通过指示符.word 10表示。sum10:标识了sum10例程的第一条指令位置,也即是函数例程的入口。同时,这个例子中第5行指令lw引用了变量x。

2.operation(操作)

  • instruction(指令): 直接对应二进制机器指令的字符串
  • pseudo-instruction(伪指令): 为了提高编写代码的效率,可以用一条伪指令指示汇编器产生多条实际的指令(instructions)。
  • directive(指示/伪操作): 通过类似指令的形式(以"."开头),通知汇编器如何控制代码的产生等,不对应具体的指令。
  • **macro:**采用 .macro/.endm 自定义的宏

2.1 .global 全局的符号

.global symbol_name或者.globl symbol_name

.global和.globl伪操作用于定义一个全局的符号,使得链接器能够全局识别它,即一个程序文件中定义的符号能够被所有其他程序文件可见。

通过标签创建或者通过.set和.equ创建的符号会作为本地符号被保存到符号表内。通过.globl指令则可以将这些符号转为全局符号。例如下面的代码,_start和max_value被转换成了全局符号。意味着_start、max_value可以在其它文件使用。

.local 局部符号

.local symbol_name

.local伪操作用于定义局部符号,使得此符号不能够被其他程序文件可见。

.weak 弱属性

.weak symbol_name

在汇编程序中,符号的默认属性为强(strong),.weak伪操作则用于设置符号的属性为弱(weak),如果此符号之前没有定义过,则同时创建此符号并定义其属性为weak。

如果符号的属性为weak,那么它无需定义具体的内容。在链接的过程中,另外一个属性为strong的同名符号可以将此weak符号的内容强制覆盖。利用此特性,.weak伪操作常用于预先预留一个空符号,使得其能够通过汇编器语法检查,但是在后续的程序中定义符号的真正实体,并且在链接阶段将空符号覆盖并链接。

.section 排到指顶段

.section name [, subsection]

.section伪操作指明将接下来的代码汇编链接到名为name的段(Section)当中,还可以指定可选的子段(Subsection)。常见的段如.text、.data、.rodata、.bss:

".section .text"伪操作将接下来的代码汇编链接到.text段。

".section .data"伪操作将接下来的代码汇编链接到.data段。

".section .rodata"伪操作将接下来的代码汇编链接到.rodata段。

".section .bss"伪操作将接下来的代码汇编链接到.bss段。

.macro 将汇编代码定义成一个宏

.macro和.endm

.macro和.emdm伪操作用于将一串汇编代码定义成为一个宏。

".macro name arg1 [, argn]"用于定义名为name的宏,并且可以传入若干由分号分隔的参数。

".endm"用于结束宏定义。

.align 对齐代码

.align integer

.align伪操作用于将当前PC地址推进到"2的integer次方个字节"对齐的位置。譬如".align 3"即表示将当前PC地址推进到8个字节对齐的位置处。

.org 规定程序的起始地址


意味着0x80地址处的指令为 j reset_handler

3. comment(注释)

  • comment(注释): 常用方式,"#" 开始到当前行结束。
相关推荐
武文斌775 小时前
ARM工作模式、汇编学习
汇编·嵌入式硬件·学习·arm
mysla9 小时前
嵌入式学习day45-硬件—汇编
汇编·学习
咕咚.萌西10 小时前
RISC-V体系架构
嵌入式硬件·架构·risc-v
咕咚.萌西14 小时前
RISC-V开发环境搭建
linux·硬件架构·risc-v
DebugKitty14 小时前
硬件开发2-汇编2(ARMv7-A)
汇编·bx·stmdb
Aczone2815 小时前
硬件(六)arm指令
开发语言·汇编·arm开发·嵌入式硬件·算法
Skylar_.1 天前
嵌入式 - ARM(2)汇编
汇编·arm开发
10岁的博客3 天前
深入解析汇编语言的奥秘
汇编
OpenAnolis小助手6 天前
睿思芯科正式加入龙蜥社区,携手共建 RISC-V 服务器生态新标杆
操作系统·龙蜥社区·risc-v·龙蜥生态
阿发君13 天前
ARMCC和gcc汇编文件互相转换的高效方法
汇编