Биты, необходимые для адресации регистров - PullRequest
0 голосов
/ 07 октября 2018

Скажем, у меня 12 регистров.Сколько бит должно быть зарезервировано в порядке команд машинного кода для адресации любого из этих 12 регистров?

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Требуется ceil(log2(12)) бит для кодирования 1 из 12 возможностей в обычном поле фиксированной ширины.

Но, имея менее чем 2 степени регистров, мы можем сохранить любые биты в инструкции с несколькими регистрамиоперанды?Да, в этом случае.

3-регистровая инструкция имеет 12^3 = 1728 возможных перестановок регистров.Но использование 3 отдельных 4-битных полей даст нам 2^(4*3) = 4096 возможных кодировок.Так что есть 1 избыточный бит, потому что 2^11 = 2048, который все еще больше, чем 1728. Однако для кодирования всех 3 селекторов регистров в одно 11-битное поле потребуется гораздо более сложное декодирование.

Требуется инструкция с 2 регистрами 12^2 = 144 уникальные регистровые кодировки.Но здесь 2^(4*2) = 256, а следующая наименьшая степень 2 (128) недостаточно велика.

Вероятно, вам лучше всего использовать 4-битные поля и использовать кодовые регистры 13..15.для чего-то другого.например, escape-код, который означает, что это на самом деле другая инструкция.Или, если вам не нужно так много места для кодирования команд, упростите декодеры и оставьте свой формат инструкций избыточным.

Или действительно лучше всего иметь число регистров степени 2, поэтомуНе тратьте пространство кодирования.Есть причина, по которой практически каждый современный регистратор имеет число регистров степени 2.

0 голосов
/ 07 октября 2018

Регистры не хранят "4-значное основание 16 цифр" , вот как вы можете интерпретировать содержимое такого регистра (кажется, вы имеете в виду 16-битный регистр, который при интерпретации как шестнадцатеричное целое число)может хранить значения 0000..FFFF).

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

В любом случае, «адресация»Регистрация не имеет никакого отношения к возможностям регистрации контента!Вопрос состоит в том, чтобы адресовать 12 регистров, поэтому для простоты вы можете начать с присвоения им имен / адресов, таких как 0,1,2, .., 11 - сколько бит должно быть зарезервировано для их кодирования?

Сколькоинформация может хранить 1 бит?0 или 1 = 2 варианта.

Два бита могут хранить эти битовые комбинации 00, 01, 10, 11 = 4 варианта.

Три бита могут хранить 000, 001, 010, 100, 011101, 110, 111 = 8 вариантов.(обратите внимание, что вы бы интерпретировали эти биты как целочисленное значение, закодированное в двоичном виде, я написал 0, 1, 2, 4, 3, 5, 6, 7 ... в этом (не) порядке ... но при проектировании процессоравам вряд ли придется интерпретировать биты выбора регистра как целое число, это больше похоже на «сопоставление с образцом», если регистр «example1» имеет шаблон 101 внутри ЦП, тогда ассемблер должен преобразовать исходный код в машинный код)

etc ...

Очень часто содержимое регистра показывается в виде шестнадцатеричных значений, потому что тогда 1 цифра состоит из 4 битов, поэтому программист, отлаживающий код, может легко «увидеть» отдельные биты, если ему нужноэто, но «шестнадцатеричное число» является только интерпретацией битовой комбинации, хранящейся в регистре, она не является частью закодированной информации.Кодируются только значения битов.

...