나는 syscall 기능이있는 SPIMS 또는 MARS와 같은 것을 사용하고 있습니다.문자열의 한 문자에 액세스
나는 문자열에 읽고있다 (나는 그것을 밖으로 인쇄 할 수 있기 때문에 그것은 작동) 다음과 같이
li $v0, 8
la $a0, string
li $a1, 256
syscall
을하지만, 내가 문자열의 단일 문자를 액세스하는 문제가 있습니다. 내가 첫 번째 문자를 액세스하고 인쇄 할 경우 그래서, 나는이 노력하고 있어요 :
la $t0, string
lb $a0, ($t0)
li $v0, 4
sys call
나는 이런 식으로 뭔가하려고하면 :
la $a0, string
li $v0, 4
syscall
이가에 문자열 점으로 전체 문자열을 출력을 전체 문자열.
la $a0, string
lb $a0, ($t0)
li $v0, 4
syscall
그것은 나에게 바운드 부족 오류를 제공합니다 : 내가 좋아하는 뭔가를하려고하면
. 나는 왜 그런지 이해하지 못한다. 하나의 문자가 바이트가 아니며 $ a0에 문자열의 첫 번째 바이트를로드한다.
, 당신
IM LI를 실행하기 전에 항상 레지스터 값을 재설정해야합니다. 상반부 단어가 무엇을 가지고 있는지 알 수 없습니다. – m0skit0
'LI'는 어셈블러가 대개'ORI $ rd, $ zero, low16bits'와'LUI $ rd, hi16bits'로 확장되는 의사 연산입니다. 대상 레지스터의 전체 32 비트는 'LI'명령 다음에 올바르게 설정되므로 'LI'전에 수동으로 레지스터를 재설정 할 필요가 없습니다. – markgz
당신이 틀림없이 맞습니다. – m0skit0