首页 > 解决方案 > 在 MIPS 中访问 .space 元素(降序)

问题描述

我想从.space数组中逐字节获取,从最高索引开始。我有两个.space数组,一个供用户输入文本,第二个用于存储输入字符串中的小写字母。当我尝试在部分更改中存储字节时出现问题 - sb $t4,($t3)似乎没有存储正确的字符,或者更糟糕的是$t4似乎不再指向 tmp 的最后一个字符。有没有更好的方法从最后访问字符串中的字符?

我的代码旨在反转输入字符串中小写字母的顺序,

这里是:

arr:    .space 100
tmp:    .space 100
che:    .asciiz "check\n"
text1:  .asciiz "input string: \n"
text2:  .asciiz "Output:\n"
    .text
    .globl main
main:
    li  $v0,4
    la  $a0, text1
    syscall

    la  $a0, arr
    li  $a1, 100
    li  $v0, 8
    syscall

    li  $t0, 'a'
    li  $t1, 'z'
    la  $t3,arr
    la  $t4,tmp
read_begin:
    lb  $t5,($t3)
    lb  $t6,($t4)
    beq     $t5,$zero,ch
    blt     $t5,$t0,increment
    bgt $t5,$t1,increment

    sb  $t5,($t4)
    addi    $t4,$t4,1
    b   increment

increment:
    addi    $t3,$t3,1
    b   read_begin
ch:
    la  $t3,arr
    b   change
change:

    lb  $t5,($t3)
    beq     $t5,$zero,end
    blt     $t5,$t0,increment2
    bgt $t5,$t1,increment2
    sb  $t4,($t3)
    addi    $t4,$t4,-1

increment2:
    addi    $t3,$t3,1
    b   change

end:

    li  $v0,4
    la  $a0, text2
    syscall
    la  $a0, arr                    
    li  $v0, 4                      
    syscall                         
    li  $v0, 10                     
    syscall 

标签: assemblymipsmars-simulator

解决方案


推荐阅读