|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 17, 2004 05:30:29 Иногда - надо, иногда можно и обойтись - тут от прграммы больше зависит. Регистр очень часто вовсе не лишний, скорость выше, иногда даже код более компактный (как это ни странно на первый взгляд - не стОит забывать, что winAPI не изменяет EBP) Но дело-то не в этом - использование BP - это необходимость времён ДОСа и 286 процессора, сейчас уже на дворе 2005 год почти :-) А blabla equ [esp+4*5] - это уж точно изврат, так ошибок не оберёшся, особенно когда добавляешь новые команды и т.п. Это ладно, если нужно делать mov eax,[blabla] а если push [blabla] или pop [blabla] ? В том-то вся прелесть FASM, что сделав один раз макросы (или взять уже готовые), можно потом просто писать программы не напрягаясь считая параметры и локальные переменные. А извращаться тогда уж так: mov esi,esp lodsd xchg ecx,eax lodsd xchg edx,eax |
|
|
Дата: Ноя 17, 2004 05:59:23 Это ладно, если нужно делать mov eax,[blabla] а если push [blabla] или pop [blabla]? А в чем проблема? Все работает. ...это необходимость времён ДОСа и 286 процессора... как и асм :) вон люди щас на дотНЕТ пишут :) |
|
|
Дата: Ноя 17, 2004 06:35:29 masquer > А в чем проблема? Все работает Тут фишка в том, что push и pop меняют значения esp, причём важно, до или после выполнения команды эти изменения делаются. В общем-то, решение элементарно, но все макросы, которые я видел были не корректны. А правильно так:
macro push arg
{
push arg
__STACK__=__STACK__-4
}
macro pop arg
{
__STACK__=__STACK__+4
pop arg
}
> как и асм :) вон люди щас на дотНЕТ пишут :) Ну вот, началась агитация :-) Я имел ввиду то, что 16 битные x86 просто не имели возможности адресовать память через SP, сейчас же с этим проблем нет. но микрософт вместо новых фич добавляет в MASM новые баги. |
|
|
Дата: Ноя 17, 2004 08:04:20 S_T_A_S_ Ты хочешь сказать что при применении макросов можно полностью расслабиться, косяк невозможен? |
|
|
Дата: Ноя 17, 2004 11:31:19 Да, только сами макросы не должны содержать косяков :-) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.062 |