计算机组成与设计(RISC-V版)学习记录二

一、指令

RV32I指令编码如下所示
RISC-V 基础整数指令编码表

1. 指令类型

①基础指令集

指令的编排方式如下所示:
RV32I指令编排

R型指令

R型指令是寄存器型指令,由两个源寄存器操作数(5位宽)rs1和rs2以及一个目标寄存器操作数(5位宽)rd,操作码(7位宽)opcode,func3字段和func7字段组成。
如这条加法指令:add x9, x21,x9 其指令编码如下所示:
指令编码示例add

I型指令

R型指令为立即数操作指令,其指令格式由R型指令的功能码func7字段与源寄存器操作数rs2组合成了一个12位的立即数。
如这条立即数加法指令:addi x9,x9,1 其指令编码格式如下所示:
指令编码示例addi
在这里就有一个疑问,这个立即数是12位长的,有些数大于12位要怎么办,具体内容在小节大立即数将会有相应的处理方法。

S型指令(访存)

以sd(store double world)指令为例: sd x1,1000(x2) 其指令格式如下:
指令编码示例sd
需要注意的是,sd访存指令操作的立即数(12位)被分成了高7位和低五位,由于高位的字段已经包含了低五位的值,所以需要通过除以2^5来分解,或者直接将1000转化为二进制。要将十进制的1000分解,方法如下:

高七位:1000/2^5 = 31 = 0011111
低五位:1000%2^5 = 8 = 01000
B型指令

B型指令和S型指令非常相似,都有两个源寄存器和一个12位的立即数,但是B型指令的立即数表示的是:从-4096到+4096以2-Byte的单位的地址增量 正是由于增量以2字节为单位,所以12位立即数可以认为是13位数最低位始终为0。(即无需保留最低位)
beq 指令为例: beq x19,x10,end

LOOP:beq x19,x10,END
add ....
addi ....
j LOOP

需要更据如上代码片段计算出偏移量,4(条)32bit = 16B = 82B ,
则12位立即数为:00_000000_1000 则其指令格式如下所示:
指令编码示例beq

U型指令

LUI指令,将立即数的高20位加载到目的寄存器,并将低12位清零,如:
lui x10,0x87654 #x10 = 0x87654000
addi x10,x10,0x321 #x10 = 0x87654321
便可向寄存器中写入一个32位的立即数,但是,假设addi指令加载的是12位负数立即数,则结果可能出现问题,原因是当这个12位的数最到位为1时,得到的结果为高20位减1在和低12位拼接而来,如:
lui x10, 0xdeadb
addi x10,x10 ,oxeef #结果是0xdeadaeef
要解决此问题,只需在装入高20位时预先加1

AUIPC该指令可以将当前PC值加上高位的立即数值的结果保留在目的寄存器中,这也是PC相对寻址的一种方式,如:SET:auipc x10,0 指令就是把当前PC值放入x10寄存器

J型指令

JAL指令,该指令保存当前PC值到目的寄存器,然后将当前的PC值加上立即数对应的偏移量得到转移地址值,更新PC寄存器。访问范围是以2bytes为单位的正负2^19 或4bytes为单位的前后正负 2^18地址空间
JALR 该指令将当前PC值加4的结果写入目的寄存器,然后设置PC值为源寄存器加立即数为新PC的值。(与分支指令不同)。
ret = jr ra = jalr x0,ra,0
实现32位偏移量的相对寻址跳转
lui x1,<高20位地址>
jalr ra,x1,<低12位地址>

②扩展指令集

占位,暂未学习到该方面的知识

2.寄存器功能

函数调用过程中需要做现场保护及恢复现场(截图来自Computer Organization and Design RISC-V Edition The Hardware Software Interface )
函数调用过程保存与不保存的寄存器
RV32I 下的寄存器的功能如下(截图来自Computer Organization and Design RISC-V Edition The Hardware Software Interface )
寄存器功能

3.RISC-V寻址方式

①采用LUI指令便可以完成,具体在U型指令介绍。
②采用分支跳转指令如BEQ,BENQ
③采用无条件跳转指令如JAL,JALR 实现远距离跳转

上述的指令主要实现了RISC-V的四种寻址方式:立即数寻址、寄存器寻址、基址寻址、PC相对寻址
如下图所示(截图来自Computer Organization and Design RISC-V Edition The Hardware Software Interface ):
RISC-V 寻址方式

二、程序编译到启动过程

1.过程综述

C程序到可执行文件一般要经过预处理,编译汇编和链接等过程。预处理过程主要是处理 C 文件中的条件编译和预编译指令、删除所有的#define、并且展开所有的宏定义、删除代码注释等保留所有的#pragma 编译器指令。编译汇编过程就是把预处理后的文件进行语义和语法分析及优化,然后生成汇编代码,再由汇编器将汇编代码转化成能够识别和执行的机器代码。链接过程就是将有关的目标文件彼此相连接,生成一个可执行文件。最后再由加载器加载程序。过程图如下所示(截图来自Computer Organization and Design RISC-V Edition The Hardware Software Interface ):
生成可执行文件过程

2.各部分概述

编译器
汇编器
链接器的工作主要有三步:①将代码和数据模块按符号特征放入内存。②决定数据和指令标签的地址。③修正内部和外部引用。
加载器在UNIX系统中主要有以下步骤:①读取可执行文件收不以确定正文段与数据段的大小。②为正文和数据创建地址空间。③将可执行文件中的指令和数据复制到内存中。④将主程序的参数复制到栈顶。⑤初始化处理器寄存器并将栈指针指向第一个空闲位置。⑥跳转到启动例程,将参数复制到参数寄存器并调用主例程,主例程泛会所,启动例程通过exit系统调用终结程序
动态链接库 相对于静态库占用空间小,要用到的例程才会被载入。

三、边角知识点

1.二进制补码表示数据

计算机程序可以计算正数和负数,因此需要一种方法来区分正数和负数,最容易想到的是增加一个单独的符号位来表示,这种表示方式称为原码(sign and magnitude),这种表示方法有很多缺点,于是采用:前导0表示正数,前导1表示负数。这种方式叫做二进制补码。

正数的补码为它本身,负数的补码为除符号位外所有位取反加1。

2.栈与堆

RISC-V的栈指针寄存器(SP)为X2,栈的地址按照从高到低的顺序“增长”,意思是减指针将值压栈,加指针出栈。栈具有先进后出的特点。
栈
代码段,动态数据如malloc函数分配的,静态数据都保存在堆中,堆与栈相相生长以达到内存的高效使用。
堆

3. gcc的基本操作

见我的另一篇博客:gcc基本操作(带例子)

4. 指令与并行性

5.大小端模式

大小端模式

risc-v 属于小端模式

var code = “636b400c-d8be-4aac-b8b6-9cc2c3a029d0”

  • 10
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《计算机组成设计-硬件/软件接口 riscv》是一本介绍计算机硬件和软件接口的教材,特定本使用了RISC-V指令集架构。 RISC-V是一个开放、基于精简指令集(RISC)的指令集架构。它的设计目标是简化指令集,并提供在各种不同计算机体系结构上使用的通用接口。这使得RISC-V成为一种流行的选择,用于教育和研究中的计算机体系结构。 这本教材通过系统地介绍计算机硬件和软件接口的设计原理,通过RISC-V指令集架构的设计和实现,帮助读者理解计算机系统的工作原理。教材内容包括计算机的基本组成部分,如处理器、存储器和输入输出设备,以及它们之间的接口。 在硬件方面,教材涵盖了处理器的工作原理,包括指令执行过程、流水线设计和指令级并行等。还介绍了存储器的层次结构,包括缓存和虚拟内存的设计。此外,教材还涉及输入输出设备的接口设计及中断控制等方面的内容。 在软件方面,教材介绍了汇编语言的基本知识和使用方法,以及如何将高级语言编译成RISC-V指令。此外,还介绍了操作系统的基本概念和设计原理,以及如何编写基于RISC-V架构的操作系统。 通过学习计算机组成设计-硬件/软件接口 riscv》,读者能够全面了解计算机系统的工作原理和硬件/软件接口的设计。这本教材对于计算机科学和工程专业的学生以及从事计算机体系结构和嵌入式系统开发的工程师都是一本很好的学习资料。 ### 回答2: 计算机组成设计-硬件/软件接口RISC-V是一门介绍计算机硬件与软件之间接口的课程,重点教授RISC-V指令集体系结构。 RISC-V是一种开源指令集架构,设计简单、灵活且可定制。它具有精简指令集和固定长度指令,使得硬件实现和编译器开发变得更加容易。RISC-V通过明确接口定义,为硬件设计者和软件开发者提供了共同的基础。 在这门课程中,学生将学习如何设计和实现一个RISC-V处理器,包括指令集架构设计、流水线处理和高级缓存设计等。同时,还会学习如何通过编写汇编代码和C语言程序来充分利用处理器的功能。 课程还将介绍计算机硬件和软件之间的接口技术,包括存储器层次结构、I/O接口和中断处理等。学生将了解如何通过这些接口与外部设备进行通信和交互。 此外,本课程还会涵盖一些高级主题,如超标量处理、向量处理和多核处理器等。学生将学习如何利用这些技术提高计算机系统的性能和效率。 这门课程将使学生在计算机硬件与软件交互的基础上,全面了解RISC-V架构的设计与实现。通过这门课程的学习,学生将能够设计、实现和优化RISC-V处理器,为计算机系统的发展做出贡献。 ### 回答3: 计算机组成设计-硬件/软件接口 RISC-V是一本经典的计算机教材,主要介绍了计算机硬件与软件之间的接口设计RISC-V是一种新兴的指令集架构,由于其开放性和简洁性,越来越多的人开始研究和应用。 这本教材主要分为两个部分:硬件接口和软件接口。 硬件接口部分主要讲解了RISC-V指令集的设计原理和架构。RISC-V采用了精简指令集的设计思想,通过精简指令集来提高执行效率。教材详细介绍了RISC-V指令集的各种指令类型和操作码,以及指令的执行过程和控制流程。同时,还介绍了RISC-V的寄存器文件和存储器层次结构,以及寄存器和存储器的地址映射方法。 软件接口部分主要介绍了RISC-V汇编语言和机器代码的编写和调试方法。教材详细介绍了RISC-V汇编语言的语法和语义,以及如何使用RISC-V汇编语言编写简单的程序。同时,还介绍了RISC-V的编译器和调试工具,以及如何使用这些工具来编译和调试RISC-V程序。 总的来说,这本教材通过深入浅出的方式介绍了计算机硬件与软件之间的接口设计,特别是RISC-V的接口设计。无论是对于计算机硬件工程师还是软件工程师,这本教材都是一本不可多得的学习资料。通过学习这本教材,读者可以深入理解计算机硬件与软件之间的接口设计原理,并且能够熟练使用RISC-V指令集进行硬件和软件的开发与调试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值