MIPS-用数组存储数据和读取数据

过程大致如下:

在.data段开辟一段空间,然后在.text读取数组的首地址,通过偏移量得到每个单元的地址,用lw和sw加载和存储数据。

具体可以看下面一个例子:

 

Int main ()
{
Int K,Y;
Int Z[50];
Y=56;
For(k=0;k<50;K++) Z[k]=Y-16*(k/4+210);
}

用MIPS实现如下:

.data
    Z:
     .space 200            #开辟一个200字节大小的空间
    space:
      .ascii " "           #空格 输出时将每个数分开
.text init: la $s0,Z #$s0存储Z数组的首地址 move $t0 $
0 #$t0表示K addi $s1 $0 56 #$s1表示Y move $t3 $0 #用于循环打印 loop: slti $t1 $t0 50 #判断K是否小于50 beq $t1 0 print #K>=50 进入打印部分 div $t1 $t0 4 #$t1作临时寄存器储存计算结果 t1=k/4 addi $t1 $t1 210 #t1=t1+210 mul $t1 $t1 16 #t1=t1*16 sub $t1 $s1 $t1 #t1=Y-t1 sll $t2 $t0 2 #求偏移量 add $t2 $t2 $s0 #$t2存储偏移后的地址 sw $t1 0($t2) #将数存储到数组单元中 addi $t0 $t0 1 #K=K+1 j loop #进入下一次循环 print: slti $t1 $t3 50 #判断打印次数是否小于50 beq $t1 0 exit #打印次数>=50 退出 sll $t2 $t3 2 #求偏移量 add $t2 $t2 $s0 #$t2存储偏移后的地址 lw $a0 0($t2) #读取数组单元并放到$a0 li $v0 1 #打印结果 syscall la $a0 space #打印空格 li $v0 4 syscall addi $t3 $t3 1 #打印次数加1 j print #进入下一次循环
exit: li $v0
10 #退出程序 syscall

 

posted @ 2020-11-01 23:14  yanying  阅读(5150)  评论(0编辑  收藏  举报