MIPS - Создать двоичное слово заказа - PullRequest
0 голосов
/ 27 марта 2011

У меня есть следующий код на языке MIPS:

lw $s5, -20($s6)

sub $t1, $s5, $t2

addi $t1, $t2, 50

Мне нужно преобразовать каждый заказ в его код:

a.в десятичной б.в шестнадцатеричном виде c.в двоичном формате 32 бита

для первого порядка (lw $ s5, -20 ($ s6)) я сделал:

a.35 |22 |21 |-20

б.23 |16 |15 |C

3 вопроса:

1) я прав?2) каким будет код для двоичного бита 32?3) Каковы другие коды еще 2 заказов?

Спасибо!

1 Ответ

0 голосов
/ 27 марта 2011

В зависимости от операндов и типа инструкции существует несколько схем кодирования, но все они состоят из 32 битов, а первые шесть указывают код операции инструкции (add, lw и т. Д.).

  • Кодировка регистра : эта инструкция действует только для регистров. Первые шесть битов равны 0, затем есть три поля по пять битов, которые определяют соответственно первый и второй регистр источника и регистр назначения. Наконец, есть еще шесть битов, которые определяют функцию (сложение, подпрограмма и т. Д.)

  • Немедленное кодирование : у этой инструкции есть операнд, который является ячейкой памяти. После шести битов кода операции есть два поля по пять битов для первого и второго регистра и поле из шестнадцати битов для ячейки памяти.

  • Кодирование перехода : они состоят из шести битов кода операции и двадцати шести битов назначения перехода

Эта статья объясняет кодировку этих инструкций и содержит список всех кодов операций / функций в двоичном формате. После того как вы определили двоичную форму, просто преобразуйте ее в десятичную и шестнадцатеричную.

Пример: Предположим, нам нужна кодировка lw $s5, -20($s6). Это относится к категории немедленное кодирование , кодировка которой ooooooss sssttttt iiiiiiii iiiiiiii, где o - это код операции, s первый регистр, t второй регистр и i константа. Глядя на таблицу, мы находим код операции для lw, равный 100011. Достаточно указать номер регистра, поэтому s равно 00101, а t равно 00110. Константа (-20) представлена ​​дополнением 2s. При 20, равном 10100, его 2-секундное дополнение к 16-битному равно 1111111111101100. lw имеет синтаксис loadstore , шаблон которого o $t, i ($s), поэтому регистры меняются местами в кодировке. Поэтому кодировка инструкции для lw $s5, -20($s6) равна

ooooooss sssttttt iiiiiiii iiiiiiii
10001100 11000101 11111111 11101100

или 8C C5 FF EC (гекс) и 140 197 255 236 (декабрь)

...