(二)汇编语句组成

一个完整的 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(注释): 常用方式,"#" 开始到当前行结束。
相关推荐
水饺编程8 小时前
AT&T 汇编语言学习笔记开篇语
c语言·汇编·c++
iCxhust11 小时前
8088单板机VScode集成开发环境使用方法二(汇编版)
汇编·单片机·微机原理·8088单板机
hongmai66688811 小时前
GK7205V300芯片深度解析:H.265低功耗视觉主控,助力安防监控高效选型
arm开发·嵌入式硬件·物联网·智能家居·h.265·risc-v
·薯条大王1 天前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
2301_805962932 天前
在昉星光2(RISC-V)上构建每日短视频自动生成器
音视频·risc-v
txg6662 天前
VULOC:基于汇编切片的漏洞定位框架,精准锁定二进制中的危险代码
汇编·人工智能·深度学习·安全·网络安全
hongmai6668883 天前
聊聊ESP32-C3-WROOM-02-N8这颗8MB Flash的RISC-V模组
笔记·嵌入式硬件·物联网·智能路由器·risc-v
sunburn-3 天前
Java 队列全面详解:从入门到面试实战
java·开发语言·汇编·ide·idea
hongmai6668883 天前
耐高温小钢炮:ESP32-C3-MINI-1U-H4模组选型分享
笔记·单片机·嵌入式硬件·物联网·risc-v
国科安芯6 天前
卫星星务计算机数据管理中SEU容错机制的技术实现研究——以AS32S601存储器ECC架构为例
网络·单片机·算法·fpga开发·架构·云计算·risc-v