osdev.labedz.org

Przekazanie wartości wyniku z procedury napisanej w assemblerze do procedury wysokiego poziomu

W niektórych przypadkach może istnieć potrzeba przekazania wartości wyniku działania procedury napisanej w języku assemblera do procedury napisanej w języku wysokiego poziomu. Przykładem mogą być tu procedury assemblerowe, które czytają wartość rejestrów specjalnych procesora.

Aby procedura napisana w assemblerze mogła przekazać wynik do procedury napisanej w C należy ją najpierw odpowiednio zdefiniować w pliku nagłówkowym:

dword read_cr0();

Dzięki temu taką procedurę można wywoływać w standardowy sposób, tak jak zwykłą procedurę zwracającą wartość, ale napisaną w języku C.

read_cr0: mov eax, cr0 ret

Aby przekazać wynik do procedury napisanej w C, należy po prostu jego wartość umieścić w rejestrze EAX procesora. Jeżeli jednak wynik jest większy od słowa maszynowego procesora, to rejestr EAX zawiera wskaźnik na określoną w definicji strukturę (znajdującą się na stosie).

Przekazanie wartości z procedury napisanej w C do procedury napisanej w języku assemblera odbywa się stosunkowo rzadko, a jej mechanizm jest analogiczny do poprzedniego.