(二)汇编语句组成

一个完整的 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(注释): 常用方式,"#" 开始到当前行结束。
相关推荐
Daydreamer1010 小时前
学习笔记——PLCT汪辰:开发RISC-V上的操作系统(持续更新)
笔记·学习·risc-v
染指111016 小时前
45.第二阶段x86游戏实战2-hook监控实时抓取游戏lua
汇编·c++·windows·反游戏外挂·游戏逆向
ARM&开发(Haidong)18 小时前
ARM 汇编指令
汇编
CYRUS STUDIO1 天前
Android 下内联汇编,Android Studio 汇编开发
android·汇编·arm开发·android studio·arm
YHPsophie2 天前
CSM32RV20:RISC-V核的低功耗MCU芯片,常用在智能门锁上
单片机·嵌入式硬件·risc-v·智能门锁·低功耗mcu芯片
我不是程序猿儿2 天前
【数据结构】汇编 、机器语言 高级语言 简析。
汇编·机器语言·高级语言
zhuqiyua3 天前
c文件的编译,汇编,基础知识
c语言·汇编·算法
CYRUS STUDIO4 天前
Android下的系统调用 (syscall),内联汇编syscall
android·linux·汇编·arm开发·arm·内联汇编
linhhanpy4 天前
自制操作系统(九、操作系统完整实现)
c语言·开发语言·汇编·c++·操作系统·自制操作系统
CYRUS STUDIO6 天前
ARM64汇编寻址、汇编指令、指令编码方式
android·汇编·arm开发·arm·arm64