В первые дни, память и CPU циклы были скудны. Это приводит к большому количеству так называемых «оптимизаций пробок». Давайте посмотрим на код:
move.l #0, d0
moveq.l #0, d0
sub.l a0,a0
Первая команда будет нужно два байта для оп-кода, а затем четыре байта для значения (0). Это означало, что четыре байта потрачены впустую, плюс вам потребуется дважды получить доступ к памяти (один раз для кода операции и один раз для данных). Sloooow.
moveq.l был лучше, так как он объединил данные в op-код, но только разрешил записывать значения между 0 и 7 в регистр. И вы были ограничены только регистрами данных, не было быстрого способа очистить адресный регистр. Вам придется очистить регистр данных, а затем загрузить регистр данных в адресный регистр (два op-кода. Bad).
Для перехода к последней операции, которая работает в любом регистре, требуется только два байта, одно чтение. В переводе на C, вы получите
n = n - n;
, которая будет работать для наиболее часто используемых типов n
(целое число или указатель).
Потому что они не то же самое? –
Вот о чем вопрос. Человек, рассказывающий мне об этом, сказал, что «под капотом» они будут производить разные машинные коды, а другой быстрее. К сожалению, я не помню полный аргумент. – sharkin