Доступ к одному символу в строке - PullRequest
6 голосов
/ 29 сентября 2011

Я использую что-то вроде 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?

Спасибо

1 Ответ

12 голосов
/ 29 сентября 2011

Посмотрев документацию для функций системного вызова MARS, вы можете увидеть, что используемая вами служба 4 ожидает, что $a0 будет "[] адресом строки с нулевым символом в конце для печати", который объясняет поведение, которое вы видите.

Вам нужна функция 11 «печать символа», которая печатает младший байт как символ.Другими словами, должно работать (не проверено) следующее:

la $t0, string
lb $a0, ($t0)
li $v0, 11
syscall
...