2015-06-16 2 views
0

Hi,Почему адрес загрузки отличается от слов и меток строками?

У меня был быстрый вопрос. Предположим, у меня есть 2 метки string и word со строкой, являющейся меткой, связанной с строкой, и слово является фактическим словом с 32-битным целым числом, хранящимся в нем. Теперь предположим, что я использую syscall для печати строки с использованием строки меток, и я использую адрес загрузки с регистром a0, он будет печатать строку. Однако почему он не печатает адрес, так как это адрес загрузки. С другой стороны, если я делаю то же самое, но вместо того, чтобы использовать строчную метку, я использую слово label, вместо этого я собираюсь напечатать фактический адрес. Мне было интересно, почему это работает так.

Спасибо за ваше время

Варуна Г.

ответ

1

Я думаю, что вы искажая системные вызовы. Вы выдаете определенный syscall, чтобы делать разные вещи.

Чтобы напечатать строку, вы выдаете syscall 4 ($v0 = 4). Эта служба печатает строку, указанную по адресу, указанному в $a0, которую вы должны предварительно загрузить.

Чтобы напечатать целое число, вы выдаете syscall 1 ($v0 = 1). Эта служба печатает целое число, хранящееся в $a0. Это целое число можно рассматривать как адрес, если вы загрузили его с псевдонимом la.

Так что, если у вас есть следующий фрагмент кода:

.data 
str: .asciiz "hello!" 

.text 
    la $a0, str 
    li $v0, 1 
    syscall # This will print the starting address of the string 
    li $v0, 4 
    syscall # This will print the contents of the string pointed by label str 

будет печатать адрес начала строки, а также его содержание.

+0

Хорошо, я понял. Это вопрос понимания системных вызовов. Поэтому, если мы используем syscall 4, мы собираемся распечатать то, что хранится внутри адреса, на который указывает a0, и если мы используем 1, мы собираемся распечатать то, что хранится внутри a0. –

+0

Это правильно. – gusbro

Смежные вопросы