Почему PUSH переменная через регистр, а не PUSH переменная непосредственно на языке ассемблера? - PullRequest
0 голосов
/ 26 сентября 2011

Я наткнулся на программу регистрации ключей в asm на форуме.Я думал, что я мог бы создать регистратор ключей сам.Когда я читал код, чтобы увидеть, что на самом деле происходит в этой программе, я натолкнулся на некоторые интересные вещи.

1.Программа почти никогда не помещала переменную в стек.Он переместил значение переменной в регистр, а затем выдвинул регистр.например.

;hInst:DWORD 4
lea esi, hInst
push esi

2. Программа очистила массивы с помощью stosd.Например:

    ;array1 BYTE 256 DUP(?)
    lea edi, array1
    push 256/4
    xor eax, eax
    rep stosd 3

Программа использовала push-pop для присвоения значений, как в приведенном выше примере.

Каковы преимущества вышеуказанных соглашений?

1 Ответ

1 голос
/ 27 сентября 2011

1) Я не могу думать о каких-либо преимуществах на нынешних машинах, но давным-давно вы могли только подтолкнуть рег.Не было push mem / immed form.

2) Простота / такая же как # 1.Я слышал, что в настоящее время строковые инструкции почти устарели.Однако, в тот день они были единственным способом летать, поскольку они были намного быстрее (время цикла не намного лучше, но сохраняло ОЧЕНЬ ограниченную пропускную способность памяти дня, не увеличивая нагрузку инструкций).

...