搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
我家自动化
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
获取相机内参和外参的方法
2
时间序列预测新范式——基于迁移学习的AdaRNN方法_adarnn github
3
在SQL用代码编写好数据库并且保存为sql文件后如何正确的打开?_sql怎么打开之前写的代码
4
为什么列式存储会被广泛用在 OLAP 中?_列式存储数据库应用场景
5
STM32踩坑笔记_t' is defined pubweak in a section implicitly decl
6
ARP协议与DNS协议详解_dns与arp
7
Win10+VS2015+cuda10.1安装_将visualstudiointegration\extras\visual_studio_inte
8
在Kaggle上加载项目代码,并进行运行_kaggle代码在线运行
9
适合手机端的ckeditor样式_Lineage OS 17.1支持旧设备刷入,给旧手机升级安卓10的底层...
10
使用DrawerLayout,FragmentTabHost实现测滑式底部菜单栏界面_drawerlayout 底部滑动
当前位置:
article
> 正文
MIPS体系结构(1)_mips v1
作者:我家自动化 | 2024-03-20 08:18:11
赞
踩
mips v1
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 子函数寄存器变量。子函数必须保存和恢复使用过的变量在函数返回之前,从而调用函数知道这些寄存器的值没有变化。
26,27 k0,k1 通常被中断或异常处理程序使用作为保存一些系统参数
28 gp 全局指针。一些运行系统维护这个指针来更方便的存取“static“和”extern"变量。
29 sp 堆栈指针
30 s8/fp 第9个寄存器变量。子函数可以用来做桢指针
31 ra 子函数的返回地址
寄存器名约定与使用:
*at: 这个寄存器被汇编的一些合成指令使用。如果你要显式地使用这个寄存器(比如在异常处理程序中保存和恢复寄存器),有一个汇编directive 可被用来禁止汇编器在directive 之后再使用at 寄存器(但是汇编的一些宏指令将因此不能再可用)。
*v0, v1: 用来存放一个子程序(函数)的非浮点运算的结果或返回值。如果这两个寄存器不够存放需要返回的值,编译器将会通过内存来完成。
*a0-a3: 用来传递子函数调用时前4 个非浮点参数。在有些情况下,这是不对的。
* t0-t9: 依照约定,一个子函数可以不用保存并随便的使用这些寄存器。在作表达式计算时,这些寄存器是非常好的暂时变量。编译器/程序员必须注意的是,当调用一个子函数时,这些寄存器中的值有可能被子函数破坏掉。
*s0-s8: 依照约定,子函数必须保证当函数返回时这些寄存器的内容必须恢复到函数调用以前的值,或者在子函数里不用这些寄存器或把它们保存在堆栈上并在函数退出时恢复。这种约定使得这些寄存器非常适合作为寄存器变量或存放一些在函数调用期间必须保存原来值。
* k0, k1: 被OS 的异常或中断处理程序使用。被使用后将不会恢复原来的值。因此它们很少在别的地方被使用。
* gp: 如果存在一个全局指针,它将指向运行时决定的,你的静态数据(static data)区域的一个位置。这意味着,利用gp 作基指针,在gp 指针32K 左右的数据存取,系统只需要一条指令就可完成。如果没有全局指针,存取一个静态数据区域的值需要两条指令:一条是获取有编译器和loader 决定好的32 位的地址常量。另外一条是对数据
的真正存取。为了使用gp, 编译器在编译时刻必须知道一个数据是否在gp 的64K 范围之内。通常这是不可能的,只能靠猜测。一般的做法是把small global data (小的全局数据)放在gp 覆盖的范围内(比如一个变量是8 字节或更小),并且让linker 报警如果小的全局数据仍然太大从而超过gp 作为一个基指针所能存取的范围。并不是所有的编译和运行系统支持gp 的使用。
*sp: 堆栈指针的上下需要显示的通过指令来实现。因此MIPS 通常只在子函数进入和退出的时刻才调整堆栈的指针。这通过被调用的子函数来实现。sp 通常被调整到这个被调用的子函数需要的堆栈的最低的地方,从而编译器可以通过相对於sp 的偏移量来存取堆栈上的堆栈变量。详细可参阅10.1 节堆栈使用。
* fp: fp 的另外的约定名是s8。如果子函数想要在运行时动态扩展堆栈大小,fp 作为桢指针可以被子函数用来记录堆栈的情况。一些编程语言显示的支持这一点。汇编编程员经常会利用fp 的这个用法。C 语言的库函数alloca()就是利用了fp 来动态调整堆栈的。如果堆栈的底部在编译时刻不能被决定,你就不能通过sp 来存取堆栈变量,因此fp 被初始化为一个相对与该函数堆栈的一个常量的位置。这种用法对其他函数是不可见的。
* ra: 当调用任何一个子函数时,返回地址存放在ra 寄存器中,因此通常一个子程序的最后一个指令是jr ra.
子函数如果还要调用其他的子函数,必须保存ra 的值,通常通过堆栈。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/我家自动化/article/detail/271932
推荐阅读
article
九黎洞天
游戏
系统软件
开发...
当然,具体的功能需求还需要根据
游戏
的特点和目标受众来确定。
游戏
玩法:确定
游戏
的核心玩法,比如是角色扮演、策略、冒险还是其...
赞
踩
article
【博客45】
char
转换
为
int
时的
符号
位
扩展
问题_
char
转换
为
int
高位
符号
扩展
...
内容: 记录下
char
型转换
为
int
型时,
符号
位
扩展
的问题先看下例码:此时我们希望得到的结果是正数,因
为
80是一个正数,...
赞
踩
article
用
通俗易懂
的方式讲解大模型:
ChatGLM3
-6B 部署指南_
chatglm3
-6b/
resolve
...
上面介绍的是官方的部署,其实使用 FastChat 来部署更加简单,这种方式可以参考我之前的这篇文章,但是用 FastC...
赞
踩
article
(免费领源码)
java
#
SSM
#
mysql
基于
区块
链
的物联网
数据
交易46193-计算机
毕业设计
项目选...
基于
区块
链
的物联网
数据
交易从角色上划分为了系统用户、管理员两种角色。管理员用户角色:(1)登录:管理员的账号是在
数据
表表...
赞
踩
article
基于
android
开发
的
毕业设计
,
毕业设计
(论文)-
基于
android
社交
软件
的
开发
.doc...
盐城师范学院
毕业设计
盐 城 师 范 学 院
毕业设计
基于
android
社交
软件
的
开发
学生姓名学 院 信息工程学院专 业...
赞
踩
article
C++
builder
中键盘值(
Virtual
key
)
_
c++
builder
delete
键值...
VK
_
LBUTTON Left mouse button VK
_
RBUTTON Right mouse button V...
赞
踩
article
“
21
天好习惯”
第一期
-14_
i
型
指令
格式
...
计组笔记3.5.1 MIPS32
指令
架构3.
指令
集功能分析(1)R
型
指令
①R
型
运算
指令
,使用到了3个寄存器,包括6种计算...
赞
踩
article
C++
开发基础——
可变
参数
与
可变
参数
模板
...
C++
语法基础
C++
开发基础——
可变
参数
与
可变
参数
模板
一,
可变
参数
1.基础概念
可变
参数
在C...
赞
踩
article
8个
免费
、
高清
、
无版权
视频
素材
下载
网站
推荐_
免费
高清
视频
...
现如今,短
视频
行业可谓是风生水起,越来越多的人加入了
视频
剪辑,最令人头疼的就是
视频
素材
不知道从哪里来。今天小编就给大家整...
赞
踩
article
python
键盘记录
器
_如何
用
Python
编写
macOS
的基本
键盘记录
器
...
键盘记录
器
可能是要在计算机上使
用
的比较多的。不幸的是,这种程序通常被很好地隐藏起来,并且常常被受害者完全检测不到。键盘记...
赞
踩
article
python
importlib
用法小结_
python
中
importlib
库
...
在使用Python的时候,大部分时候引入包,都是通过import 语句,比如有时候为了更复杂的需求,我们需要用程序化的方...
赞
踩
article
maven
指定
html
找不
到
页面,
IDEA
中
HTML
通过
servlet
3.0注解名提交表单
到
serv...
这个
问题
困扰我整整一天一夜,先是代码检查路径设置找不出
问题
,后面换tomcat版不行,抱着侥幸心理换
IDEA
版本意料之中...
赞
踩
article
使用
ffmpeg
将任意格式
视频
转
MP4
格式...
下载
ffmpeg
解压,提取
ffmpeg
.exe在mmfpeg.exe目录下新建批处理,内容如下@echo offtitl...
赞
踩
article
Tensor
数据类型
...
目录 Tensor
数据类型
属性
数据类型
判断
数据类型
转换 tensor转numpy Tens...
赞
踩
article
Java-
web
实现
导出
Excel
中多个
sheet
以及自定义
sheet
格式原理_
java
web
导出
e...
本文基于 HSSFWorkbook 实现自定义样式及多个
sheet
实现
导出
Excel
代码实现:public void ...
赞
踩
article
android
长
屏幕
分辨率
,
android
中
的
长度单位,dip、
dp
、
px
、
sp
及获取
屏幕
分辨率
和密...
本文主要讲
的
是
android
中长度单位(
dp
、
px
、
sp
)
的
用法。1、
px
:pixels(像素)(1)、不同
的
设备不同
的
...
赞
踩
article
HarmonyOS
学习
——
HarmonyOS
习题...
HarmonyOS
课程
学习
随堂测试题整理
HarmonyOS
学习
——
HarmonyOS
习题 har...
赞
踩
article
出现这种错误 “
url
” 意思是
yml
的
参数
没有配置_
yml
prefix
=
"
list
.pc-u...
配置好
参数
之后 出现这种错误 即端口占用启动Identify and stop the process that's l...
赞
踩
article
基于
opencv
与
mediapipe
的面部
跟踪
(
人脸
检测追踪)
python
代码实现_
人脸
跟踪
代码...
本文主要利用
opencv
读取摄像头或视频文件信息,通过
mediapipe
对
opencv
读取的图像数据进行
人脸
检测
跟踪
。输...
赞
踩
article
c#
模拟
鼠标
操作,控制其
移动
速度...
c#
模拟
鼠标
移动
,控制其
移动
速度。
c#
模拟
鼠标
操作,控制其
移动
速度 ...
赞
踩
相关标签
游戏
C
大模型
算法
语言模型
langchain
人工智能
深度学习
java
mysql
spring boot
python
php
c++
c#
基于android开发的毕业设计
microsoft
keyboard
insert
button
scroll
其他
开发语言
linux
c语言