• (二)汇编语句组成


    一个完整的 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(注释): 常用方式,“#” 开始到当前行结束。
  • 相关阅读:
    【编程实践】使用pcl提取给定点云的三维边界点
    Linux--进程间通信之命名管道
    python内置模块typing 类型提示
    前端常用请求方法极简示范
    VSCode 如何设置背景图片
    节点电价形成机制
    Java语言高级-02继承与多态-第6节权限修饰符
    ceval 数据集明文位置编码嵌入
    zabbix配置95计费
    【pytorch学习笔记】01-安装与基础使用
  • 原文地址:https://blog.csdn.net/heyangge/article/details/134507144