【原创】MIPS相关
MIPS是单字长定点指令平均执行速度 Million Instructions Per Second的缩写。
路由器等嵌入式系统多采用MIPS和ARM两种指令架构,最近在研究路由器,借机总结一下基于MIPS的架构和汇编语法。
1、MIPS Linux
MIPS指令系统普遍适用于小型设备的处理器架构,路由器系统中根文件系统下通常有usr、sys、proc、lib、etc、bin、var、tmp、sbin、mnt、include、dev目录。
Bin、sbin、及usr下bin、sbin用于存放路由器中应用程序的目录。
Lib目录存放程序运行时需要的动态库文件的目录。
Etc目录通常用于存放配置文件。
2、寄存器
MIPS下一共有32个通用寄存器,在汇编中,寄存器标志由$符开头,有两种表示方式:
(1)直接使用该寄存器对应的编号,例如:从$0到$31;
(2)使用对应的寄存器名称,例如:$t1, $sp;
编号、名称及用途解释如下:
|
$0
|
zero
|
永远返回零 |
|
1
|
$at
|
汇编保留寄存器(暂时变量) |
|
2-3
|
$v0 - $v1
|
(Value简写)存储表达式或者是函数的返回值 |
|
4-7
|
$a0 - $a3
|
(Argument简写)存储子程序的前4个参数,在子程序调用过程中释放 |
|
8-15
|
$t0 - $t7
|
(Temp简写)临时变量,同上调用时不保存 |
|
16-23
|
$s0 - $s7
|
(Saved or Static简写)静态变量,调用时保存 |
|
24-25
|
$t8 - $t9
|
(Temp简写)算是前面$0~$7的一个继续,属性同$t0~$t7 |
|
26-27
|
$k0 - $k1
|
(breaK off简写?)中断函数返回值,不可做其他用途 |
|
28
|
$gp
|
(Global Pointer简写)指向64k(2^16)大小的静态数据块的中间地址(字面上好像就是这个意思,块的中间) |
|
29
|
$sp
|
(Stack Pointer简写)栈指针,指向的是栈顶 |
|
30
|
$s8/$fp
|
(Saved/Frame Pointer简写)帧指针 |
|
31
|
$ra
|
返回地址,jal指令在跳转到某个地址时可把下一条指令放到$ra中 |
3、指令集
(1)Load / Store 读取/写入指令
有14条:lb、lbu、lh、ll、lw、sb、sc等等。常用指令解释:
la(load address)将一个地址存入一个寄存器;
li(load immediate)将一个立即数存入一个通用寄存器;
sw(store word)将源寄存器中的值存入指定地址;
move用于寄存器之间值的传递。
(2)算术运算指令
有21条:add、addi、addu、sub、clo、slt、div和ARM指令类似,随用随查。
(3)跳转指令
j:无条件跳转到target标签处
jr $t3:跳转到寄存器指向的地址处
jal target(jump and link):跳转到target并保存返回地址到$ra中
术语解释:
Opcode:指令基本操作,称为操作码
Rs:第一个源操作数寄存器
【原创】MIPS相关的更多相关文章
- libaio under MIPS architecture /在mips架构下使用的libaio
First, you can find libaio source in http://libaio.sourcearchive.com/ Second,download the libaio_0.3 ...
- 可执行文件(ELF)格式之讲解
ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西.它自 ...
- 可执行文件(ELF)格式的理解
摘自http://www.cnblogs.com/xmphoenix/archive/2011/10/23/2221879.html 可执行文件(ELF)格式的理解 ELF(Executable an ...
- HashMap,HashTable,ConcurrentHashMap异同比较
0. 前言 HashMap和HashTable的区别一种比较简单的回答是: (1)HashMap是非线程安全的,HashTable是线程安全的. (2)HashMap的键和值都允许有null存在,而H ...
- 如何高效的学习 TensorFlow 代码?
https://www.zhihu.com/question/41667903 Linux[公共基础]:TensorFlow的主要运行平台之一就是Linux,但是正式版对Windows的支持日趋完善, ...
- <转载> 22种代码味道(Martin Fowler与Kent Beck) http://blog.csdn.net/lovelion/article/details/9301691
Martin Fowler在Refactoring: Improving the Design of Existing Code(中译名:<重构——改善既有代码的设计>)一书中与Kent ...
- TensorFlow学习路径【转】
作者:黄璞链接:https://www.zhihu.com/question/41667903/answer/109611087来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- TensorFlow学习线路
如何高效的学习 TensorFlow 代码? 或者如何掌握TensorFlow,应用到任何领域? 作者:黄璞链接:https://www.zhihu.com/question/41667903/ans ...
- Java集合——HashMap、HashTable以及ConCurrentHashMap异同比较
0. 前言 HashMap和HashTable的区别一种比较简单的回答是: (1)HashMap是非线程安全的,HashTable是线程安全的. (2)HashMap的键和值都允许有null存在,而H ...
随机推荐
- https真的安全吗,加密登录其实不简单
登录,是做web开发的程序员做项目第一接触到的模块,看似简简单单的登录背后囊括了编程知识的方方面面. 登录安全吗?密码会不会泄露? 明文传输时代 互联网开始的时候,登录确实是使用明文校验的,甚至数据源 ...
- 在Linux下OpenCV的下载和编译
原理上来说,和windows下没有差别,我们同样使用Cmake-GUI来解决问题. 我们推荐QT和OpenCV全部采用官方的方式重新安装一遍,否则可能会丢失一些模块,而这些都会降低开发效率. 1.参考 ...
- 剑指offer(42)和为S的字符串
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 题目 ...
- Python3 tkinter基础 OptionMenu 点击按钮,出现单选的下拉列表
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- ES5 map循环一大坑:循环遍历竟然出现逗号!
一.map map大法好 这里需要解释一下Map和forEach的区别 一般来说需要返回值时使用Map,而只需要循环的使用forEach map循环常用的一些方法 /********* ES6 *** ...
- Windowsphone8外包团队——wp8控件学习资源整理
一天一天学 windows phone 控件 之 Slider(十七) 摘要:Slider 是我们最常见的控件之一,看到最多的一般在两个地方 ,一个是声音的大小,一个是色域.控制声音大小的网上很多, ...
- .NET Core 如何上传文件及处理大文件上传
当你使用IFormFile接口来上传文件的时候,一定要注意,IFormFile会将一个Http请求中的所有文件都读取到服务器内存后,才会触发ASP.NET Core MVC的Controller中的A ...
- OLAP多维数据库备份
本人开发了一款OLAP多维数据库备份软件,现将其贡献博客园. 链接: https://pan.baidu.com/s/1oL8xVZfSUiUcvrvohxKVoQ 提取码: nmh5 操作方式: 1 ...
- 在input中输入需要的数据,使用qrcode,点击生成二维码
话不多说直接上代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&quo ...
- Eclipse的Outline功能栏调出来
window-->Shoe View -->Outline 按住鼠标左键拖一下Outline功能栏,就可以无论开哪个项目都能够在右边显示Outline功能栏 转载地址:https://bl ...