转:终于知道mips中gp寄存器的用法了

MIPS 寄存器 概要 MIPS寄存器 RISC的一个显著特点就是大量使用寄存器。因为寄存器的存取可以在一个时钟周期内完成,同时简化了寻找方式,所以,MIPS的指令中除了加载/存储指令以外,都使用寄存器或者立即数作为操作数,以便让编译器通过保持对寄存器内数据的频繁存取进一步优化代码的生成性能。   MIPS32寄存器分为两类:通用寄存器(GPR)和特殊寄存器。 通用寄存器(GPR) 在MIPS体系结构中有32个通用寄存器,在汇编程序中可以用编号$0~$31表示,也可以用寄存器的名字表示,如sp、sp、sp、t1、$ta等,如 阅读详情
 

http://www.imhan.com/archives/19/

费了好大的劲,终于知道gp寄存器的用法了。

首先说说gp寄存器出现的原因吧,由于RISC体系的CPU,每条指令都是32Bit,而地址总线也是32Bit,这样,就不可能通过一条指令来实现Memory的访问。

MIPS中,访问Memory的指令格式为:

lw r1, offset(r2)

其中,offset为16Bit,也就是说,最多能访问以r2为基地址,前后32K的空间。

于是这个时候,gp就闪亮登场了。

我们知道,GCC在编译过程,会将变量分别放在data,bss,common等段。而编译mips程序时,会将小变量放入sdata,sbss,scommon等段。这个大小由编译选项-G来决定。-G0则表示不使用小数据段。默认是-G8,表示小于或等于8 byte的数据将放入小变量区。

这样的话,在上电时给gp初始化一个值,那么,所有小变量区的变量就可以通过

lw r1, offset(gp)

来访问了。

那么,

 

from the man of gcc:

Code:
-G num
   Put global and static objects less than or equal to num bytes into the small
   data or bss sections instead of the normal data or bss sections.  The default
   value of num is 8.  The -msdata option must be set to one of sdata or use for
   this option to have any effect.

   All modules should be compiled with the same -G num value.  Compiling with dif‐
   ferent values of num may or may not work; if it doesn�t the linker will give an
   error message---incorrect code will not be generated.

RISC-V MCU gp全局指针说明 gp,globalpointer,全局指针寄存器,RISC-V 32个寄存器之一,为了优化±2KB内全局变量的访问。 gp寄存器在启动代码中加载为__global_pointer$的地址,并且之后不能被改变。 linker时使用__global_pointer$来比较全局变量的地址,如果在范围内,就替换掉lui或puipc指令的 absolute/pc-relative寻址,变为gp-relative寻址,使得代码效率更高。该过程被称为linker relaxation(链接器松弛),也可以使用-Wl. 阅读详情

相关推荐

mips寄存器

mips体系结构有 : 32个通用寄存器,2个特殊寄存器(整数乘除法寄存器), 32个浮点寄存器。 pc : 程序计数器,在mips体系结构下,pc不是一个通用寄存器。 通用寄存器: 寄存器编号 助记符 用途 0 zero 不管往里写入什么,总是返回0 1 at 由汇编器使用 2~3 v0,v1 用来存放子程序的返回值(非浮点) 4~7 a0~a3 用来传递子程序的前四...

shliushliu的博客 1万+

MIPS的32个通用寄存器

本文对MIPS的32个通用寄存器及它们的常用场合进行了小结,先看一张比较官方的截图。 zero 它一般作为源寄存器,读它永远返回0,也可以将它作为目的寄存器写数据,但效果等于白写。为什么单独拉一个寄存器出来返回一个数字呢?答案是为了效率,MIPS的设计者只允许在寄存器内执行算术操作,而不允许直接操作立即数。所以对最常用的数字0单独留了一个寄存器,以提高效率 at 该寄存器为

亦大乐谍的嵌入式分享小站——思考/验证/总结/分享 1万+

MIPS指令以及数据通路

MIPS指令以及数据通路 MIPS 1字=4字节 1字节=8位 即:1字=32位 每一个时钟周期:IM取指令->译码->ALU执行->DM访存->回写Reg ADDI addi 加立即数,支持溢出 addi $22,$24,6 格式: ADDI rt,rs,imm16 运算: rt<=rs+imm16 数据通路: NPC:把当前指令地址传送给PC PC:把当前PC地址...

寒泉 2万+

VxWorks/MIPS运行期的gp重定位

引言 在《VxWorks引导启动过程》和《VxWorks启动之romStart剖析》中都留下了这样一个疑问,那就是bootrom中compressedEntry()和vxWorks_rom(Compress)中usrEntry()这两个桩函数到底是用来干什么的呢?由于桩函数封装的代码只有寥寥数行,我们很容易分析透彻。除了对usrInit()的简单封装外,核心就是对gp寄存器的赋值操作,也

曾梦想仗剑走天涯 6543

MIPS构架简介【转】

<br />MIPS体系结构首先是一种RISC架构 <br />1 MIPS32架构中有32个通用寄存器,其中$0(无论你怎么设置,这个寄存器中保存的数据都是0)和$31(保存函数调用jal的返回地址)有着特殊的用途,其它的寄存器可作为通用寄存器用于任何一条指令中。 <br />虽然硬件没有强制性的指定寄存器使用规则,在实际使用中,这些寄存器的用法都遵循一系列约定。这些约定与硬件确实无关,但如果你想使用别人的代码,编译器 和操作系统,你最好是遵循这些约定。 <br />寄存器编号 助记符 用法 <br />

notuch的专栏 826

寄存器(3)KDB入门+MIPS汇编及汇编代码详解

KDB入门+MIPS汇编及汇编代码详解

哈尼的博客 3665

mips处理器学习笔记

     摊上了移植bootloader和OS的事情,没办法,得把mips工作机制弄明白了才能干好啊。今天托我家狗狗了买了本 《see mips run》。就用它为主了。争取用一个月的时间走一遍。同时把学习笔记和心得记录到这里。本篇为第一章。从mips体系结构开始。   一.mips汇编语言    1.借助c预处理器,在汇编代码中避免使用寄存器编号。尽量使用寄存器名称。     2. 在一个单词后加 ":"表示这是个标号,标号可以包含各种字符,以及定义代码入口点和指定数据段的存储地址。     /*   

听说读写 1404

10X Genomics单细胞数据分析实战:从FASTQ到UMAP可视化的完整流程

本文详细介绍了10X Genomics单细胞数据分析的完整流程,从FASTQ原始数据处理到UMAP可视化。通过Seurat工具包实现数据质量控制、标准化、降维聚类和细胞注释,特别适合生物信息学新手学习。文章包含可复现的代码示例和常见问题解决方案,帮助研究者快速掌握单细胞测序数据分析的核心技术。

weixin_30952535的博客 535

终于知道mips中gp寄存器的用法了

来源:http://www.imhan.com/archives/19/ 费了好大的劲,终于知道gp寄存器的用法了。 首先说说gp寄存器出现的原因吧,由于RISC体系的CPU,每条指令都是32Bit,而地址总线也是32Bit,这样,就不可能通过一条指令来实现Memory的访问。 MIPS中,访问Memory的指令格式为: lwr1,offset(r2) 其中,offset为16B...

4971

NUS-WIDE-10K数据集制作

NUS-WIDE是一个多标签数据集,数据集中一共包含26,9648个样本,可以分为81个类。最近在做跨模态检索项目,发现有很多论文里面都用到了NUS-WIDE-10K数据集,但是在网上也没有搜索到相关的数据集下载链接或者是数据集制作代码,所以自己动手写了一个NUS-WIDE-10K数据集的制作代码。 1.介绍 我在网上找到的最早关于NUS-WIDE-10K数据集描述的论文是:Cross-modal Retrieval with Correspondence Autoencoder。描述如下:作者选择了N

weixin_44012382的博客 4200

camera 知识速查

本文总结了Camera开发中的常见问题排查方法和关键技术点。主要内容包括:I2C/MIPI不通的排查步骤、时序问题分析方法、Sensor/AF/Flash/PDAF的Bring Up流程、OTP调试方法、PDAF原理及调试、CTS/ITS问题解决思路、AE震荡解决方案、Systrace性能分析方法、Flicker产生原理、Tombstone问题定位等。还涉及V4L2框架解析、问题定位分层方法、Sensor Setting注意事项、时钟信号概念、第三方应用卡顿排查、大光圈概念、Monkey测试方法。

qq_41665131的博客 783

mips指令与寄存器详解

MIPS通用寄存器 MIPS有32个通用寄存器($0-$31),各寄存器的功能及汇编程序中使用约定如下: 下表描述32个通用寄存器的别名和用途 REGISTER NAME USAGE $0 $zero 常量0(constant value 0) $1

FrozenShore 4万+

HttpClient跳过HTTPS证书验证的3种实战方法(含完整代码示例)

本文详细介绍了HttpClient跳过HTTPS证书验证的3种实战方法,包括自定义TrustManager、SSLContext配置和HttpClientBuilder高级定制,并提供完整代码示例。这些方法适用于开发和测试环境,帮助开发者快速解决自签名证书或未认证证书导致的HTTPS请求失败问题,但需注意生产环境的安全风险。

weixin_29213655的博客 530

MIPS 通用寄存器

MIPS有32个通用寄存器($0-$31),各寄存器的功能及汇编程序中使用约定如下: 下表描述32个通用寄存器的别名和用途 REGISTER NAME USAGE $0 $zero 常量0(constant value 0) $1 $at 保留给汇编器(Reserved fo

flyingqr的专栏 5万+

STM32外部中断EXTI原理与飞控实时应用实战

外部中断(EXTI)是嵌入式系统中实现事件驱动和实时响应的核心机制,其本质是将外部电平变化转化为可调度的CPU中断事件。基于ARM Cortex-M NVIC架构,EXTI通过GPIO-EXTI-NVIC三级硬件通路实现低延迟信号捕获,具备边沿触发、优先级管理与挂起控制等关键能力。在四轴飞控、工业传感器、人机交互等对毫秒级响应有强需求的场景中,EXTI显著优于轮询方式,兼顾实时性与CPU资源效率。实际开发需严格遵循SYSCFG映射→EXTI配置→NVIC使能的时序逻辑,并规避常见陷阱如中断号误配、伪触发、低

weixin_36382073的博客 65

【2026年华为暑期实习(AI)-4月29日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

本文摘要涵盖了机器学习和深度学习中的多个核心概念与技术,包括非负矩阵分解、条件数、MobileNet创新点、LDA降维、大模型评测指标、半精度训练、多任务学习、GPU存储层次、正则化、张量并行等。通过12道单选题和8道多选题的形式,系统性地考察了相关理论原理、应用场景及工程实践要点。题目设计注重概念准确性(如LDA目标函数)、技术细节(如Megatron-LM的并行策略)与实际应用(如FP16训练动机),并包含概率统计(二项分布)和数值计算(微分误差分析)等数学基础内容,全面检验读者对AI领域关键知识的掌握

m0_73659489的博客 142

MIPS指令集及汇编

MIPS指令集及汇编 由于本人最近在看底层操作系统与汇编的有关书籍,故写此博文总结,以便后续本人及感兴趣朋友阅读。如有错误恳请指出,一起学习,一起进步!   目录 MIPS指令集及汇编 一、MIPS简介: 二、MIPS体系结构 1.寄存器特点: 2.整数乘法单元和寄存器 3.寻址方式 4.存储器和寄存器中的数据类型 三、MIPS指令与汇编 1.指令格式 2.寻址方式 3.指令...

老6 2万+

esp8266步进电机驱动控制

blinker控制步进电机起保停,正反转(Arduino uno+esp8266+TB6600驱动器) Arduino uno的板子的程序 esp8266板子接入到Arduino uno的控制引脚上的5,6,7 esp8266程序 //****库***** #define BLINKER_WIFI //官方wifi协议库 #define BLINKER_PRINT Serial //串口协议库 #include <Blinker.h&gt

perseverance51博客 2855

MIPS中的寄存器

32个通用寄存器: 寄存器编号 助记符 用法 0 zero 永远返回值为0 1 at 用做汇编器的暂时变量 2-3 v0,v1 子函数调用返回结果 4-7 a0-a3 子函数调用的参数 8-15 t0-t7 暂时变量,子函数使用时不需要保存与恢复 24-25 t8-t9   16-23 s0-s7 子函数寄存器变量。子函数必须保存和恢复使用过的变量在函数返回之前,从而调用函数知道这些

monkeyzh123的专栏 4529

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

MIPS指令与MIPS汇编语言

1 MIPS简介 MIPS是(Microcomputer without interlocked pipeline stages)的缩写,含义是无互锁流水级微处理器。MIPS采用的是精简指令系统计算结构(RISC结构)(与之对应的:(复杂指令集)CISC结构)。RISC比CISC的设计更加简单,由于其授权费用低,被INTEL外的大多数厂商使用。同时在设计理念上MIPS强调软硬件协同提高计算机性能,并简化硬件设计。 MIPS 是最早的,最成功的RISC处理器之一,MIPS处理器广泛的应用于:数字电视、

夜飘凌的博客 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

MIPs32寄存器

title: Mips-register date: 2019-12-07 14:54:25 description: Mips 32个MIPs寄存器的作用 一. 简介  MIPS有32个通用寄存器($0-$31),各寄存器的功能及汇编程序中使用约定如下:  下表描述32个通用寄存器的别名和用途 REGISTER NAME USAGE $0 $zero 常量0(constant ...

qq_38877888的博客 2283

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MIPS介绍与MIPS汇编的常用指令

描述 CTF做题时会遇见MIPS汇编的题目,IDA是不能反汇编的需要自己了解一些MIPS方面的知识; Began: ADDIU(DADDIU) : 把一个寄存器的内容加上一个无符号的立即数(赋值) DADDIU R1,R2,#3 XORI 一个寄存器中的内容与一个立即数异或 (异或运算) XORI R1,R2,#3 CTF做了一到MIPS汇编的题目是这样的:看懂之后就可以编写python解题脚本了; str1 = 'cbtcqLUBChERV[[Nh@_X^D]X_YPV[C

半岛铁盒的博客 4508

MIPS寄存器约定

对于在一个CPU上进行开发,掌握其工作的CPU的寄存器约定是非常重要的。 MIPS体系结构提供了32个GPR(GENERAL PURPOSE REGISTER)。这32个寄存器的用法大致如下: REGISTER   NAME          USAGE $0                   $zero           常量0(constant value 0) $2-$3        

yoursy的专栏 2711

mips寄存器介绍

一 概要 mips拥有32个通用寄存器,一个pc寄存器,一个HI和LO寄存器,另外协处理器也有自己的寄存器,如CP0有32个单独的寄存器,浮点协处理单元也有自己独立的寄存器。 二 32个通用寄存器 s0–s8: By convention, subroutines must guarantee that thevalues of these registers on e

whuzm08的专栏 8474
上一篇: DiSEqC
下一篇: CSA3.0
EMMA3SLP
博客等级 码龄17年 5粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值