8.2 Разрядность стековых машин
==165
Первое, что следует выбрать при разработке конкретного устройства, - это размер элементов данных: 16 или 32 бита. Решение принимается с учётом цены, размеров и производительности.
==166
8.2.1 Часто лучше иметь 16 разрядов
16-разрядные процессоры имеют меньшую стоимость, чем 32-разрядные. Их узкие внутренние каналы передачи данных требуют меньше транзисторов и дешевле в производстве. Подключение внешней памяти требует только 16 линий и число выводов шины данных в два раза меньше, чем у 32-разрядных машин. Общая стоимость минимальной системы ниже, так как для банков памяти требуется в два раза меньше микросхем.
В 16-разрядных процессорах есть достаточно свободного места для дополнительных опций: аппаратных умножителей, внутренней памяти программ или внешних интерфейсов. Развитие полузаказных 16-разрядных моделей для встраиваемых применений, подобных RTX 2000, идёт в направлении законченных систем на кристалле, включающих аппаратуру ввода-вывода и программную память.
В любом проекте следует пытаться использовать 16-разрядые процессоры и отказываться от них в пользу 32-разрядных только в случае очевидных преимуществ последних.
8.2.2 Но иногда нужны и 32 разряда
Большая часть задач управления реального времени хорошо ложится на 16-разрядные машины. В небольших системах они обеспечивают высокую скорость исполнения при минимальной стоимости. Отчасти эта ситуация возникает из-за того, что 32-разрядные процессоры появились не так давно и не получили ещё столь широкого распространения. Новые сферы применения 32-разрядных систем будут возникать по мере интенсификации их использования.
32-разрядные стековые машины следует использовать вместо 16-разрядных, только если задача требует высокой производительности при 32-битной целочисленной арифметике, вычислениях с плавающей запятой или при доступе к большим объёмам памяти.
Очевидно, что 32-битные вычисления лучше выполняются на 32-разрядных процессорах. Ситуации, когда в них возникает нужда, включают работу с графикой и большими структурами данных, где 32 аппаратных разряда будут много эффективней, чем их эмуляция на 16-разрядной машине.
При обращении к памяти за границей в 64K элементов 16-разрядные системы могут использовать сегментные регистры, но такая техника громоздка и при частом использовании очень замедляет работу. Программы, которым для доступа к структурам требуется постоянное изменение сегментного регистра ( особенно в том случае, когда одна структура имеет размер более 64K ) могут тратить на адресную арифметику заметное время. Более того, так как числа, с которыми приходится работать, не помещаются в 16 бит, приходится использовать арифметику двойной точности, дополнительно тормозящую вычисления. 32-разрядные машины могут предложить линейное 32-разрядное адресное пространство, дополненное быстрой адресной арифметикой и 32-разрядными каналами передачи данных.
==167
Для эффективных вычислений с плавающей запятой тоже нужен 32-разрядный процессор. При работе с плавающими числами 16-разрядные машины тратят много времени на работу с элементами в стеке, а 32-разрядные процессоры могут работать с данными непосредственно. Во многих ситуациях целочисленная арифметика удобнее и быстрее вычислений с плавающей запятой, и в таких случаях 16 разрядов может быть достаточно. Но арифметика с плавающей запятой часто используется поддержки программ, написанных на языках высокого уровня. Кроме того, новые аппаратные ускорители вычислений с плавающей запятой сокращают преимущество по скорости целочисленных вычислений.
Минусом 32-разрядных машин является высокая стоимость и сложность конечной системы. На цену влияет большее число транзисторов и выводов корпуса. Им нужна 32-битная программная память и, в общем случае, большие размеры печатной платы, чем 16-разрядным моделям. Внутри кристалла есть меньше места для дополнительных опций, типа аппаратных умножителей, но этот недостаток будет исправлен по мере появления технологий более плотной упаковки кристаллов.
==167