首页 > 其他分享 >计算机组成原理之指令

计算机组成原理之指令

时间:2023-11-09 22:14:03浏览次数:27  
标签:计算机 X9 x9 指令 寄存器 x10 原理 x22

引言

关于riscv操作数

32个寄存器 | X0~X31|快速定位数据。在riscv中,只对寄存器中的数据执行算术运算

2^61个存储字 | 只能被数据传输指令访问。riscv体系采用的是字节寻址。

一个寄存器是8bytes,64位(double word)

每次取的最小单位是一个byte

注意:当函数参数大于8个的时候,会占用内存。本来是都在寄存器的

riscv汇编语言

程序一定是加载到内存中执行的。

(如图)
file

计算机硬件的操作

riscv体系中,寄存器大小64位,成组的64位频繁,被命名为双字。32位组成字。

存储器操作数

处理器只能在寄存器中保留少量数据,但内存可以存储大量数据。因此,数据结构(数组和结构体)保存在内存中。

riscv是小端字节序的。比如说0x12345678。存储是高位地址是12.最低位存储的是78。

网络字节序统一用的是大端序列。

数据传输指令:在内存和寄存器之间传输数据的命令

载入指令:将数据从内存复制到寄存器的数据传输命令

例题:将 A [12] = h + A[8]转换为汇编代码。A的基址存储在X22,h存储在X9

代码为:

ld X9 , 64(X22) //Temporary reg X9 gets A[8]
add X9 , X21 ,X9 //Temporary reg X9 gets A[8] + h
sd X9, 96(X22) //stores h + A[8] back into A[12]

常数或立即数操作数

将常数4加到寄存器X22的两种方式:

ld X9 , AddrConstant4(x3)      //X9 = constant4
add x22 , x22 ,x9              //x22 = x22 +4
//第二种
addi x22, x22, 4

第二种的addi指令可以避免加载指令,速度更加快。在许多体系中,字的起始地址必须是4的倍数,双字是8的倍数。

计算机中的指令表示

按照“简单源于规整的设计原则,Rsicv指令都是32位长。四位的对齐效率很高!

Riscv字段

opcode(操作码):指令的基本操作,这个是它的惯用名称

rd :目的操作数寄存器,用来存档操作结果

funct3 :一个另外的操作码字段

rs1 :第一个源操作数寄存器

rs2 :第二个源操作数寄存器

funct7 :一个另外的操作码字段

R型

用于寄存器,减少访问内存的开销
file

funct7与funct3是用来细化解析的

I型

用于常数的算术指令
file

S型

用于存储访问,将寄存器中的数据写入内存
file

汇编语言到机器语言

例:A[30] = h + A[30] + 1;(A的基址在x10,h存放于X21)

ld x9 , 240(x10)     //Temporary reg x9 gets A[30]
add x9, x9 ,x21      //Temporary reg x9 gets h + A[30]
addi x9, x9 ,1       //Temporary reg x9 gets h + A[30] + 1
sd x9, 240(x10)       //store h + A[30] + 1 back into A[30]

file

关于指令的判断

file

逻辑操作

file

移位指令使用I格式,由于移位不会大于63,immediate字段使用低6位就可以。
file
funct6用来当做操作码字段。

用于决策的指令

例:if(i ==j) f = g + h; else f = g - h;

汇编:

bne (branch not equal)x22, x23, Else
add x19, x20, x21
beq x0, x0,Exit(遇到此指令必定跳过)
Else : sub x19, x20, x21
Exit

循环

例: while(save[i]) == k) i+=1;

loop: sli x10, x22 ,3     //Temp reg x10 = i * 8
add x10 ,x10, x25         //x10 = address of save[i]
ld x9, 0(x10)             //Temp reg x9 = save[i]
bne x9 ,x24 ,Exit
addo x22 ,x22, 1
beq x0, x0,loop
Exit

计算机硬件对过程的支撑

在执行程序过程时候,必须遵循六个步骤

将参数放到可以访问的位置

将控制转交给过程

获取所需的存储资源

将结果放在调用程序可以访问到的位置

将控制返回到初始点,因为过程可以从程序的多个点调用

Rsicv软件在为过程分配寄存器的时候遵循原则:

x10~x17:八个参数寄存器,用于传递参数或返回值

x1:一个返回地址的寄存器,用于返回到起始点

除了将这些寄存器分配之外,Riscv编程语言还包含一个仅用于过程的指令:跳转-链接指令。

jal x1,ProcedureAddress //jump to
ProcedureAddress and write return address to x1
上述代码中x1中这个链接称为返回地址。返回地址是必须要的,因为同一过程可能在程序的不同部分被调用。
为了支持这种情况下面的过程返回,使用间接跳转jalr x0, (x1)

jalr x0, (x1) 是一种 RISC-V 指令,用于无条件跳转到 x1 寄存器中存储的地址,并将下一条指令的地址存储在 x0 寄存器中。这是一种间接跳转,因为它不是直接跳转到一个特定的地址,而是跳转到一个存储在寄存器中的地址。这个指令的机器码是 0x00008067。

使用更多的寄存器

假如对一个过程,要使用超过8个参数寄存器。必须要采用寄存器换出到存储器当中

换出寄存器的理想数据结构一种后进先出的stack)队列。栈需要一个指向栈中最新分配地址的指针,以指示下一个过程应该放置换出寄存器的位置或寄存器旧值的存放位置。

在RISC-V中,栈指针(stack pointer)是寄存器x2,也称为Sp。栈指针按照每个被保存或恢复的寄存器按双字进行调整。栈应用非常广泛,因而传送数据到栈或从栈传输数据都具有专业术语:将数据放入栈中称为压栈,从栈中移除数据称为弹栈

栈例子:

file
file
图示结构:
file

寄存器用途

  • x0: the constant value 0

  • x1: return address

  • x2: stack pointer

  • x3: global pointer

  • x4: thread pointer

  • x5 - x7, x28 - x31: temporaries

  • x8: frame pointer

  • x9,x18 - x27: saved registers

  • x10 - x11: function arguments/results

  • x12 - x17: function arguments

递归例子

file
file

内存模型

file

大立即数编址与寻址

RISC-V指令系统包括指令 load upper immediate(取立即数高位,lui),用于将20位常数加载到寄存器的第31位到第 12位。将第31位的值复制填充到最左边 32位,最右边的 12 位用0填充。例如,这条指令允许使用两条指令创建 32位常量。lui 使用新的指令格U型,因为其他格式不能支持如此大的常量。

分支寻址

file
SB格式(可表示-4096 - 4096的分支地址)

寻址模式的总结

file
在PC寻址的时候:Targetaddress = PC + immediate * 2

翻译并启动程序

过程:

C程序-->预处理(#开头的全部处理掉)-->编译(变为汇编语言) -->汇编(变为机器语言)-->链接(目标文件链接为整体)

图示:
file
动态链接器:

动态链接器是操作系统的一部分,用于在执行可执行文件时(在“运行时”),将可执行文件所需的共享库从持久存储复制到 RAM 中,并填充跳转表和重定位指针。具体的操作系统和可执行文件格式决定了动态链接器的功能和实现方式。动态链接器通常被称为在编译可执行文件时执行的过程,而动态链接器是操作系统的一个特殊部分,它将外部共享库加载到正在运行的进程中,然后动态地将这些共享库绑定到正在运行的进程中。这种方法也称为动态链接或后期链接。1

但是java不是编译成目标计算机的汇编语言,而是首先编译成易于解释的指令(Java字节码)
file

感谢您阅读本文,希望对您有帮助。

本文作者:Cr不是铬 QQ:2195821921,欢迎交流讨论。

转载请注明出处:Chapter2 指令:计算机的语言

本文由博客一文多发平台 OpenWrite 发布!

标签:计算机,X9,x9,指令,寄存器,x10,原理,x22
From: https://www.cnblogs.com/xiaocrblog/p/17822989.html

相关文章

  • springboot社区团购管理系统的设计与实现-计算机毕业设计源码+LW文档
    abo开发说明开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9浏览器:谷歌浏览器部分数据库:----Tablestructurefortableaddress--DROPTABLEIFEXISTSaddr......
  • 基于Spark的共享单车数据存储系统的设计与实现-计算机毕业设计源码+LW文档
    摘 要近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,共享单车数据存储系统利用计算机网络实现信息化管理,使整个共享单车数据存储管理的发展和服务水平有显著提升。本文拟采用java技术和Springboot搭建系统框架,后台使用MySQL数据库进......
  • springboot科研管理系统-计算机毕业设计源码+LW文档
    摘 要随着计算机技术发展,计算机系统的应用已延伸到社会的各个领域,大量基于网络的广泛应用给生活带来了十分的便利。所以把科研管理与现在网络相结合,利用计算机搭建科研管理系统,实现科研的信息化。则对于进一步提高科研管理发展,丰富科研管理经验能起到不少的促进作用。系统阐述......
  • 2023-2024-1 20231329 《计算机程序与设计》第七周学习总结
    这个作业属于哪个课程https://edu.cnblogs.com/campus/besti这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#JXJC这个作业的目标计算机科学概论第8章并完成云班课测试《C语言程序设计》第6章并完成云班课测试作业正文https://www.cnblogs.c......
  • 2023-2024-1 20231414 《计算机基础与程序设计》第七周学习总结
    学期(2023-2024-1)学号(20231414)《计算机基础与程序设计》第七周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2023-2024-1计算机基础与程序设计第七周作业)这个作业的目标<写上具体方......
  • 2023-2024-1 20231419 《计算机基础与程序设计》第七周学习总结
    2023-2024-120231419《计算机基础与程序设计》第七周学习总结作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK07这个作业的目标自学《计算机科学概......
  • 安卓系统执行APK程序为什么需要ART或者Dalvik虚拟,原理是什么
    安卓系统执行APK程序需要ART(AndroidRuntime)或者以前的Dalvik虚拟机,主要是因为安卓应用大多数是用Java语言编写的,而Java是一种需要虚拟机来执行的语言。下面我会分别解释虚拟机的原理和为什么需要它们,以及提供一个生活中的例子来帮助理解。 ###虚拟机的原理: 1......
  • java为什么能在安卓环境下运行,如何运行的,原理是什么,详细!
    Java在Android环境下可以运行是因为Android提供了一个为移动设备优化的虚拟机——Dalvik虚拟机(在Android4.4版本后,被Android运行时环境ART所取代),它使用专门为Android优化的字节码。这个虚拟机与Java的运行机制有所不同,但是基本原理类似。以下是详细的解释:1.Java代码编译......
  • ART还是Dalvik虚拟的原理是什么,跟安卓运行APK有啥关系
    ART(AndroidRuntime)和Dalvik都是Android操作系统中的应用程序运行环境。它们都是虚拟机,用于在Android设备上执行应用程序代码。APK(AndroidPackage)是Android应用程序的打包格式,包含了应用程序的所有文件,包括应用程序代码、资源和元数据。Dalvik虚拟机:原理:Dalvik是一种基于寄存......
  • vue template的编译原理
    vuetemplate的编译原理就是vue框架底层对模板的编译过程,这个过程将最初的模板源码转换生成最终的语法抽象树(AST)具体步骤如下:模板编译器读入模板源码,将其词法分析成各个部分,这些部分包括html元素,vue指令,还有特殊属性等AST的gennerator组件将区分开的各个部分进行上下文解析,封......