RISC-V汇编语言(5)

RISC-V 汇编语言入门

汇编语言概念简介

汇编语言(Assembly Language)是一种“低级”语言。
汇编语言的缺点:

  • 难读
  • 难写
  • 难移植

汇编语言的优点

  • 灵活
  • 强大

汇编语言的应用场景

  • 需要直接访问底层硬件的地方
  • 需要对性能执行极致优化的地方
汇编语言语法介绍

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

在这里插入图片描述

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

RISC-V 汇编指令总览

RISC-V 汇编指令操作对象

寄存器:

  • 32个通用寄存器,x0 ~ x31(注意:本章节课程仅涉及 RV32I 的通用寄存器组);
  • 在 RISC-V 中,Hart 在执行算术逻辑运算时所操作的数据必须直接来自寄存器。

内存:

  • Hart 可以执行在寄存器和内存之间的数据读写操作;
  • 读写操作使用字节(Byte)为基本单位进行寻址;
  • RV32 可以访问最多 2^32 个字节的内存空间。
RISC-V 汇编指令编码格式

在这里插入图片描述

  • 指令长度:ILEN1= 32 bits (RV32I)
  • 指令对齐:IALIGN = 32 bits (RV32I)
  • 32 个 bit 划分成不同的 “域(field)”
  • funct3/funct7 和 opcode 一起决定最终的指令类型
  • 指令在内存中按照 小端序 排列
指令格式(format)
  • R-type:(Register),每条指令中有三个 fields,用于指定 3 个 寄存器参数
  • I-type: (Immediate),每条指令除了带有两个寄存器参数外,还带有一个立即数参数(宽度为 12 bits)。
  • S-type: (Store),每条指令除了带有两个寄存器参数外,还带有一个立即数参数(宽度为 12 bits,但 fields 的组织方式不同于 I-type)
  • B-type: (Branch),每条指令除了带有两个寄存器参数外,还带有一个立即数参数(宽度为 12 bits,但取值为 2 的倍数)。
  • U-type: (Upper),每条指令含有一个寄存器参数再加上一个立即数参数(宽度为 20bits,用于表示一个立即数的高 20 位)
  • J-type: (Jump),每条指令含有一个寄存器参数再加上一个立即数参数(宽度为 20bits)
主机字节序 (HBO - Host Byte Order)

一个 多字节整数 在计算机内存中存储的字节顺序称为主机字节序(HBO- Host Byte Order,或者叫本地字节序);不同类型 CPU 的 HBO 不同,这与 CPU 的设计有关。分为 大端序(Big-Endian) 和 小端序(Little-Endian)。
在这里插入图片描述

RISC-V 汇编指令分类

在这里插入图片描述

RISC-V 汇编伪指令一览

在这里插入图片描述

RISC-V 汇编指令进阶

算术运算指令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

_start:

	la x5, _start		# x5 = _start

	jr x5

在这里插入图片描述

逻辑运算指令

在这里插入图片描述

移位运算指令

在这里插入图片描述
在这里插入图片描述

10010000
->11001000
高位为1补1,为0补0

内存读写指令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

条件分支指令

在这里插入图片描述
在这里插入图片描述

无条件跳转指令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

RISC-V 指令寻址模式总结

在这里插入图片描述

RISC-V 汇编函数调用约定

函数调用过程概述

在这里插入图片描述
在这里插入图片描述

汇编编程时为何需要制定函数调用约定

在这里插入图片描述

有关寄存器的编程约定

在这里插入图片描述

函数跳转和返回指令的编程约定

在这里插入图片描述
在这里插入图片描述

实现被调用函数的编程约定

在这里插入图片描述

RISC-V 汇编与 C 混合编程

RISC-V 汇编调用 C 函数

在这里插入图片描述

C 函数中嵌入 RISC-V 汇编

在这里插入图片描述

  • 10
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【The RISC-V READER】中文版 v2.1 欢迎! RISC-V 自 2011 年推出以来迅速地普及。我们认为一个精简的程序员指南将进一步促进 它的发展,并促使新人理解为什么它是一个有吸引力的指令集,以及它与传统指令集架构 (ISA)的不同。 我们的灵感部分来源于其它指令集架构书籍,但我们希望 RISC-V 自身的简洁性能让我 们写得比 See MIPS Run 一类 500 多页的详尽书籍少很多。我们把全书的长度控制到了前述 的三分之一,至少在这个意义上我们成功了。实际上,介绍模块化 RISC-V 指令集的每个组 成部分的十章只用了 100 页——即便为了有助于快速阅读,平均每页用到了一张图片(一共 75 张)。 在解释指令集设计的原理之后,我们将阐述 RISC-V 架构师在设计指令集的时候,如何 在过去 40 年的指令集的基础上取其精华,去其糟粕。要评判一个指令集架构,不仅要看它 包括了什么,而且要看它省略了什么。 随后我们会按顺序介绍这个模块化架构的每个组成部分。每一章都会包含一个用 RISCV 汇编语言写成的程序,这是为了展示那一章所述的指令的用法,这样有助于汇编语言程序 员学习 RISC-V 汇编。有时,我们还会列出用 ARM,MIPS 和 x86 写成的同样的程序,从而 突出 RISC-V 在简洁性,以及成本、功耗、性能方面的优势。 为了增加本书的趣味性,我们在页边加入了将近 50 个侧边栏,这里面放了一些有关书 中内容的评论,希望它们能带来一些乐趣。我们还在页边放了大约 75 个图片,用于展示设 计良好 ISA 的例子。(我们充分利用了侧边的空间!)最后,对于那些愿意钻研的读者,我们 在全书中加入了大概 25 段补充说明。如果你对某个主题感兴趣,可以深入研究这些可选部 分。略过这些部分不会影响对书中的其他内容的理解,所以如果你对他们不感兴趣的话,尽 管跳过它们。对于计算机体系结构爱好者,我们援引的 25 篇论文和书籍能够开阔你的视野。 在写这本书的过程中,我们从它们当中学到了很多东西!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值