[free pascal]wywołanie procedury

[free pascal]wywołanie procedury
Darck
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Monachium
  • Postów: 848
0

mam adres procedury obsługi przerwania. Czy można ja wywołać jakimś poleceniem pascalowym, czy jedyny sposób to dodanie wstawki asemblerowej i call ?

Pawel200x.5
  • Rejestracja: dni
  • Ostatnio: dni
0

Nie znam się za bardzo na "funkcjach przerwania", ale jeśli to jest po prostu funkcja, w jakiejś ludzkiej konwencji, to da się.

Kopiuj
type TProcedura = procedure (a,b,c:longint);stdcall;
var f:TProcedura;
begin
  f:=TProcedura(twoj_adres);
  f(1, 2, 3);
end;

Warto wiedziec, ze jesli zadeklarujemy typ funkcji jako:
procedure (a,b,c:longint);regcall;
to argument a wyląduje w eax, b w edx i c w ecx.

migajek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 370
0
Pawel200x.5 napisał(a)

Nie znam się za bardzo na "funkcjach przerwania", ale jeśli to jest po prostu funkcja, w jakiejś ludzkiej konwencji, to da się.

Kopiuj
type TProcedura = procedure (a,b,c:longint);stdcall;
var f:TProcedura;
begin
  f:=TProcedura(twoj_adres);
  f(1, 2, 3);
end;

Warto wiedziec, ze jesli zadeklarujemy typ funkcji jako:
procedure (a,b,c:longint);regcall;
to argument a wyląduje w eax, b w edx i c w ecx.

tzn ze przy stdcall wszystko idzie na stos?

flabra
  • Rejestracja: dni
  • Ostatnio: dni
0

przekazywanie argumentow przez stos to standardowe przekazywanie

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.