Синтаксис слова загрузки MIPS

Если я хочу загрузить значение из памяти, которая базовый адрес на уровне $a0 и от $t2 набора, почему не может я делать следующее:

lw  $s2, $a1($t2)

таким образом, каков эквивалент выражения выше?

12
задан Bill the Lizard 19 September 2012 в 12:29
поделиться

1 ответ

Ответ Грега верен. Вот объяснение на примере:

У вас есть базовый класс Base. Имеется два производных класса ХА и ХБ. Каждый случай DerivedA - также случай Основы. Аналогично, каждый БВ также является Основанием. Но ХА не ХВ и наоборот. Таким образом, если бы вы нарисовали диаграмму Венна вселенной всех возможных объектов, вы бы получили:

    ________________________
   /                        \
  /          Base            \
 /    ______        ______    \
|    /      \      /      \    |
|   /        \    /        \   |
|  | DerivedA |  | DerivedB |  |
|   \        /    \        /   |
|    \______/      \______/    |
 \                            /
  \                          /
   \________________________/

Другими словами, каждый объект в наборе объектов типа A также в наборе объектов типа Base. Аналогично для БР. Таким образом, Base действительно является супернабор как ХА, так и ХБ. Следовательно, это «суперкласс».

-121--2144604-

Вот демонстрация с (упрощенным) примером, чтобы помочь расширить то, что сказал Марк:

void Main()
{   
    for (int x = 0; x < 10; x++)
    {
        ThreadPool.QueueUserWorkItem(z=> myClass.DoSomething());
    }

}
public class myClass
{
    public static void DoSomething()
    {
        int i = 0;
        Console.WriteLine (i += 3);
    }
}

The Output: 3 3 3 3 3 3 3 3 3 3 3

-121--3238834-

Вы не можете сделать это, потому что нет кодировки команд MIPS, которая поддерживает такую вещь. Вы должны сделать сложение самостоятельно:

add $a2, $a1, $t2
lw  $s2, 0($a2) 

Кодировка команды lw выглядит следующим образом:

1000 11ss ssst tttt iiii iiii iiii iiii

Где sssss - номер исходного регистра, ttttt - номер целевого регистра, а iiiiiiiiiiii - немедленный. В этом кодировании нет места (и нет альтернативных кодировок команд), которые используют два регистра для генерации адреса памяти. Конкретная машинная команда, которая будет закодирована из приведенного выше примера:

1000 1100 1101 0010 0000 0000 0000 0000

Поскольку непосредственный - 0 , $ s2 является регистром 18 и $ a2 является регистром 6 .

14
ответ дан 2 December 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: