좋아, 그래서 사용자가 입력으로 정수 주어진 주어진 간단한 프로그램을 가지고 X, string.Works 괜찮 X 위치에서 문자를 찾으려고합니다 ,하지만 약간의 버그가 있습니다. 쉽게 볼 수있는 문자열 길이는 26이므로 사용자가 예를 들어 0을 입력하면 -> a는 인쇄되어야합니다. 그렇지만 나는 25보다 큰 수를 입력하면 (1 차 문자 위치 0에 있습니다.) 오류가 나타나지 않습니다. 예를 들어 40을 입력하면 결과 문자 E ... 누군가가 나를 도울 수 있습니까?문자열에서 N 번째 문자 찾기 및 MIPS32 어셈블러 인쇄
.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'의 인덱스는'str1 : .asciiz '의 메모리에있는 * next * 문자열에서''e' '를 선택했습니다. 정수를 지정하십시오 : " –