[an error occurred while processing this directive]
|
Литерал должен иметь размер равный разрядности данных, плюс код команды. Если все комады выравнять по этому размеру (12..16 бит), действительно, получится ПИК, где кодовое пространство в типичной программе расходуется крайне расточительно. Однако глупо делать все команды одной длины, имхо.
Можно сделать как в 32-разрядном ShBoom, где 6-битные коды команд собираются в обойму по 5 штук, оставшиеся 2 бита служат спец. признаками литералов, а значения литералов выравнены по 32-битной границе. Однако это сложновато, хотя и дает на типовых задачах необычайно плотный код, вдобавок, выполняющийся очень быстро, т.к. команды "засасываются" в проц пачками.
Для простого 8-разрядного стек-проца имеет смысл замесить 1-, 2- и 3-байтные команды. Подавляющее большинство команд (порядка 90% в системе команд, и даже более этого - в программах) будет 1-байтными, они дадут хорошую плотность кода, которая пикоподобным процам и не снилась. Команды с литералами будут 2- и 3-байтными, их надо немного, зато они дадут необходимую скорость исполнения. В специфических задачах с заведомо малым размером кода (порядка 1К) можно обойтись без 3-байтных команд.
> Т.е. таки две команды - в одной загрузка адреса/номера/маски бита, в
> другой - его проверка?
Зависит от требований, нюансов реализации и вкуса разработчика. Можно сделать и одну команду.
E-mail: info@telesys.ru