MIPS
最后更新于:2022-04-02 04:23:09
[TOC]
## 数据类型
* 所有MIPS指令都是32位长的
* 各单位:1字节=8位,半字长=2个字节,1字长=4个字节
* 一个字符空间=1个字节
* 一个整型=一个字长=4个字节
* 单个字符用单引号,例如:'b'
* 字符串用双引号,例如:"A string"
## 寄存器
|寄存器编号 |寄存器名| 寄存器用途|
|---|---|---|
|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| 返回地址,目测也是不可做其他用途|
## 程序结构
* 本质其实就只是数据声明+普通文本+程序编码(文件后缀为.s,或者.asm也行)
* 数据声明在代码段之后(其实在其之前也没啥问题,也更符合高级程序设计的习惯)
### 数据声明
- 数据段以 .data为开始标志
- 声明变量后,即在主存中分配空间。
### 代码
* 代码段以 **.text**为开始标志
* 其实就是各项指令操作
* 程序入口为**main:**标志(这个都一样啦)
* 程序结束标志(详见下文)
### 注释
```
# Comment giving name of program and description of function
# Template.s
#Bare-bones outline of MIPS assembly language program
.data # variable declarations follow this line
# 数据变量声明
# ...
.text # instructions follow this line
# 代码段部分
main: # indicates start of code (first instruction to execute)
# 主程序
# ...
# End of program, leave a blank line afterwards to make SPIM happy
# 程序结束,留下一个空行之后
```
### 数据声明
```
name: storage_type value(s)
变量名:(冒号别少了) 数据类型 变量值
```
* 通常给变量赋一个初始值;对于**.space**,需要指明需要多少大小空间(bytes)
### 实例
```
example:
.data
var1: .word 23 # declare storage for var1; initial value is 23
# 先声明一个 word 型的变量 var1 = 3;
.text
__start:
lw $t0, var1 # load contents of RAM location into register $t0: $t0 = var1
# 令寄存器 $t0 = var1 = 3;
li $t1, 5 # $t1 = 5 ("load immediate")
# 令寄存器 $t1 = 5;
sw $t1, var1 # store contents of register $t1 into RAM: var1 = $t1
# 将var1的值修改为$t1中的值: var1 = $t1 = 5;
done
```
';