Wstawki assemblera w Pascal-u Delphi

0

WItam
W jaki sposob z rejestrow ( wstawka asemblera ) pobierac dane i zapisywac przez zmienne zadeklarowane w pascalu
[email protected]
Dzieki
Pozdrawiam

0
asm
// 1.
  mov ax, zmienna16bit

// 2.
  les edi, zmienna
  mov ax, word ptr [es:edi]
end;

a przynajmniej tak to się robiło pod tp.

0

W sekcji "asm ... end;" możesz od razu odwołać się do zmiennej globalnej odpowiedniego typu. Np. Byte do al, word do ax, integer do eax (tu 32 bit)
I tak, gdy masz zmienną globalną MyAL: byte; MyAX : word; MyEAX : integer, piszesz:
asm
mov MyAL, al
mov MyAX, ax
mov MyEAX, eax
end;
Jeśli chcesz coś wpisywać do rejestrów (np. bx) to musisz zachować ich pierwotne wartości przez
push bx
...
a na końcu ją odtworzyć
pop bx

Można też od razu zrobić to ze wszystkimi rejestrami:
pushad
...
popad
(wersja 32-bitowa)

Pozdrawiam, Bocian

0
asm
// 1.
  mov ax, zmienna16bit

// 2.
  les edi, zmienna
  mov ax, word ptr [es:edi]
end;

a przynajmniej tak to się robiło pod tp.

Ale jak piszesz procedurę w asmie, to na końcu nzzwy procedury dodajesz assembler:

procedure prockaWAsmie(p1: string); assembler;
0

Juhas: nie

The reserved word inline and the directive assembler are maintained for backward compatibility only. They have no effect on the compiler.

0

Juhas: nie

The reserved word inline and the directive assembler are maintained for backward compatibility only. They have no effect on the compiler.

Nie rozumiem stwierdzenia: wsteczna kompatybilność.

// kompatybilnośc w dół/tył, czy jakkolwiek to ujmiesz, żeby móc kompilować programy napisane np. w t. pascalu bez specjalnych przeróbek w kodzie [mf]

0

Ale jak piszesz procedurę w asmie, to na końcu nzzwy procedury dodajesz assembler:

procedure prockaWAsmie(p1: string); assembler;

g. prawda:
procedura ct;
begin
asm
xor eax,eax
end;
end;

Jeśli chcesz coś wpisywać do rejestrów (np. bx) to musisz zachować ich pierwotne wartości przez
push bx
...
a na końcu ją odtworzyć
pop bx

też g. prawda - zapamiętywanie wartości dotyczy tylko kilku rejestrów - ebp, ds i esi. resztę można modyfikować bez żadnych konsekwencji.

0

Jak napisał pq: słowo assembler jest pozostałością po TP i Delphi 1 i jest całkowicie ignorowane. Taka procedura nie wywoła żadnych błędów kompilacji:

procedure AsmProc;
asm
  // ...
end;
0

Jeśli chcesz coś wpisywać do rejestrów (np. bx) to musisz zachować ich pierwotne wartości przez
push bx
...
a na końcu ją odtworzyć
pop bx

też g. prawda - zapamiętywanie wartości dotyczy tylko kilku rejestrów - ebp, ds i esi. resztę można modyfikować bez żadnych konsekwencji.

g. prawda [green]

When you program under Win32, you must know some important rules. One such rule is that, Windows uses esi, edi, ebp and ebx internally and it doesn't expect the values in those registers to change. So remember this rule first: if you use any of those four registers in your callback function, don't ever forget to restore them before returning control to Windows. A callback function is your own function which is called by Windows. The obvious example is the windows procedure. This doesn't mean that you cannot use those four registers, you can. Just be sure to restore them back before passing control back to Windows.

// g. prawda g. prawda - no to raptem 4 rejestry, z czego dwa wymieniłem :-P - ŁF

1 użytkowników online, w tym zalogowanych: 0, gości: 1