Инструкция декодирования гипотетического процессора - PullRequest
0 голосов
/ 18 октября 2019

До того, как я создал следующий вопрос, я прочитал несколько похожих вопросов по SO, но я не нашел ответа на свой вопрос.

Предположим, что у меня есть следующий поток битов 010001 01000 1010100 01100

010001 -> представляет команду add arg1, arg2, arg3

arg1: 01000 -> начинается с 0, поэтому arg1 будет представлять номер регистра 1000 с прямым порядком байтов, поэтому индекс номера регистра равен 1

arg2: 1010100 ->так что это будет аргумент памяти 1-01-0100 01 является двухбайтовым доступом,

arg3: 01100 -> третий аргумент снова начинается с 0, поэтому это аргумент регистра: 0-1100 это кодирует регистр 3.

Как видите, код операции или аргументы инструкции не выровнены по границе байта.

Например. как вы можете видеть выше - код операции занимает 6 бит, а остальные 2 бита из байта являются частью первого аргумента.

Но другой код операции может брать 3 или 5 битов и т.д. из байта, поэтому длина кода операции не является фиксированной.

Существует ли такая же ситуация, например, на x86?

Я могу справиться с этим, используя маски или биты, но мне интересно, есть ли полезная модель, которая может помочь сделать это лучше?

1 Ответ

0 голосов
/ 18 октября 2019

Нет, это не очень похоже на кодирование команд x86. В x86 используется более сложная схема кодирования, декодировать которую очень сложно, особенно если вы хотите сделать это быстро.

Это выглядит намного ближе, например, к 8-битной Motorola. процессоры (6800, 6809, 6811 и т. д.), имеющие фиксированное поле для кода операции, и каждый операнд действительно делает жизнь довольно простой. Вы в значительной степени просто генерируете битовые маски, чтобы «отделить» каждую часть инструкции, передать их логике, которая имеет дело с этой частью инструкции, и все готово.

...