在字符串中查找第N个字符并打印它MIPS32汇编程序

时间:2016-12-16 19:13:40

标签: assembly mips32

好的,所以我有一个简单的程序,其中给定一个整数作为用户的输入,假设它的X,试图在字符串中的X位置找到字符。工作正常,但是有一点bug。因为它容易看,字符串长度是26,所以如果用户输入例如0-> a必须打印,所以它确实如此。但是如果我输入一个大于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: "

1 个答案:

答案 0 :(得分:1)

处理器将读取您告诉它要读取的任何内存位置(条形码访问权限)。 40的索引已从内存中的 next 字符串中选出'e'

str1: .asciiz "give an integer: "

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

编辑 处理器中的其他内置安全措施,但它们不是"语言"导向。处理器可能有一个监视器,需要定期踢,以确保程序没有卡在程序员不想要的地方。 除以零是另一回事。但处理器的响应是残酷的,根本无法帮助程序的逻辑流程。

通常,处理程序集程序的唯一错误是由asembler本身拾取,以及您在程序中编码的内容。因此,如果您想要超出范围索引的错误 - 这是您的工作。

这些是高级语言发展的基本原因。