查找字符串中的第 N 个字符并打印它 MIPS32 汇编器

Finding the Nth character in a string and printing it MIPS32 assembler

好的,所以我有一个简单的程序,给定一个整数作为用户输入,假设它是 X,试图在 string.Works 中找到 X 位置的字符,但是有一点 bug.As 很容易看出来,字符串长度是 26 所以如果用户输入例如 0->a 必须被打印,所以它 does.But 如果我输入一个大于 25 的数字(因为第一个字符在位置 0 ) 没有错误出现....例如,如果我输入 40,我得到的结果是字符 e...有人可以帮助我吗? As.Here 是我的代码:

.text           
.globl main
main:
    li $s3,26 #string length


    la $a0, str1    # Load and print string asking for integer
    li $v0, 4
    syscall  

    li $v0,5 
    syscall
    add $s0 ,$v0, $zero #integer now in $s0



    la $a1,str #address of string now is $a1
    addu $a1,$a1,$s0   # $a1 = &str[x].  assumes x is in $s0
    lbu $a0,($a1)      # read the character
    li $v0,11
    syscall            # and print it







     li $v0,10
    syscall     



.data
str: .asciiz "abcdefghijklmnopqrstuvwzyz"
str1: .asciiz "give an integer: "

处理器将读取您告诉它读取的任何内存位置(禁止访问权限)。 40 的索引已从内存中

处的 下一个 字符串中挑选出一个 'e'
str1: .asciiz "give an integer: "

最好检查输入数字的范围。汇编语言具有高级语言所具有的 none 内置安全措施 - 仅内存访问限制,在硬件中实现。

编辑:处理器中有 其他内置安全措施,但它们不是 "language" 导向的。处理器可能有一个 watchdog 需要定期启动以确保程序没有卡在程序员不希望的地方。 除以零是另一个。但是处理器的反应是残酷的,对程序的逻辑流程没有任何帮助。

通常,处理您的汇编程序的唯一错误是由汇编器本身拾取的,以及您在程序中编写的代码。所以如果你想要一个超出范围索引的错误 - 那是你的工作。

这些是高级语言进化的基本原因。