Сборка кода операции вопрос - PullRequest
       2

Сборка кода операции вопрос

0 голосов
/ 09 сентября 2011

Если я создаю набор инструкций для 8-битного компьютера, могу ли я иметь некоторые инструкции с 2-битными операционными кодами и некоторые инструкции с 3-битными операционными кодами? Конечно, значения каждого из операционных кодов будут разными.

У меня есть инструкции 3-го типа с кодом операции 00 У меня есть 3 инструкции типа I, с кодами операций 01,11 и 10 Могу ли я сделать инструкцию с кодом операции 100?

Ответы [ 4 ]

5 голосов
/ 09 сентября 2011

Если вы хотите, чтобы ваши коды операций имели различную длину, вам нужно убедиться, что ни один более короткий код операции не является подстрокой более длинного кода операции.То есть, если у вас есть двухбитный код операции 01 и трехразрядный код операции 010, как ваш декодер сможет определить разницу?

Я предполагаю, что вы пытаетесьпоместить код операции и операнды в одно 8-битное количество и рассматривать его как запись.Так, например, у вас может быть инструкция 01000111, где первые два бита являются кодом операции, следующие три бита являются первым операндом, а последние три бита являются вторым операндом.

Если у вас естьдва кода операции, 01 и 010, как ваш декодер выбирает между этими двумя интерпретациями?

 01 000 111 - opcode 01, two three-bit arguments
 010 00 111 - opcode 010, a two-bit argument, and a three-bit argument

Если вам действительно нужны коды операции различной длины, вам необходимо зарезервировать префиксные строки для более длинных кодов операций.Таким образом, у вас могут быть двухбитные инструкции 00, 01 и 10, а все более длинные инструкции начинаются с 11.

1 голос
/ 27 апреля 2016

Альтернативный компромисс - иметь бит режима в регистре состояния. У вас есть только 4 инструкции за раз, но вы можете записать в это место в памяти, скажем, инструкцию в стиле MOV (например, семейство 8086). См. 65C816 для (ab?) Использования многих, многих режимов.

1 голос
/ 09 сентября 2011

Посмотрите на набор команд большого пальца от arm, они показывают красивую карту кодов операций, которая каким-то образом связана с тем, что вы говорите.Или поищите lsasim в github, где я изобрел свой собственный набор инструкций. Для некоторых инструкций требуется всего четыре бита кода операции, чтобы выяснить, для чего нужна эта инструкция. 8.

Я предполагаю, что вы спрашиваете о 8-битных инструкциях?Как сказал Том, вы контролируете горизонталь, вы контролируете вертикаль и можете делать все, что захотите.Вы не получите много пользы от двухбитных опцидов, возможно, у вас есть только два регистра, которые поддерживают эти коды операций, например:

00riiiii  store pc relative, r = 0 means register r0, r = 1 means register r1 iiiii is sign extended and added to the program counter for the store address

01riiiii  load pc relative

на данный момент, хотя вы полностью использовали ПОЛОВИНУ своего пространства кода операции, если вы ограничиваетесамостоятельно к фиксированному 8-битному набору команд.Вы не указали, что вы делали.продолжая мои мысли, теперь все коды операций 0xxxxxxx потребляются, остальные нужно начинать с 1

1000ssddd  move rd to rs (assumes rs = r0 to r3 and rd = r0 to r7
1001ssddd  move rs to rd
1010ssddd  add rs=rs+rd
1011ssddd  sub rs=rs-rd

и т. д.

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

100ss0dd some operation
100ss1dd another operation

, но это не будет:

100ss0dd some operation
100ss1dd another operation
10iiiiii branch to pc plus sign extended immediate

, потому что вы не можете однозначно декодировать третью инструкцию из другойдва, когда вы видите 10xxxxxx это ветка?хорошо, если бит 2 равен 0, а бит 2 равен 1.

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

0 голосов
/ 09 сентября 2011

Конечно. Одной из ваших 2-битных инструкций будет код перехода в 3-й бит. Плохая новость заключается в том, что это не поможет расширить диапазон кода операции в этом масштабе. Более эффективен для порядка 4-битных серий опкодов, которые могут выходить до 8-битных или даже несколько ...

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