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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM