Mips: сохранить переменную в другой переменной - PullRequest
3 голосов
/ 02 февраля 2012

Я пытаюсь перевести программу на C в код сборки MIPS

В моем коде C есть строка, подобная этой:

int base;
int count;

count = base;

В MIPS, как мне сохранить значениебазы внутри графа?Единственные инструкции по загрузке и хранению, которые я вижу, это lw и sw, а их прототипы поступают только из источника регистра -> адресата оперативной памяти или источника оперативной памяти -> адресата регистрации.

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ Я надеялся, что это можно сделать в одной инструкции, что-то вроде

move base acc

, но, по-видимому, это невозможно (по крайней мере, я не нашел пример инструкции, подобной этой), я выбрал это:

lw $t0, base   //load base into $t0
sw $t0, count  //store the value of $t0 in count

Если для этого есть инструкция в одну строку, было бы лучше, если бы кто-нибудь ее знал.

Ответы [ 2 ]

11 голосов
/ 02 февраля 2012

MIPS не поддерживает прямые перемещения из памяти в память.(На самом деле, ни один из них не подходит для большинства обычных процессоров - даже x86 этого не делает.) Вам нужно будет использовать lw / sw для перемещения данных.

Архитектурно, это потому, что MIPS предназначен длявыполнять только один доступ к памяти за цикл - для перемещения из памяти в память потребуется два доступа (одно чтение, одна запись) или остановка конвейера.

5 голосов
/ 02 февраля 2012

Вот как это сделать в MIPS

la $t0, base     // load the address of "base"
la $t1, count    // load the address of "count"
lw $t2, 0($t0)   // load the data at location "base"
sw $t2, 0($t1)   // store that data at location "count"

Невозможно выполнить перемещение из памяти в память в одной инструкции.

...