Выделение памяти для структуры в MIPS Specifi c Пример - PullRequest
0 голосов
/ 12 марта 2020

Я хотел бы выделить память для структуры в MIPS, которая может содержать 3 целых числа (4 * 3 = 12 байт). Как бы я это сделал?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Если вы используете MARS IDE для написания кода MIPS, вы можете использовать syscall 9 для запроса байтов (аналогично mallo c в C). Это распределение происходит из пространства кучи процесса. Ссылки на системные вызовы MIPS в MARS: здесь .

Вот как вы можете использовать это -

li  $a0, 12         # number of bytes to request (12 bytes here)
li  $v0, 9          # syscall for performing the request
syscall             # issue syscall

# now $v0 contains the *address* of the 12-byte block allocated.
# You would want to remember $v0 somewhere.
sw  $t0, ($v0)      # E.g usage - store $t0 as 0th int (4 bytes) in the struct
sw  $t1, 4($v0)     # E.g usage - store $t1 as 1st int (4 bytes) in the struct
sw  $t2, 8($v0)     # E.g usage - store $t1 as 2nd int (4 bytes) in the struct
0 голосов
/ 12 марта 2020

Массив для любых практических целей должен быть создан в памяти. Это потому, что только память может быть проиндексирована, поэтому ожидаемые операции с массивом (например, индексация) могут выполняться только тогда, когда он находится в памяти.

Однако структура может быть создана:

Как локальная переменная:

  • в регистрах - просто используйте столько регистров, сколько необходимо для битов в состоянии, например, здесь 3 регистра. Чтобы получить доступ к полям, используйте регистры, содержащие поле, и извлеките требуемые данные.

  • в стеке - выделите как int, но с другим размером, используйте 12 байтов стекового пространства : увеличить выделение стекового пространства на 12 байт. Чтобы получить доступ к полям, используйте смещение, которое относится к слову (ам), содержащему поле.

в качестве нелокальной переменной:

  • как глобальный - объявлять достаточно памяти для хранения структуры, точно так же как int, но с другим размером (и, возможно, другим выравниванием).

  • в куче - allocate (malloc / callo c ) немного памяти в необходимом размере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...