У меня проблема, как я могу отслеживать всех студентов? может быть, с указателем кадра?
Вам не нужен указатель кадра, чтобы отслеживать всех студентов. Кроме того, проблема отслеживания их не уникальна для их структуры - у вас будет та же проблема отслеживания многих целых чисел. И, кроме того, проблема отслеживания многих элементов также не уникальна для сборки.
Вам нужна либо отдельная переменная для каждого элемента (часто непрактичная, особенно если количество элементов является переменным), или, структура данных: коллекция некоторого вида, например, массив или связанный список, например.
С отдельными локальными переменными в C каждая нуждается в различном имени, и в сборке у каждого будет свое смещение / местоположение в кадре стека. Пространство стека для всех будет выделено в одной инструкции, и на них все будут ссылаться через их индивидуальное смещение от указателя стека.
При желании можно использовать указатель кадра, но с MIPS пространство стека для Кадр стека функции все выделяется в одной инструкции в прологе функции , указатель стека иначе не перемещается в теле функции - и это означает, что отдельные переменные остаются с постоянными смещениями от указателя стека.
Указатель кадра может быть полезен, если:
- машина плохо выполняет относительные смещения стека, но легко смещает относительные смещения указателя кадра, или,
- машина требует частых нажатий и выталкиваний, которые перемещают указатель стека, что изменяет смещения, необходимые для доступа к тем же местоположениям в кадре стека - указатель кадра остается постоянным независимо от нажатия и выталкивания. (Нажатие и извлечение могут использоваться для передачи аргументов и / или временного хранения, если недостаточно регистров ЦП, например, во время вычисления выражения.)
- Функция динамически распределяет пространство стека, например, с помощью C 's
alloca
.
Вообще говоря, первые два не относятся к MIPS, поэтому функциям обычно не требуется указатель кадра.
Кроме того, вы можете использовать структуру данных, например, массив, чтобы отслеживать множество элементов. На сам массив должна ссылаться переменная (в C, имя и в сборке смещение) - но, по крайней мере, есть только одна переменная, независимо от того, сколько элементов нужно отслеживать. И тогда вы переходите к индексации для доступа к отдельным элементам. (Индексирование включает в себя вычисление адреса элементов и зависит от размера элементов, но в остальном работает одинаково для массива int и массива struct.)