Здравствуйте, Аноним, Вы писали:
А>>В чем разница между вызовами (если есть):
А>>
А>>call LABEL
А>> ; ...
А>>LABEL:
А>> ; do something
А>> ret
А>>
А>>и
А>>
А>>call some_proc
А>> ; ...
А>>some_proc PROC
А>> ; do something
А>> ret
А>>some_proc ENDP
А>>
Запись эта эквивалентна с точки зрения процессора. call — это запихивание CS и IP в стэк (или только IP в случае ближнего вызова) и jmp на какую-то метку. Как она написана в ассемблеоре это уже дело десятое... Например, в nasm'е такой формы просто нету (я про some_proc PROC и some_proc ENDP).
Насчет ее смысла в tasm'е могу и ошибаться, но вроде это нужно линкеру, чтобы он правильно сливал exe'шник из нескольких файлов...
А>В первом случае флаги не сохраняются перед вызовом и не восстанавливаются после ret, во втором — сохраняются и восстанавливаются.
Флаги сохраняются и восстанавливаются только при при командах int и iret!
Здравствуйте, DOOM, Вы писали:
DOO>Насчет ее смысла в tasm'е могу и ошибаться, но вроде это нужно линкеру, чтобы он правильно сливал exe'шник из нескольких файлов...
Если не ошибаюсь, то же самое. Для многофайловой сборки используются директивы PUBLIC и/или GLOBAL. А операндом к ним может служить как имя процедуры, так и метка. Опять же, если не ошибаюсь, PROC придумали, чтобы поддержать в асме структурное программирование.
Да, есть еще директива EXTERN, говорящая о том, что метку следует брать из другого модуля.
Здравствуйте, Privalov, Вы писали:
P>Здравствуйте, DOOM, Вы писали:
DOO>>Насчет ее смысла в tasm'е могу и ошибаться, но вроде это нужно линкеру, чтобы он правильно сливал exe'шник из нескольких файлов...
P>Если не ошибаюсь, то же самое. Для многофайловой сборки используются директивы PUBLIC и/или GLOBAL. А операндом к ним может служить как имя процедуры, так и метка. Опять же, если не ошибаюсь, PROC придумали, чтобы поддержать в асме структурное программирование.
P>Да, есть еще директива EXTERN, говорящая о том, что метку следует брать из другого модуля.
В общем. Скажу так... Помню, что при сборке многосегментного exe'шника разница между proc и label в tasm'е может проявится... С чем это конкретно связано — не помню уже... На tasm'е писал последний раз очень давно... Скорее всего связано это будет с разрешением каких-нибудь макросов (типа call, ret и т.п.), а также правильной обработкой всяких там assume...
Здравствуйте, DOOM, Вы писали:
DOO>В общем. Скажу так... Помню, что при сборке многосегментного exe'шника разница между proc и label в tasm'е может проявится... С чем это конкретно связано — не помню уже... На tasm'е писал последний раз очень давно...
Писал на нем примерно тогда же.
DOO>Скорее всего связано это будет с разрешением каких-нибудь макросов (типа call, ret и т.п.), а также правильной обработкой всяких там assume...
В tasm еще от режима зависит: MASM или IDEAL. Что-то было в нем похожее на прототипы функций. Уже не помню.