在mips32上加载字节

时间:2012-12-20 23:25:27

标签: mips32

我从mips32开始,当我试图从字符串中取出一个字母来打印它时,我会陷入困境。代码应该获取字符串,逐个字符地打印它,以及何时找到i打印iiing

.data
msg: .asciiz "testing"
i: .asciiz "iiing"

.text

.globl main

main:           
    la $t0, msg
    la $t1, i
    li $t2, 0
loop:
     bneq $t0, 105, end #$t0=i?
     lb $a0, ($t0)
     li $v0, 4
     syscall
     addi $t0, $t0, 1
     b loop

end:
     move $a0, $t1
     li $v0, 4
     syscall

问题出在哪里?

1 个答案:

答案 0 :(得分:0)

你有一些问题。

  1. 您正在比较$t0,即当前字符的地址,而不是字符本身。将该测试移至lb行下方并针对$a0进行测试。

  2. ASCII中的
  3. 105E,而不是i。试试151(或更正常,0x69)。

  4. 您希望与beq进行比较,而不是bneq

  5. 在循环内部,你应该使用syscall 11,它打印一个字符,而不是你正在使用的当前系统调用4,它打印一个字符串。

  6. 您的程序最后没有退出系统调用(10)。

  7. 您可以查看this link以获取系统调用列表。

    这是一个完整的工作计划供参考:

        .data
    
    msg: .asciiz "testing"
    i:   .asciiz "iiing"
    
        .text
        .globl main
    
    main:           
        la $t0, msg
        la $t1, i
        li $t2, 0
    
    loop:
        lb $a0, ($t0)
        beq $a0, 0x69, end
        li $v0, 11
        syscall
        addi $t0, $t0, 1
        b loop
    
    end:
        move $a0, $t1
        li $v0, 4
        syscall
        li $v0, 10
        syscall