Re[2]: call LABEL / call PROC
От: DOOM Россия  
Дата: 21.11.06 04:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>В чем разница между вызовами (если есть):


А>>
А>>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!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.