Подобно процессору 386, процессору i486 необходим дополнительный такт для генерации исполнительных адресов, когда используется индексный регистр. Более того, если используется одна индексная компонента (т.е. одновременно не используются базовый регистр и индексный регистр), и нет необходимости в масштабировании, более быстрым является использование регистра в качестве базового, а не в качестве индексного. Например :
mov eax, [esi] ; использование esi в качестве базыmov eax, [esi*] ; использование esi в качестве индекса, 1 ; такт дополнительно
Если используются и база, и индекс, или используется масштабирование индекса, более быстрым способом адресации является использование комбинированного метода, даже если это и займет один дополнительный тактовый цикл процессора при выполнении.
Когда регистр используется в качестве базовой компоненты, тогда используется дополнительный тактовый цикл, если этот регистр являлся приемником в команде, непосредственно выполнявшейся перед данной командой (предполагается, что все операции уже находятса в предварительно созданной очереди). Поэтому для получения наибольшего быстродействия две команды должны разделяться по крайней мере еще одной командой. Например:
add esi, eax ; esi - регистр-приемникmov eax, [esi] ; esi - базовый регистр, 1 такт дополнительно
Существуют также и другие неявные или косвенные методы использования приемника и базового регистра, в первую очередь регистра указателя стека ESP. Регистр ESP является неявной базой всех команд типа PUSH/POP/RET и он же является неявным приемником в командах CALL/ENTER/LEAVE/RET/PUSH/POP. Более того, команда LEAVE, следующаа непосредственно за командой RET, будет использовать один дополнительный цикл. Но если команды LEAVE и RET реорганизованы таким образом, что одну от другой отделяет какая-то другая команда, не требуется никаких дополнительных тактов. (Смотри также другие рекомендации, касающиеся команды LEAVE).
Нет никакой необходимости разделять последовательные команды PUSH/POP. Процессор i486 допускает такую последовательность без использования дополнительного такта.
Все такие преобразования последовательности команд не влияют на выполнение программы на 386 процессоре.
Процессор i486 также требует дополнительного такта для выполнения команды, которая имеет одновременно и операнд - непосредственное значение, и операнд, заданный как смещение в памяти. Например :
mov указатель на двойное слово foo, 1234h ; одновременно и непосредственное значение, и операнд - ; смещение в памяти.mov указатель на двойное слово baz, 1234hmov [ebp-200], 1234h
Когда требуется использовать константы, более эффективно использовать непосредственные значения констант вместо предварительной загрузки констант в регистры. Но если одна и та же константа используется больше, чем один раз, то быстрее будет загрузить значение этой константы в регистр и затем много раз использовать этот регистр. Эта оптимизация не влияет на выполнение программы на 386 процессоре. Следующая последовательность действий выполняется быстрее, чем приведенная выше, если все команды находятся в предварительно созданной очереди, и, поскольку команды короче, их в действительности легче организовать в очередь :
mov eax, 1234hmov указатель на двойное слово foo, eaxmov указатель на двойное слово baz, eaxmov [ebp-200], eax