当前位置: 首页 > news >正文

程序员培训班杭州seo排名优化外包

程序员培训班,杭州seo排名优化外包,龙岗微信网站制作,企业自建网站劣势1. 背景介绍 指令集从本质上可以分为复杂指令集(Complex Instruction Set Computer,CISC)和精简指令集(Reduced Instruction Set Computer,RISC)两种。复杂指令集的特点是能够在一条指令内完成很多事情。 指…

1. 背景介绍

        指令集从本质上可以分为复杂指令集(Complex Instruction Set Computer,CISC)和精简指令集(Reduced Instruction Set Computer,RISC)两种。复杂指令集的特点是能够在一条指令内完成很多事情。

        指令架构(Instruction Set Architecture, 缩写为ISA),是软件和硬件的接口,不同的应用需求,会有不同的指令架构。

        RISC-V的不同寻常之处在于:和几乎所有以往的ISA不同,它是模块化的。它的核心是一个名为RV32I的基础ISA,运行一个完整的软件栈。RV32I是固定的,永远不会改变。这为编译器编写者,操作系统开发人员和汇 编语言程序员提供了稳定的目标。模块化来源于可选的标准扩展,根据应用程序的需要, 硬件可以包含或不包含这些扩展。这种模块化特性使得RISC-V具有了袖珍化、低能耗的特点。

2. RISC-V指令格式

常见的RISC-V指令集如下表所示:

基本指令集含义
RV32I32位整数指令集
RV32E

RV32I的子集,用于小型嵌入式场景

RV64I64位整数指令集,兼容RV32I
RV128I128位整数指令集,兼容RV64I和RV32I

RISC-V有六种基本指令格式

  • R-type:用于寄存器-寄存器操作
  • I-type:用于短立即数和访存 load 操作
  • S-type:用于访存 store 操作
  • B-type:用于条件跳转操作
  • U-type:用于长立即数
  • J-type:用于无条件跳转

        指令只有6种格式,并且所有指令都是32位长,指令的低7位固定为opcode,简化了指令解码。在RISC-V中对于所有指令,要读写的寄存器的标识符总是在同一位置,意味着在解码指令之前,就可以先开始访问寄存器,这些格式的立即数字段总是符号扩展,符号位总是在指令中最高位,各种类型的指令构成如下图所示:

字段含义:

  • opcode(操作码):指令的基本操作,这个缩写是它惯用名称。
  • rd:目的操作寄存器,用来存放操作结果。
  • funct3:一个另外的操作码字段。
  • rs1:第一个源操作数寄存器。
  • rs2:第二个源操作数寄存器。
  • funct7:一个另外的操作码字段。
  • imm:立即数


2.1. R型指令

32bit R型指令包括6个部分:

  • opcode是操作码,位宽7bit,在指令的0-6bit;
  • rd (Destination Register)是目的寄存器,位宽5bit,在指令的7-11bit;
  • funct3+funct7是两个操作字段。funct3占了3bit,funct7占了7bit;
  • rs1 (Source Register 1)是第一个源操作数寄存器,位宽5bit,在指令的15-19bit;
  • rs2 (Source Register 2)是第二个源操作数寄存器,位宽5bit,在指令的25-31bit。

R型指令构成如下:

R型的全部指令(RV32I)

R型指令包括加法、减法、逻辑运算、移位运算。

示例:
add a0, a1, a2  //a0 = a1 + a2
sub a0, a1, a2  //a0 = a1 - a2
sll a0, a1, a2  //a0 = a1 << a2(低位补0)
srl a0, a1, a2  //a0 = a1 >> a2(高位补0)
sra a0, a1, a2  //a0 = a1 >> a2 (算术右移,高位补原来的符号位)
slt a0, a1, a2  //a1 < a2 ? a0 = 1 : a0 = 0
xor a0, a1, a2  //a0 = a1 ^ a2
or  a0, a1, a2  //a0 = a1 | a2
and a0, a1, a2  //a0 = a1 & a2

2.2. I型指令

I型指令包括5个部分:

  • opcode是操作码,位宽7bit,在指令的0-6bit;
  • rd (Destination Register)是目的寄存器,位宽5bit,在指令的7-11bit;
  • funct3是操作字段。funct3占了3bit,在指令的12-14bit;
  • rs1 (Source Register 1)是第一个源操作数寄存器,占了5bit,在指令的15-19bit;
  • 存放12位的立即数——imm[11:0],在指令的20-31bit。

I型指令构成如下:

I型的全部指令(RV32I)

I型指令包括立即数的运算和load指令。 

示例:
addi a0, a1, 0x5  //a0 = a1 + 0x5
subi a0, a1, 0x05  //a0 = a1 - 0x05
slli a0, a1, 0x05  //a0 = a1 << 0x05(低位补0)
srli a0, a1, 0x05  //a0 = a1 >> 0x05(高位补0)
srai a0, a1, 0x05  //a0 = a1 >> 0x05 (算术右移,高位补原来的符号位)
slti a0, a1, 0x05  //a1 < 0x05 ? a0 = 1 : a0 = 0
xori a0, a1, 0x05  //a0 = a1 ^ 0x05
ori a0, a1, 0x05   //a0 = a1 | 0x05
andi a0, a1, 0x05  //a0 = a1 & 0x05

示例:
lb x10,  0(x1)  //将x1的值加上0,将这个值作为地址, 取出这个地址所对应的内存中的值, 将这个值赋值给x10(取出的是8位数值)
lh x10,  0(x1)  //从内存中取出16位数值
lw x10, 0(x1)  //从内存中取出32位数值
lbu x10, 0(x1) //从内存中取出8位无符号数值
lhu x10, 0(x1) //从内存中取出16位无符号数值

2.3. S型指令

S型指令包括6个部分:

  • opcode是操作码,位宽7bit,在指令的0-6bit;
  • imm[4:0]+imm[11:5];
  • funct3是操作字段。funct3占了3bit,在指令的12-14bit;
  • rs1 (Source Register 1)是第一个源操作数寄存器,占了5bit,在指令的15-19bit;
  • rs2 (Source Register 2)是第二个源操作数寄存器,占了5bit,在指令的25-31bit。

S型指令构成如下:

S型的全部指令(RV32I)

S型指令包括store指令。 

示例:
sb  x10, 0(x1)  //x1的值加上0,将这个值作为地址, 将x10的值存储到上述地址所对应的内存中去 (只会将x10的值的低8位写入)
sh  x10, 0(x1)  //只会将x10的值的低16位写入
sw  x10, 0(x1)  //只会将x10的值的低32位写入

2.4. B型指令

B型指令包括6个部分:

  • opcode是操作码,位宽7bit,在指令的0-6bit;
  • imm[4:1]+imm[11]+imm[10:5]+imm[12];(注:imm[0]被丢弃,因为它始终为零)
  • funct3是操作字段。funct3占了3bit,在指令的12-14bit;
  • rs1 (Source Register 1)是第一个源操作数寄存器,占了5bit,在指令的15-19bit;
  • rs2 (Source Register 2)是第二个源操作数寄存器,占了5bit,在指令的25-31bit。

B型指令构成如下:

B型的全部指令(RV32I)

B型指令包括条件跳转指令。 

示例:
beq a1,a2,Label   //if(a1==a2){goto Label;}
bne a1,a2,Label   //if(a1!=a2){goto Label;}
blt a1,a2,Label   //if(a1< a2){goto Label;}
bgt a1,a2,Label   //if(a1> a2){goto Label;}
bge a1,a2,Label   //if(a1<=a2){goto Label;}
ble a1,a2,Label   //if(a1>=a2){goto Label;}

2.5. U型指令

U型指令包括3个部分:

  • opcode是操作码,位宽7bit,在指令的0-6bit;
  • rd (Destination Register)是目的寄存器,占了5bit,在指令的7-11bit;
  • imm[31:12]:存放高20位的立即数——imm[31:12],在指令的12-31bit。

U型指令构成如下:

U型的全部指令(RV32I)

示例:
lui  x10, 0x65432 //得到立即数的高20位,低位补0,立即数范围为:0x00~0xFFFFF

2.6. J型指令

J型指令包括3个部分:

  • opcode是操作码,位宽7bit,在指令的0-6bit;
  • rd (Destination Register)是目的寄存器,占了5bit,在指令的7-11bit;
  • 立即数划分:imm[19:12]+imm[11]+imm[10:1]+imm[20]:

J型指令构成如下:

J型的全部指令(RV32I)

示例:
jal ra, symbol    // 跳转到Symbol中去, 并把ra设置成返回地址 Symbol 可以是自定义的Label ,也可以是某个函数名
jal ra, 100       // 跳转到pc + 100 * 2的地方中去, 并把ra设置成返回地址  pc相对寻址,对应的是位置无关代码(PIC)
jalr ra, 40(x10)  // 跳转到x10+40 的地方中去, 并把ra设置成返回地址x10+40必须是绝对地址,指向内存中某个确定的地方(往往是函数的开头),非PIC

3. 通用寄存器

RV32I有32个通用寄存器,以及一个PC寄存器。其中有一个通过硬件设置的值恒为 0 的 x0 寄存器

注:RISC-V的32个寄存器x0~x31是用0~31这些数字来表示。


参考文档、博客:

RISC-V官方文档

riscv指令集基础_konghhhhh的博客-CSDN博客

计算机系统基础(五)之RISC-V指令集_riscv指令集_深度学习的学习僧的博客-CSDN博客

RISC-V指令集_riscv指令集_点灯大师~的博客-CSDN博客

http://www.yidumall.com/news/69541.html

相关文章:

  • 成都找人做网站seo整站优化哪家专业
  • 惠阳网站优化整合营销案例
  • 网络营销咨询网站源码简述网络营销的概念
  • 广东专业做网站排名公司百度爱采购平台官网
  • 在地税网站怎么做税种认定百度免费广告发布平台
  • 关于酒店网站建设的摘要头条搜索站长平台
  • thinkphp做网站教程培训机构招生方案
  • 哪个网站能在线做司考题目百度网址怎么输入?
  • 互联网营销网站建设手机网页设计制作网站
  • 大型企业门户网站能力建设探索与实践百度营销推广官网
  • 做兼职一般去哪个网站seo关键词排名优化怎么收费
  • 网站建设需要多少资金seo实战密码
  • 网站容易出现的问题吗百度营销搜索推广
  • 做网站的回扣上海今天最新新闻10条
  • 旅游网站建设策划书网页模版
  • 吴江公司注册咖啡seo是什么意思
  • 浦西网站建设如何在百度做推广
  • 怎样提升网站关键词网站测速工具
  • 深圳市企业网站seo联系方式武汉久都seo
  • java就是做网站的吗宁波seo网络推广产品服务
  • 个性网站功能推广赚钱软件排行
  • 承德市网站开发北京最新疫情情况
  • 基于b s结构做的网站百度搜索下载app
  • 做网站作业什么主题做seo用哪种建站程序最好
  • 房产信息门户网站建设方案做一个个人网站
  • 东莞微网站十大网站排行榜
  • 怎么制作网站源码怎么去推广自己的店铺
  • 建做网站百度网盘官网登录入口
  • 电子商务网站推广的方式有哪些如何联系百度平台客服
  • 微信分销网站开发郑州seo优化外包顾问