[笔记二] 学习开发一个RISC-V上的操作系统

本文详细介绍了如何在RISC-V架构上学习开发操作系统,包括汇编语言的基础概念、指令操作对象、算术、逻辑、移位运算、内存访问、条件分支、无条件跳转、函数调用约定以及C与汇编的混合编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

[笔记二] 学习开发一个RISC-V上的操作系统

资料来源

B站视频链接
RISC-V 开放架构设计之道

RISC-V 汇编语言

  • 汇编语言(Assembly Language)是一种"低级"语言
  • 汇编语言的缺点:难读、难写、难移植
  • 汇编语言的优点:灵活、强大
  • 汇编语言的应用场景
    • 需要直接访问底层硬件的地方
    • 需要对性能执行极致优化的地方

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

  • 一个完整的 RISC-V 汇编程序有多条语句(statement)组成
  • 一条典型的 RISC-V 汇编语句由 3 部分组成:
    • [label:] [operation] [comment]
    • label(标号):GNU汇编中,任何以冒号结尾的标识符都被认为是一个标号
    • operation可以有以下多种类型:
      • instruction(指令):直接对应二进制机器指令的字符串
      • pseudo-instruction(伪指令):为了提高编写代码的效率,可以用一条伪指令指示汇编器产生多条实际的指令
      • directive(指示/伪操作):.通过类似指令的形式(以"."开头),通知汇编器如何控制代码的产生等,不对应具体的指令
      • macro:采用.macro/.endn自定义宏
    • comment(注释):常用形式,"#"开始到当前行结束

RISC-V 汇编指令操作对象

  • 寄存器
    • 32个通用寄存器,x0~x31(RV32I的通用寄存器组)
    • 在RISC-V中,Hart在执行算数逻辑运算时所操作的数据必须直接来自寄存器
  • 内存
    • Hart可以执行在寄存器和内存之间的数据读写操作
    • 读写操作使用字节(Byte)为基本单位进行寻址
    • RV32可以访问最多2^32个字节的内存空间
  • x0比较特殊,只读,返回永远是0,写没有任何意义

RISC-V 汇编指令总览

RISC-V 汇编指令编码格式
在这里插入图片描述

  • 指令长度:ILEN1 = 32 bits(RV32I)
  • 指令对齐:IALIGN = 32 bits(RV32I)
  • 32个bit划分成不同的"域(field)"
  • funct3/funct7和opcode一起决定最终的指令类型
  • 没必要去记每条指令,只要知道在哪查即可
  • 指令在内存中按照小端序排列
    • 主机字节序(HBO - Host Byte Order)
    • 一个多字节整数 在计算机内存中存储的字节顺序称主机字节序或本地字节序
    • 不同类型CPU的HBO不同,这与CPU的设计有关,分为大端序(Big-Endian)和小端序(Little-Endian)
    • 大端(Big-Endian):数据的高位字节存放在内存的低地址
    • 小端(Little-Endian):数据的低位字节存放在内存的低地址
  • 6种指令格式:
    • R-type:(Register),有三个fields,用于指定3个寄存器参数
    • I-type:(Immediate),两个寄存器参数外+一个立即数参数(宽度为12bits)
    • S-type:(Store),两个寄存器参数+一个立即数参数(宽度为12bits,但fields的组织形式不同于I-type)
    • B-type:(Branch),除了带有两个寄存器参数外,还有一个立即数参数(宽度为12bits,但取值为2的倍数)
    • U-type:(Upper),一个寄存器参数+一个立即数参数(宽度为 20bits,用于表示一个立即数的高20位)
    • J-type:(Jump),一个寄存器参数+一个立即数参数(宽度为20bits)

RISC-V 汇编指令详解

算术运算指令(Arithmetic Instructions)
  • add、sub、addi(ADD immediate)、LUI(Load Upper Immediate)
指令 语法 描述 eg
ADD ADD RD, RS1, RS2 RS1和RS2的值相加,结果保存到RD add x5, x6, x7
SUB SUB RD, RS1, RS2 RS1的值减去RS2的值,结果保存到RD sub x5, x6, x7
ADDI ADDI RD, RS1, IMM RS1的值和IMM相加,结果保存到RD addi x5, x6, 100
LUI LUI RD, IMM 构造一个32位的数,高20位存放IMM,低12位清零。结果保存到RD lui x5, 0x12345
AUIPC AUIPC RD, IMM 构造一个32位的数,高20位存放IMM,低12位清零。结果和PC 相加后保存到RD auipc x5, 0x12345
  • 有符号数在计算机中的表示:二进制补码(two’s complement),eg&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值