1. 寄存器
mips下一共有32个通用寄存器
汇编语言中,寄存器标志以$开头
寄存器的访问,可以直接使用0..31(如0..31(如0),也可以使用define的名字,如下:

2. 程序结构
基本与gcc汇编一致
.data开始定义数据段
.text开始定义代码段
3. 几个常用的汇编指令
如果要访问内存, 只能使用load\stor指令
指令中一些字符的含义:
b,    一般指byte(1个字节)
    w,    一般指word(4个字节)
3.1 load
    lb reg_dest, ram_src        // 将内存ram_src中的1字节数据载入(load)到reg_dest寄存器
    lw reg_dest, ram_src        // 将内存ram_src中的1个word(4字节)数据载入(load)到reg_dest寄存器
3.2 store
    sb reg_src, ram_dest        // 将reg_src中的一个byte数据写入到ram_dst中
    sw reg_src, ram_dest        // 将reg_src中的一个word数据写入到ram_dst中
3.3 li(load immediate)
    li reg_dest, value                // 加载立即数到寄存器4. 寻址
4.1 la(load address)
t0,var1//将变量var1的值装入t0,var1//将变量var1的值装入t0
4.2 间接寻址,地址是寄存器的内容(类似于指针)
t2,(t2,(t0)                        // 将t0寄存器ram地址的内容,载入t2寄存器(t0寄存器的值是ram地址)
    sw   t2,(t2,(t0)                         // 将t2寄存器的值写入到t0寄存器指定的ram地址
4.1 偏移量操作
 t2,4(t2,4(t0)                    //  将t0寄存器值+4的地址中的数据,装入到t2寄存器
 t2,−4(t2,−4(t0)                  // 将t2寄存器的值写入到地址$t0-45. 算术指令
最多有3个操作数
操作数只能是寄存器
所有指令统一是32位
t0,t0,t1, t2//t2//t0 = t1+t1+t2, 这个是有符号的操作
    addu   t0,t0,t1, t2//t2//t0 = t1+t1+t2, 这个是无符号的操作
 t2,t2,t3, t4//t4//t2 = t3−t3−t4,  u表示有符号操作
 t2,t2,t3, 5                   // t2=t2=t3 + 5,    add immediate(不能subi)
 t3,t3,t4                      // 结果保存在hi, lo寄存器
 t3,t3,t4                    // Lo = t3/t3/t4
                                                  // Hi = $t3 %t4Lo, Hi寄存器不支持直接获取,需要使用mfhi, mflo指令
t0//t0//t0=Hi
 t1//t1//t1=Lo
 t2,t2,t3                    // t2=t2=t36. 控制指令
6.1 Branches(分支, if-else)
    b    target                            // 直接跳转
 t0,t0,t1, target          // if (t0==t0==t1)    条件跳转
 t0,t0,t1, target          // if (t0<t0<t1)    条件跳转
 t0,t0,t1, target          // if (t0<=t0<=t1)    条件跳转
 t0,t0,t1, target          // if (t0>t0>t1)    条件跳转
 t0,t0,t1, target          // if (t0>=t0>=t1)    条件跳转
 t0,t0,t1, target          // if (t0!=t0!=t1)    条件跳转6.2 Jumps(跳转:while-for-goto)
j    target                                // 直接跳转jr t1//直接跳转到t1//直接跳转到t1寄存器的地址处
6.3. jump and link子程序调用(需要返回)
jal    sub_function                    // 调用函数sub_function, 调用前$ra=pc, 保存当前值 
 
                     
            
        













 
                    

 
                 
                    