单龙芯3A3000-7A1000PMON研究学习-(16)撸起袖子干-分析代码前的准备工作3-寄存器
1.这篇还是稍微介绍一下cpu相关的寄存器。
手册里面说到的寄存器分两种,一种是cpu使用的(汇编中用来存放数据的),另一种是外部设备寄存器(一般用于配置功能,或者读写外部设备数据用的。),在手册中都叫寄存器,但是两种有较大区别,这里要讲的是cpu使用的寄存器,他们的作用相当于你吃饭的筷子和碗,没得筷子和碗,你就没法吃饭。cpu也是,没得寄存器,没法计算和运行啦。
2.龙芯寄存器,这是定点数寄存器,共32个,每个64位,而且有一些有特定功能。
REGISTER
NAME
USAGE
$0
$zero
常量0(constant value 0)
$1
$at
保留给汇编器(Reserved for assembler)
$2-$3
$v0-$v1
函数调用返回值(values for results and expression evaluation)
$4-$7
$a0-$a3
函数调用参数(arguments)
$8-$15
$t0-$t7
暂时的(或随便用的)
$16-$23
$s0-$s7
保存的(或如果用,需要SAVE/RESTORE的)(saved)
$24-$25
$t8-$t9
暂时的(或随便用的)
$28
$gp
全局指针(Global Pointer)
$29
$sp
堆栈指针(Stack Pointer)
$30
$fp
帧指针(Frame Pointer)
$31
$ra
返回地址(return address)
使用的时候一般使用第二列别名。第一列的名称也是可以用的。
3.其他寄存器
3.1 整数乘法寄存器HI、LO
MIPS中和整数乘除法相关的寄存器有两个:HI寄存器和LO寄存器。在64位处理器上,对于两个32位做乘法运算后,可以产生64位结果。可以临时将结果的低32位放在LO寄存器,高32位放在HI寄存器。例如下面的指令:
mult t0,t1
mflo a4
mfhi a5
上面的指令”mult t0,t1”实现的是寄存器t0和寄存器t1的乘法操作,结果的低32位存放在寄存器LO,结果的高32位存放在寄存器HI。mult中的mul代表乘法,t代表临时存储(temply)。HI和LO是特殊的寄存器,不允许程序直接使用,里面的结果要通过指令mflo和mfhi获取。“mflo a4”就是拷贝寄存器LO的值到通用寄存器a4,“mfhi a5”就是拷贝寄存器HI的值到通用寄存器a5。
HI和LO寄存器也用于除法运算结果的临时保存。除法运算结果商临时存放在寄存器LO,余数存放在寄存器HI。使用实例如下:
div t0,t1
mflo a4
mfhi a5
上面指令“div t0,t1”实现的是寄存器t0和t1的除法运算,运算结果的商存放在寄存器LO,余数存放在寄存器HI。类似于LO = t0/t1,HI = t0%t1
在HI和LO内的数据还是要通过指令mflo和指令mfhi拷贝到通用寄存器才可以使用。
4.除了定点数的,那就还有浮点数的。(一般用的很少,了解一下)
浮点寄存器编号 | 功能简介 |
f0,f2 | 用作函数返回值 |
f12−f19 | 用作传递参数 |
f24−f31 | 寄存器变量,发生函数调用时要保存 |
f1、f3-f 11 、 f11、f11、f20-$23 |
用作临时变量 |
5.协处理器的寄存器
在MIPS体系结构中,可支持多个协处理器(Co-Processor)。其中,协处理器0(简称CP0)是体系结构中必须实现的。CP0就是系统控制处理器,它起到控制CPU的作用,比如CPU配置、高速缓存控制、异常中断控制、存储单元控制、定时器、错误检测等。详细的功能请参考《user2.pdf》
这些寄存器需要特殊的指令才能操作,并且要在特权模式下。
mfc0
mtc0
mips好像是没有状态寄存器的,但是目前来看应该都放在协处理器0里面了。
6.在PMON的start.S中,开始就注释了一些寄存器的定义,比较重要
/*
* Register usage:
*
* s0 link versus load offset, used to relocate absolute adresses.
* s1 free
* s2 memory size.
* s3 free.
* s4 Bonito base address.
* s5 dbg.
* s6 sdCfg.
* s7 rasave.
* s8 L3 Cache size.
*/
单龙芯3A3000-7A1000PMON研究学习-(16)撸起袖子干-分析代码前的准备工作3-寄存器相关推荐
- 单龙芯3A3000-7A1000PMON研究学习-(14)撸起袖子干-分析代码前的准备工作2
1.我细细回想一下,感觉要准备的东西很多. 比如体系结构,汇编指令,地址映射,外设.... 然而,光体系结构就复杂到要用n页(官方的)pdf才能说清楚(其实不一定能说清楚,可能还得慢慢去琢磨).这里还 ...
- 单龙芯3A3000-7A1000PMON研究学习-(12)撸起袖子干-分析代码前的准备工作1
1.make的过程我说了个大概,大家可以参考一下前面的文章.现在准备分析代码吧,其实这个准备工作内容应该蛮多的.可能后面还要补充. 2.首先找到关键的bin文件啊,就是可以最终下载到flash,能启动 ...
- come type6 定义_COMe-B6101龙芯3A3000 COM Express Type6模块
COMe-B6101是一款以龙芯3A多核处理器和AMD RS780E SB710芯片组为核心,高可靠性和高效能的主板模块.COMe-B6101 内部集成ATI M72-based图像引擎,支持双屏显示 ...
- 龙梦拿下3万片大单 龙芯电脑年底量产无悬疑
10月9日,龙芯有关人士通过搜狐博客透露,"龙梦电脑已经有人拿到货,批量生产在11月15日以后,因为量产的芯片11月15日才到."这与龙梦科技此前关于"龙芯电脑年底量产& ...
- 单龙芯3A3000-7A1000PMON研究学习-(19)撸起袖子干-再来一杯代码3
1.start.S包含一个独立的pcitlb.S文件 ########################################## PRINTSTR("NO TLB cach ...
- 单龙芯3A3000-7A1000PMON研究学习-(8)撸起袖子干-make tgt=rom初步分析(a)
1.make tgt=rom 开始编译了. 在zloader.3a3000_7a目录下的Makefile.inc,指定了我们要的目标. tgt = rom. 所以就是执行73行的rom这个目标. 这里 ...
- 单龙芯3A3000-7A1000PMON研究学习-(11)撸起袖子干-make tgt=rom的编译过程
1. 今天来分析一下makefile,看看如何编译出执行文件pmon的. 先贴几张图,makefile的内容,这是一些依赖关系 图一 图二 图三 图四 图五 2.图一解释 rom这个目标又三个依赖,c ...
- 走进龙芯3A3000(四)安装XFCE4
我想要安装KDE 我想要qtwebengine的MIPS64实现.曾经读过千里孤坟的<KDE综览>,就深深喜欢上了KDE,当时的版本还是KDE3.后来KDE4发布,千里孤坟又写了<K ...
- Linux内核4.10在龙芯3A3000笔记本上的移植
http://ask.loongnix.org/?/article/66 http://ask.loongnix.org/?/article/67 http://ask.loongnix.org/?/ ...
最新文章
- c4d+ps打造抽象NFT加密艺术 Create Abstract NFT Crypto Art with Cinema 4D + Photoshop
- UML学习---交互
- 一个关于nvarchar字段排序,中英文混合排序的问题
- protobuf的安装和卸载
- java实参将数据传递给形参的两种形式
- python界面设计实例qt_pyqt的最小示例qtreeview和qt设计
- y7000p内存是一个16还是8+8_现货黄金创8年新高!黄金ETF年内净值增逾16%,买入还是离场?...
- 创建控制文件副本出现错误ORA-00205: error in identifying control file
- 吉他扒和弦 扒谱工具Riffstation
- TikZ从零开始(一)——实例之受力分析图绘制
- Mac 使用终端彻底格式化U盘
- BZOJ 2759 一个动态树好题(Link-Cut Tree+数学)
- css3线性渐变怎么写,CSS3线性渐变指南
- 通过python理解相速度和群速度
- python蒙特卡洛模拟return_蒙特卡罗方法入门
- Poi和easyExcel
- delphi 10.3 (一) 控件安装和使用
- 前后分离必备神器,YApi小白部署攻略
- 田老师书法工作室学员作品展(二)
- 软件推荐:强力卸载软件HIBIT