Оператор MUL против оператора IMUL в NASM - PullRequest
3 голосов
/ 19 октября 2010

Есть ли причина, по которой оператор MUL находится только в форме одного операнда?
Оператор IMUL может быть в трех разных формах (с одним, двумя или тремя операндами), и это гораздо удобнее. С технической точки зрения я не вижу причин, по которым оператор MUL не может быть в форме двух / трех операндов.

Ответы [ 2 ]

5 голосов
/ 04 февраля 2011

Это связано с байт-кодами, которые выводятся. В мире до 80286 было слишком много кодов операций, поэтому инженеры Intel находили способы решить эту проблему. Одним из решений было расширение части байт-кода, которая определяет операцию (в данном случае, умножение), на часть байт-кода, которая кодировала первый операнд. Очевидно, это означало, что при выполнении кода операции MUL мог поддерживаться только один операнд. Поскольку умножение требует двух операндов, они решили проблему путем жесткого кодирования в процессоре того, что первый операнд всегда будет регистром eax. Более поздние процессоры поддерживали байт-коды различной длины, которые позволяли им кодировать больше данных в одну команду. Это позволило им сделать код операции IMUL намного более полезным.

Сегодня интересная параллель с исчерпанием IP-адресов.

4 голосов
/ 19 октября 2010

Это не значит, что NASM не поддерживает его - на процессоре подписанная версия инструкции просто поддерживает больше вариантов, чем беззнаковая версия.

...