【问题标题】:Copy array elements to another array in MIPS assembly将数组元素复制到 MIPS 程序集中的另一个数组
【发布时间】:2015-05-30 18:04:42
【问题描述】:

我必须制作一个程序,用从键盘输入的 30 个整数填充一个数组。然后用户键入“c”将数组复制到另一个数组。我已经完成了第一步,但我无法复制数组到另一个。

这是我的代码

    .data
msg1: .asciiz "> "
msg2: .asciiz "type 'c' to copy \n>"

.align 2
array: .space 400
.text

main:

    la $t3 array
    loop:


        la $a0, msg1 #output message 1
        li $v0, 4
        syscall
        li $v0, 5 #read integer input
        syscall
        move $t0, $v0
        beq  $t0, -99, endloop #loop until user types -99
        beq  $t1,30,endloop #get user input up to 30 times 

        addi $t1, $t1, 1 #counter
        sw $t0,($t3)
        addi $t3,$t3,4

        b loop #loop until it reaches 30 

    endloop:

    la $a0, msg2 #output message 2
    li $v0, 4
    syscall

    li $v0, 12 #read character input
    syscall


    beq $v0, 'c', COPY

    j NEXT

    COPY:


    NEXT:

【问题讨论】:

    标签: arrays assembly mips qtspim


    【解决方案1】:

    最原始的方法是

    la $t1, dst_array
    la $t3, src_array
    addu $t0, $t3, 30*4     # setup a 'ceiling'
    
    
    copy_loop:
        lw $at, 0($t3)
        sw $at, 0($t1)
    
        addu $t1, $t1, 4
        addu $t3, $t3, 4
    
        blt $t1, $t0, copy_loop # if load pointer < src_array + 30*4
    

    但是,MIPS 的某些实现不使用转发,因此您必须等到$at 被写回。为此,可能会有一个摊位(你可以摆脱它)

    subu $t1, $t1, 4
    copy_loop:
        lw $at, 0($t3)
        addu $t1, $t1, 4
        addu $t3, $t3, 4
        sw $at, 0($t1)
    

    或者加载延迟槽,一般需要1个周期,使得它

    copy_loop:
        lw $at, 0($t3)
        addu $t1, $t1, 4
    
        sw $at, 0($t1)
        addu $t3, $t3, 4
    

    一般来说,这取决于:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 2018-02-17
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多