ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[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 ```