MIPS SW и LW вопрос - PullRequest
       12

MIPS SW и LW вопрос

1 голос
/ 10 июля 2011

Я видел в примерах использования sw и lw в MIPS, инструкция выглядит так:

lw $6, 0($4)

Мой первый вопрос: что делает 0 ()?Что делать, если это было 6,4 доллара (4 доллара)?

Я пытаюсь выполнить тестирование в программе MARS mips, но всякий раз, когда я выполняю программу, lw и sw, похоже, не обновляют регистры с какими-либо значениями.например, если у меня есть этот код

ori $t1, $t1, 8
lw $t2, 0($t1)

, я бы ожидал, что $ t2 будет обновлено до некоторого значения, но это не так.Мой второй вопрос: может ли кто-нибудь объяснить, почему $ t2 по-прежнему содержит 0x00000000, а не значение после выполнения инструкции lw.

Ответы [ 2 ]

2 голосов
/ 13 июля 2011

Инструкция lw {regDest}, {imm} ({reg}) загрузит в {regDest} содержимое слова, хранящегося по эффективному адресу, указанному {reg} + imm, где inm - 16-битное значение. Эффективный адрес должен быть кратным 4.

Например, код

  ori $t1,$0, 0x2000
  lw $t2, 4($t1)

.data 0x2000
.word 0x1234
.word 0x4321

загрузит в $ t2 содержимое адреса 0x2004 (то есть адрес, указанный в $ t1, который был 0x2000 плюс непосредственные 4, давая эффективный адрес 0x2004).

Вы все равно можете получить $ t2 = 0, если содержимое этого адреса равно нулю.

0 голосов
/ 10 июля 2011

0 () означает, что вы получите его из первого блока в реестре.Вы можете сделать это 1, 2 или даже 4.

Если вы установите n (), он получит значение из указанного вами n-го блока

...