zoukankan      html  css  js  c++  java
  • 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
         
  • 相关阅读:
    WPF 对显示列顺序的缓存处理
    WPF DataGrid Header语言切换处理
    ini操作类
    C# 校验 正则
    TreeView 数据绑定及选中命令处理
    Sql server Compact 小型数据库损坏修复
    单例模式 与lock用法
    C#串口控制
    mysql group by 组内排序
    mysql general log开启
  • 原文地址:https://www.cnblogs.com/yanying7/p/13912304.html
Copyright © 2011-2022 走看看