RISC-V (二)汇编语言编程

开篇

        riscv编译器安装参考:在Ubuntu上搭建RiscV交叉编译环境_ubuntu下交叉编译riscv程序的ide环境-CSDN博客

        示例:

$ riscv64-unknown-linux-gnu-gcc -static -o hello.o hello.c
$ qemu-riscv64 hello.o
hello world!

简介 

        汇编语言是一种“低级”语言。

        汇编语言的缺点:

         -难度

        -难写

        -难移植

        汇编语言的优点:

        -灵活

        -强大

        汇编语言的应用场景

        -需要直接访问底层硬件的地方

        -需要对性能执行极致优化的地方

汇编语言语法介绍(GNU版本)

基本组成

        汇编文件一般后缀为.S或.s,.S包含了预处理的语句,.s就是纯粹的汇编语句。

        一个完整的RISC-V汇编程序有多条语句(statement)组成。一条典型的RISC-V汇编语言由3部分组成:

[label:] [operation] [comment]

        打方括号表示可选。

        -label表示一个标号,必须以":"结尾。label相当于一个地址,给这个地址起了个名字。是这条指令存放在内存的地址。

        -operation可以由以下多种类型:

                -instruction(指令):直接对应二进制机器指令的字符串

                -preudo-instruction(伪指令):为了提高编写代码的效率,可以用一条伪指令指示汇编器产生多条实际的指令(instruction)。(要在汇编器的手册里查看定义)

                -directive(指示/伪操作):通过类似指令的形式(以“.”开头),通知汇编器如何控制代码的产生等,不对应具体的指令。属于汇编器自己定义的一些语法。(要在汇编器的手册里查看定义)

                -macro:采用.macro/.endm自定义的宏

        例子:


.macro do_nothing      #directive
        nop            #preudo-instruction
        nop            #preudo-instruction
.endm

    .text              #directive  告诉大家生成的指令要放到text的section中
    .global _start     #directive  _start是个全局变量,外部可见,有点像extern


_start:                 #label
    li x6, 5            #preudo-instruction
    li x7, 4            #preudo-instruction
    add x5, x6, x7      #instruction
    do_nothing          #calling macro


    .end                #End of file

RISC-V汇编指令操作对象

        寄存器:

        -32个通用寄存器,x0~x31;

        -在RISC-V中,Hart在执行算术逻辑运算时所操作的数据必须直接来自寄存器

        内存:

        -Hart可以执行在寄存器和内存之间的数据读写操作;

        -读写操作使用字节(Byte)为基本单位进行寻址;

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玟林禹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值