ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 加载/保存(读取/写入) * 如果要访问内存,不好意思,你只能用**load**或者**store**指令 * 其他的只能都一律是寄存器操作 ``` //从内存中 复制 RAM_source 的内容到 对应的寄存器中(lw中的'w'意为'word',即该数据大小为4个字节) lw register_destination, RAM_source //同上, lb 意为 load byte lb register_destination, RAM_source //将指定寄存器中的数据 写入 到指定的内存中 sw register_source, RAM_destination // 同上, b 为 byte sb register_source, RAM_destination //这里的 li 意为 load immediate li register_destination, value ``` ## 立即与间接寻址 直接给地址 ``` // 将var1的内存地址复制到寄存器$t0中 la $t0, var1 ``` 地址是寄存器的内容(可以理解为指针) ``` // 将包含在$t0中的内存地址的字加载到$t2中 lw $t2, ($t0) // 将寄存器$t2中的字存储到内存中$t0中包含的地址 sw $t2, ($t0) ``` 偏移量 ``` // 将内存地址($t0+4)的字加载到寄存器$t2中 lw $t2, 4($t0) // 将寄存器$t2中的字存储到内存中的地址($t0 - 12) sw $t2, -12($t0) ``` * 要用到偏移量的寻址,基本上使用最多的场景无非两种:数组,栈 实例 ``` .data array1: .space 12 # declare 12 bytes of storage to hold array of 3 integers                    # 定义一个 12字节 长度的数组 array1, 容纳 3个整型 .text __start: la $t0, array1 # load base address of array into register $t0                   # 让 $t0 = 数组首地址 li $t1, 5 # $t1 = 5 ("load immediate") sw $t1, ($t0) # first array element set to 5; indirect addressing                   # 对于 数组第一个元素赋值 array[0] = $1 = 5 li $t1, 13 # $t1 = 13 sw $t1, 4($t0) # second array element set to 13                    # 对于 数组第二个元素赋值 array[1] = $1 = 13                    # (该数组中每个元素地址相距长度就是自身数据类型长度,即4字节, 所以对于array+4就是array[1]) li $t1, -7 # $t1 = -7 sw $t1, 8($t0) # third array element set to -7                   # 同上, array+8 = (address[array[0])+4)+ 4 = address(array[1]) + 4 = address(array[2]) done ```