查找字符串中的第 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 需要定期启动以确保程序没有卡在程序员不希望的地方。 除以零是另一个。但是处理器的反应是残酷的,对程序的逻辑流程没有任何帮助。
通常,处理您的汇编程序的唯一错误是由汇编器本身拾取的,以及您在程序中编写的代码。所以如果你想要一个超出范围索引的错误 - 那是你的工作。
这些是高级语言进化的基本原因。
好的,所以我有一个简单的程序,给定一个整数作为用户输入,假设它是 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 需要定期启动以确保程序没有卡在程序员不希望的地方。 除以零是另一个。但是处理器的反应是残酷的,对程序的逻辑流程没有任何帮助。
通常,处理您的汇编程序的唯一错误是由汇编器本身拾取的,以及您在程序中编写的代码。所以如果你想要一个超出范围索引的错误 - 那是你的工作。
这些是高级语言进化的基本原因。