Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > максимально быстро сложить с 4


Автор: Гость_Гость 29.10.2005, 17:53
Есть команда add ESI, 4.
Вяполняется на удивление медленно. Есть ли другой способ максмимально быстро сложить регистр с четверкой (именно с четверкой).
Это нужно для того, чтобы сместить указатель целочисленного массива.

Вообще где почитать о хитростях подобного рода, например можно ли ускорить команды типа
inc EDI и т.п.

Автор: Гость_Гость 29.10.2005, 22:15
Попробовал по-разному: использовать регистр EDI, складывать в другом регистре, потом пересылать и др.
Результат: если не складывать (увеличивать адрес, по которому потом идет извлечение)
то быстро, как только адрес меняется, то медленно.
Т.е. похоже дело не в быстроте операции, а в КЭШе процессора!
Как только данные меняются (увеличивается адрес, неважно каким способом), работа замедляется.
Есть ли литература, как подстраиваться под КЭШ процессора?

Автор: oleg1973 29.10.2005, 23:33
Цитата
ADD -- Integer Addition


ADD -- Integer Addition

Opcode    Instruction        Clocks    Description

04 ib    ADD AL,imm8          2        Add immediate byte to AL
05 iw    ADD AX,imm16        2        Add immediate word to AX
05 id    ADD EAX,imm32        2        Add immediate dword to EAX
80 /0 ib  ADD r/m8,imm8        2/7      Add immediate byte to r/m byte
81 /0 iw  ADD r/m16,imm16      2/7      Add immediate word to r/m word
81 /0 id  ADD r/m32,imm32      2/7      Add immediate dword to r/m dword
83 /0 ib  ADD r/m16,imm8      2/7      Add sign-extended immediate byte
                                        to r/m word
83 /0 ib  ADD r/m32,imm8      2/7      Add sign-extended immediate byte
                                        to r/m dword
00 /r    ADD r/m8,r8          2/7      Add byte register to r/m byte
01 /r    ADD r/m16,r16        2/7      Add word register to r/m word
01 /r    ADD r/m32,r32        2/7      Add dword register to r/m dword
02 /r    ADD r8,r/m8          2/6      Add r/m byte to byte register
03 /r    ADD r16,r/m16        2/6      Add r/m word to word register
03 /r    ADD r32,r/m32        2/6      Add r/m dword to dword register



тоесть при сложении с НЕ регистором получаем 6-7тактов

Цитата

AC      LODS m8      5        Load byte [(E)SI] into AL
AD      LODS m16      5        Load word [(E)SI] into AX
AD      LODS m32      5        Load dword [(E)SI] into EAX
AC      LODSB        5        Load byte DS:[(E)SI] into AL
AD      LODSW        5        Load word DS:[(E)SI] into AX
AD      LODSD        5        Load dword DS:[(E)SI] into EAX

в даннаом варианте если еах меня не волнует получем 5 тактов

Автор: rsm 30.10.2005, 07:22
Цитата
Вообще где почитать о хитростях подобного рода

http://wasm.ru/publist.php?list=10

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)