MIPS汇编语言学习笔记27:数组

本文已收录于 MIPS汇编语言学习笔记 系列,共计 27 篇,本篇是第 23 篇

本文已收录到:MIPS汇编语言学习笔记 专题

原视频课

https://www.bilibili.com/video/BV19J411y7pA?p=27

 

代码

space数据类型:#.space 12 代表给变量分配12个字节空间,即12字节。如果我们想存储三个整数,一个整数占用4字节,那么一共就需要4 x 3 = 12个字节空间。

.data
	Array:	.space	12		# 一个整数4字节,共三个整数
.text
	main:
		# save to register
		addi	$s0, $zero, 2
		addi	$s1, $zero, 4
		addi	$s2, $zero, 6

		# register to memory
		addi	$t0, $zero, 0
		sw	$s0, Array($t0)
			addi	$t0, $t0, 4
		sw	$s1, Array($t0)
			addi	$t0, $t0, 4
		sw	$s2, Array($t0)

 

讲解:

前几步都是常规操作,将立即数2 4 6分别存入CPU的s0  s1 s2寄存器中。

接下来执行sw指令,其中会被拆分为lui addu sw指令

  1. lui指令将Array的内存地址取出,放置在1号寄存器的高16位上,现在1号寄存器的值为0x10010000。
  2. 将1号寄存器与8号寄存器的值相加,存入到1 号寄存器当中。
  3. 将16号寄存器(即s0寄存器)中的值存入基地址(0x00000000)偏移0x10010000后的值为地址的内存中。

如图:

后面,我们将t0寄存器的值每次+4,就可以以4字节为刻度,循环挨个读取三个整数并存取到内存中了。

关于数组在内存中的存储可以参考这篇文章:https://gaozhiyuan.net/c/structure-name-and-first-address-of-the-structure.html

最终效果:

作者: 高志远

高志远,24岁,男生

发表评论

邮箱地址不会被公开。