Посмотрите на набор команд большого пальца от 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 очень хорошо прорисованы в этом отношении, начиная с верха, вы получите инструкции с меньшим количеством битов кода операции и болеебиты операндов, вы должны сначала выбрать их, но понимаете, что они занимают большую часть вашего пространства кода операции.тогда у вас более длинные коды операций с меньшим количеством операндов.