2014-10-21 2 views
1

Действительно ли FPC nostackframe и директива Delphi .NOFRAME точно эквивалентны в 64-битных asm-функциях?Голые 64-битные функции asm в Delphi и FPC

Другими словами делает следующий код шаблона

procedure Naked(SomeArg: Integer);{$IFDEF FPC}nostackframe;{$ENDIF} 
asm 
{$IFNDEF FPC} 
     .NOFRAME 
{$ENDIF} 
    .. 
end; 

генерирует идентичные голые 64-разрядные функции ASM в Delphi и FPC?

+1

См. [Ответы Ассамблеи на функции системного блока на FreePascal x64] (http://stackoverflow.com/q/16559833/576719) для ответа. –

+1

Без рамки и голые две разные вещи, в прошлый раз, когда я проверил. Голый означает отсутствие пролога/эпилога. Голый подразумевает бескаркасный, но не наоборот. –

+0

.NOFRAME генерирует голую (и, следовательно, бескаркасную) процедуру. Если рамки нет, пролог/эпилог не требуется и не генерируется (по крайней мере, в Delphi). –

ответ

2

Насколько я смог определить, и .NOFRAME (Delphi), и nostackframe (FPC) делают то же самое, то есть предотвращают создание фрейма стека. Обратите внимание, однако, что условия, при которых они вступают в силу, могут быть не одинаковыми в двух компиляторах.

Для совместимости с исходным кодом также используйте {$ASMMODE INTEL} для FPC.

По большей части, FPC64 и DCC64 asm используют один и тот же синтаксис, но в некоторых редких случаях существуют некоторые различия в синтаксисе, который понимают встроенные ассемблеры. Также имейте в виду, что платформы, отличные от Windows x64, используют разные соглашения о вызовах.

+0

{$ Asmmode intel} не требуется в Free Pascal, если вы используете режим Delphi. Режим Delphi уже позволяет использовать asmmode. –

+0

@MarcovandeVoort Спасибо, приятно знать. – PhiS

Смежные вопросы