首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么RISC V中的程序计数器应该加4而不是加0或2

RISC-V是一种开源指令集架构(ISA),它的设计目标是简化处理器设计,并提供高性能和低功耗的计算能力。在RISC-V中,程序计数器(Program Counter,PC)是一个特殊的寄存器,用于存储当前正在执行的指令的地址。

为什么RISC-V中的程序计数器应该加4而不是加0或2呢?这涉及到RISC-V的指令对齐规则和指令长度的设计。

  1. 指令对齐规则:RISC-V的指令对齐规则要求指令的地址必须是4的倍数。这是因为RISC-V的指令长度固定为32位(4字节),指令的地址必须是4的倍数才能保证指令的正确解析和执行。如果程序计数器加0或2,将无法满足指令对齐规则,导致指令解析错误,从而引发异常或错误的执行结果。
  2. 指令长度:RISC-V的指令长度固定为32位(4字节),每条指令占用4个字节的存储空间。程序计数器加4意味着每次执行完一条指令后,程序计数器自动加上4,指向下一条指令的地址。这种设计简化了指令解析的逻辑,同时也提高了指令的执行效率。

综上所述,RISC-V中的程序计数器应该加4而不是加0或2,是为了满足指令对齐规则和指令长度的设计要求,保证指令的正确解析和执行,并提高指令的执行效率。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(ECS):https://cloud.tencent.com/product/cvm
  • 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

简易RISC软核CPU设计

本文在介绍risc-v 指令集相关基本概念后,通过一个简易risc-v 处理器设计,来说明处理器工作时各种细节。 2,CPU工作流程 常见CPU内部有5级流水线组成。...cpu工作大致分为以下几个步骤; ? 1:取指。该阶段从内存读取指令,PC(程序计数器)制定指令地址。 2:译码。该阶段将从内存读取指令翻译为各种操作。并从寄存器取出操作数。 3:执行。...第二,RISC-V 指令提供三个寄存器操作数(rs1,rs2,rd),不是像 x86-32 一样,让源操作数和目的操作数共享一个字段。...第 0 个时钟,cpu 状态控制器输出 rd,data_ctl 和 load_ir 为高电平,inc_pc从 0 变为 1 故 pc 1,ROM 送来指令代码寄存在指令寄存器2....第 4 个时钟,若操作符为 AND,ADD 等算术运算,算术运算器就进行相应运算;若操作符为 LDA,就把数据通过算术运算符送给累加器;若为SKZ,先判断累加器值是否为 0,如果为 0,PC 1

1.1K40

MIT 6.S081 (BOOK-RISCV-REV1)教材第四章内容 --Trap --

这个由RISC-V提供SSCRATCH寄存器,就是为接下来目的创建。...另一个问题是,为什么这些寄存器保存在trapframe,不是用户代码?...所以内核需要自己管理这些寄存器保存,这就是为什么内核将这些内容保存在属于内核内存trapframe不是用户内存。...在RISC-V,存储在SEPC寄存器程序计数器,是用户程序触发trap指令地址。但是当我们恢复用户程序时,我们希望在下一条指令恢复,也就是ecall之后一条指令。...所以对于系统调用,我们对于保存用户程序计数器4,这样我们会在ecall下一条指令恢复,不是重新执行ecall指令。

27040

MIT 6.S081 Lab Four -- Trap

) 理解一点RISC-V汇编是很重要,你应该在6.004接触过。...在下面的代码,“y=”之后将打印什么(注:答案不是一个特定值)?为什么会发生这种情况?...,i改为0x726c6400,不需改变57616 ---- 在下面的代码,“y=”之后将打印什么(注:答案不是一个特定值)?...程序计数器过程是这样: ecall指令中将PC保存到SEPC 在usertrap中将SEPC保存到p->trapframe->epc p->trapframe->epc4指向下一条指令 执行系统调用...陷阱处理过程 恢复用户寄存器,返回用户空间,但此时返回不是进入陷阱时程序地址,而是处理函数handler地址,handler可能会改变用户寄存器 因此我们要在usertrap再次保存用户寄存器

21230

ARM体系架构_armv7l是什么架构

(3)字节(Byte):在ARM体系结构,字节长度为8位。 2. ARM处理器存储格式 ARM体系结构将存储器看作是从0地址开始字节线性组合。...(3)程序计数器PC(R15) 寄存器R15用作程序计数器(PC),在ARM状态下,位[1:0]为0,位[31:2]用于保存PC;在Thumb状态下,位[0]为0,位[31:1]用于保存PC。...CPSR保存数据结构: 1)N(Negative):当用两个补码表示带符号数进行运算时,N=1表示结果为负,N=0表示结果为正数2)Z(Zero):Z=1表示运算结果为0,Z=0表示运算结果非零...对于其他/减运算指令,C值通常不变。 4V(Overflow):有2种方法设置V值: (1)对于/减法运算指令,当操作数和运算结果为二进制补码表示带符号数时,V=1表示符号位溢出。...(2)对于其他非加减法运算指令,V值通常不变。

1.5K30

RISC-V 函数调用约定和Stack使用

看起来使用x86不是RISC-V唯一优势就是能得到性能提升,但是这里性能是以复杂度和潜在安全为代价,我问题是为什么我们还在使用x86,不是使用RISC-V处理器?...寄存器是用来进行任何运算和数据读取最快方式,这就是为什么使用它们很重要,也是为什么我们更喜欢使用寄存器不是内存。 当我们调用函数时,你可以看到这里有a0 - a7寄存器。...第一列寄存器名字并不是超级重要,它唯一重要场景是在RISC-VCompressed Instruction。...因为s1在Compressed Instruction是有效s2-11却不是。除了Compressed Instruction,寄存器都是通过它们ABI名字来引用。...Stack level 0,表明这是调用栈最底层 pc,当前程序计数器 saved pc,demo4位置,表明当前函数要返回位置 source language c,表明这是C代码 Arglist

60940

MIT 6.S081 教材第七章内容 -- 调度 -- 上

在用户空间,每个进程有自己内存,对于我们这节课来说,我们更关心是每个进程都包含了一个用户程序栈(user stack),并且当进程运行时候,它在RISC-V处理器中会有程序计数器和寄存器。...另一个问题是,为什么RISC-V中有32个寄存器,但是swtch函数只保存并恢复了14个寄存器?...为什么swtch函数要用汇编来实现,不是C语言? C语言中很难与寄存器交互。可以肯定是C语言中没有方法能更改sp、ra寄存器。...从这个进程切换走过程,将会保存不完整RISC-V寄存器到进程context对象。所以我们希望启动一个进程过程也具有原子性。...这时需要设置程序计数器0。 fork子进程 exec系统调用 如果不是因为定时器中断发生切换,我们是不是可以期望ra寄存器指向其他位置,例如sleep函数?

24730

MIT 6.S081 (BOOK-RISCV-REV1)教材第二章内容 -- 操作系统架构

例如,Unix应用程序只通过文件系统open、read、write和close系统调用与存储交互,不是直接读写磁盘。...一个进程可以通过执行RISC-Vecall指令进行系统调用,该指令提升硬件特权级别,并将程序计数器(PC)更改为内核定义入口点,入口点代码切换到内核栈,执行实现系统调用内核指令,当系统调用完成时...接下来章节将更详细地描述本概述显示机制。 当RISC-V计算机上电时,它会初始化自己并运行一个存储在只读内存引导加载程序。引导加载程序将xv6内核加载到内存。...加载程序将xv6内核加载到物理地址为0x80000000内存。它将内核放在0x80000000不是0x0原因是地址范围0x0:0x80000000包含I/O设备。...由于RISC-V栈是向下扩展,所以_entry代码将栈顶地址stack0+4096加载到栈顶指针寄存器sp

30720

【PADAUK】广单片机一级代理 PMC153系列芯片

Padauk广单片机一级代理 PMC153系列芯片Padauk广单片机一级代理 PMC153系列芯片是一种基于ARM Cortex-M0内核32位微控制器,具有高性能、低功耗、高集成度等特点,被广泛应用于各种嵌入式控制系统...1.1 高性能RISC CPU 架构工作模式:单一处理单元工作模式1Kx16 bits OTP 程序存储器64 Bytes 数据存储器提供80 条指令绝大部分指令都是单周期(1T)指令可程序设定堆栈深度所有的数据存储器都可当数据指针...:2.2V ~ 5.5V工作温度:-40°C ~ 85°C工作频率:0 ~ 8MHz@VDD=3.3V0 ~ 4MHz@VDD=2.5V0 ~ 2MHz@VDD 2.2V;低功耗特性:Ioperating...4.价格优势:Padauk广单片机一级代理具有规模效应和成本优势,可为客户提供更具竞争力价格。...综上所述,Padauk广单片机一级代理 PMC153系列芯片是一种高性能、低功耗、高集成度微控制器,具有广泛应用领域和选型指南,Padauk广单片机一级代理则可提供优质品质、快速供货、技术支持和价格优势等服务

15900

关于risc-v启动部分思考

这些适配工作投入精力和难度恐怕是需要集结各国最强研发实力才能发展完善risc-v就有这个魔力,竟然可以一呼百,大概是大家受到arm与因特尔压迫已经很久了,大家都想自己造芯片玩玩。...The First Stage Boot Loader (FSBL) 该执行地址位于L2 LIM,也就是地址0x08000000。该程序目的是DDR初始化后,将系统在DDR执行起来。...拷贝设备树和SBI固件到DDR。 跳转到0x80000000开始执行程序。...4.什么是opensbi 简单说,opensbi就是一个开源RISC-V虚拟化二进制接口通用规范。...使用是BSD-2开源协议,也就是任何人都可以随意修改和使用,也提供了通用规范化接口实现。 这里就需要理解一下为什么需要规范化了。

3.6K21

MIT 6.S081 (BOOK-RISCV-REV1)教材第四章内容 --Trap -- 上

Xv6陷阱处理分为四个阶段: RISC-V CPU采取硬件操作 为内核C代码执行准备汇编程序集“向量” 决定如何处理陷阱C陷阱处理程序 以及系统调用设备驱动程序服务例程。...sepc:当发生陷阱时,RISC-V会在这里保存程序计数器pc(因为pc会被stvec覆盖)。sret(从陷阱返回)指令会将sepc复制到pc。内核可以写入sepc来控制sret去向。...该函数设置RISC-V控制寄存器,为将来来自用户空间陷阱做准备。 这涉及到将stvec更改为指向uservec,准备uservec所依赖陷阱帧字段,并将sepc设置为之前保存用户程序计数器。...系统调用路径在保存用户程序计数器pc上4,因为在系统调用情况下,RISC-V会留下指向ecall指令程序指针(返回后需要执行ecall之后下一条指令)。...首先,用户程序可能有缺陷恶意,可能会传递给内核一个无效指针,或者一个旨在欺骗内核访问内核内存不是用户内存指针。

35720

RISC-V指令集讲解(1)通用寄存器和汇编指令分类

RISC-V通用寄存器和程序计数器 在之前RISC-V简介主要有 RISC-V 简介(1)RISC-V由来 RISC-V 简介(2RISC-V指令集特点及分类 RISC-V 简介(3)RISC-V...处理器前景及中国CPU发展现状 RISC-V 简介(4RISC-V指令集编码结构 本文将开始详细讲解RISC-V指令集。...CPU包含32个通用寄存器,有时候也会被称为通用寄存器文件,如图1所示。通用寄存器命名方式为X0-X31。其中第一个寄存器X0值,被硬连线到0,因此值永远是0。...对于32位系统,所有通用寄存器宽度都是32bit,寄存器总个数也是32个。 PC(program counter)是程序计数器,也是一个寄存器。...在64位CPU通用寄存器宽度是64,同时PC宽度也是64位,最高位为64-1 =63。 图1 RISC-V通用寄存器和PC [1] 2.

2.8K60

RISC-V 学习笔记:由来、基础整数指令集、汇编语言、特权架构

手册 一本开源指令集指南 第一章 为什么要有 RISC-V RISC-V目标是成为一个通用指令集架构(ISA): 它要能适应包括从最袖珍嵌入式控制器,到最快高性能计算机等各种规模处理器 它应该能兼容各种流行软件栈和编程语言...RV32I 提供一个当小于时置位指令 RISC-V 没有字节半字宽度整数计算操作 RV32I 也不包含乘法和除法,它们包含在可选 RV32M 扩展 RV32I Load 和 Store...将一个寄存器硬编码为 0 使得其中许多伪指令更容易实现。 使用加载高位立即数(lui)和程序计数器与高位立即数相加(auipc)两条指令,简化了编译器和链接器寻找外部数据/函数地址过程。...RISC-V 提供了一种异常委托机制。通过该机制可以选择性地将 断和同步异常交给 S 模式处理,完全绕过 M 模式。...在Sv39 这些巨页大小为 2 MiB,比 Sv32 略小。每个巨页再进一步分为 29个 4 KiB 大小基页。

89840

MIT 6.S081 教材第五章内容 -- 中断与设备驱动--下

本课程前置知识主要涉及: C语言(建议阅读C程序语言设计—第二版) RISC-V汇编 推荐阅读: 程序自我修养-装载,链接与库 ---- 关于RISC-V特权级架构说明 本部分内容主要参考:...csrr t0, sepc sd t0, 0(sp) RISC-V特权模式 RISC-V有三个特权模式:U(user)模式、S(supervisor)模式和M(machine)模式。...---- RISC-V异常 本部分内容主要参考: 浙大操作系统 lab2 时钟中断处理 异常(trap)是指是不寻常运行时事件,由硬件软件产生,当异常产生时控制权将会转移至异常处理程序。...该寄存器控制将哪些中断委托给S模式处理,它结构可以参考mip寄存器,如mideleg[5]对应于 S模式时钟中断,如果把它置位, S模式时钟中断将会移交 S模式异常处理程序不是 M模式异常处理程序...定时器中断来自附加到每个RISC-V CPU上时钟硬件。Xv6对该时钟硬件进行编程,以定期中断每个CPU。 RISC-V要求定时器中断在机器模式不是管理模式下进行。

34740

MIT_6.s081_Lab4:Xv6 and Trap

MIT_6.s081_Lab4:Xv6 and Trap 于2022年3月5日2022年3月5日由Sukuna发布 Lab4_1 RISC-V Assembly 我们需要运行对call.c这份代码编译...RISC-V是小端存储.如果是大端存储呢?...输出如下: 1) 在def.h添加backtrace()函数声明. 2) GCC 编译器将当前执行函数帧指针存储在寄存器s0,s0就对应上面的fp指针. static inline uint64...滴答是xv6相当随意时间单位,由硬件计时器产生中断频率决定。 如果应用程序调用sigalarm(0,0),则内核停止生成定期警报调用。...test1/test2(): 恢复中断代码 8.handler完成后,控制权返回到用户程序最初被中断指令。必须确保寄存器内容恢复,以及重置警报计数器。以便定期调用handler。

54930

浅析C++内存布局

exe程序存放在磁盘,执行时被加载到内存不是物理内存,而是虚拟内存空间,.text存放指令。  ...(注意:初始化为0全局变量还是被保存在BSS段),static声明变量也存储在数据段。 .bss bss段存储没有初值全局变量默认为0全局变量,属于静态内存分配。 ...总结 1、执行文件包含了text、rodata、data段内容,不包含bss段内容(一堆0放入执行文件没有意义) 2、堆和栈内存增长方向是相反:栈是从高地址向低地址生长,堆是从低地址向高地址生长...一个空类对象大小是1,为什么不是0? 类A明明是空类,它大小应该为0为什么编译器输出结果为1呢?...西部数据和AMD都明确说在用RISC-V做芯片,CEVA在用RISC-V做控制芯片核,谷歌也在用RISC-V做一些新芯片项目。还有美光。

1.1K40

计算机系统构成及硬件基础知识

当该位位于小数点左边,k值是该位和小数点之间数码个数,当该位位于小数点右边,k值是负值,其绝对值是该位和小数点之间数码个数1。...十六进制基数是0,1,2,3,4,5,6,7,8,9,a,b,c,d,e。二进制转十六进制就是以二进制4位进行划分(注意是从右边开始划分,不满4,在最左边用0补充)。...它主要包括程序计数器(PC),指令寄存器(IR),指令译码器,时序部件。程序计数器又称指令计算器或者指令指针。在某些类型计算,用来存放正在执行指令地址;在大多数计算机,则存放下一指令地址。...指令地址显示有2种可能:一种是顺序情况,每执行一条指令,程序计算器1,以形成下一条指令地址。该加1计算器功能,有的机器是PC机本身具有,有的是用运算器来完成。...应用程序层解决用户特定不同应用需要问题,应用程序开发者借助于程序设计语言来表达应用问题,开发各种应用程序,既快捷又方便。最终用户则通过应用程序与计算机系统交互来解决他应用问题。

96810

linux内核学习(四)之回顾简单汇编知识(一))

,我们知道一般ARM都是采用risc架构,如果有网友对risc-v架构感兴趣,可以来交流学习),好了,废话就不多说了,开始进入主题啦!...(1)ARM状态下通用寄存器与程序计数器: (2)ARM状态下程序寄存器: 注意上面表格中小影阴直角三角形表示是分组寄存器,所谓分组寄存器,就是说是当前模式下独有的,不共享。...注解: --1 其中 r0~r3 主要用于子程序间传递参数, r4~r11 主要用于保存局部变量,但在 Thumb 程序,通常只能使用 r4~r7 来保存局部变量;r12 用作子程序间scratch...2、(汇编)伪指令: 它本质上不是指令(只是和 指令一起写在代码),它是编译器环境 提供,目的是用来指导编译过程,经过 编译后伪指令最终不会生成机器码。...4、ARM8种寻址方式(同样这里先理性了解一下): • 寄存器寻址 mov r1, r2 • 立即寻址 mov r0, #0xFF00 • 寄存器移位寻址 mov r0, r1, lsl #3 • 寄存器间接寻址

47410

微机原理与接口技术 重点详解与章节总结——微处理器系统结构

程序计数器(PC) 程序计数器也叫指令计数器,它实际上也是一个寄存器,**它总是指出下一条要执行指令在存储器地址。...**在顺序执行指令情况下,当它把一条指令地址码送到地址总线后,程序计数器内容就自动调整,这条指令是几个字节,它就几,从而又指向下一条要执行指令地址。...程序计数器(PC) 程序计数器又称指令计数器,它是指出下一条要执行指令在存储器地址。...RISC设计思想 RISC主要特点是:大多数指令在一个时钟周期内完成;采用装载—存储(Load/Store)结构;尽量将运算数据存放在寄存器,从而减少访问内存次数;操作由硬件完成,不是通过微指令完成...RISC体系优点与缺点 RISC指令优点:在使用相同芯片技术和相同运行时钟下,RISC系统运行速度将是CISC2~4倍。RISC指令比较简单、对称、均匀。

1.3K10

RISC-V 汇编语言程序设计(2)汇编程序asm_run_led

使用RISC-V 汇编语言,编写一个led 跑马灯实验 程序分析: LI x8, 0xf0000000; # 设置gpio address; LI是伪指令,可被编译器翻译成LUI...ADDI x6,x0,0 ; # 初始化 变量x6 =0; x0值和0后将和存储到x6寄存器。意为将x6寄存器清零。risc-v汇编指令集内无专门用来清零指令。...0x80对2进制数是1000_0000。但是目前不能把x10内值直接输出到gpio地址上。...因为led是共阳设计,一端已经是3.3V高电平,led7对GPIO接口如果是1,led7不会被点亮。反而其他led灯会被点亮,因为led6-0此时为低电平。所以需要把x10值整体取反。...SH x0, 4(x8); # addr[0xf000_0004] = 0 as output 用gpio地址4,生成方向控制寄存器地址f000_0004。

1.4K30

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券