Directorul Fe23 - x86 - transferuri de control și apeluri procedurale

Coloana "Operand" arata ca este un operand pentru instructiunile masinii. Mărimea unui operand de 16 biți sau 32 de biți este determinată de atributul de mărime al operandului.







Opțiune (0). Pentru o scurtă trecere SHORT, offsetul are doar 1 octet. Prin urmare, tranziția poate fi în intervalul de la (-128) până la (+127).

Opțiunea (1). Pentru o tranziție aproape NEAR, offsetul are 2 octeți sau 4 octeți. Dacă offsetul este de două octeți, tranziția este posibilă în intervalul de la (-32768) la (+32767).

În primele trei cazuri, tranziția are loc în același segment în care este executată comanda JMP. Cu această tranziție, conținutul registrului CS nu se modifică.

În următoarele două variante, se efectuează o tranziție îndepărtată FAR (intersegmentală).

Comanda de apel a procedurii

Celelalte patru opțiuni sunt complet identice pentru comanda JMP și pentru comanda CALL. Tipuri de sari pe deplin, tipuri de operand, formatul de comanda a masinii. (Este clar că codurile de operare pentru comenzile JMP și CALL sunt diferite).

Toate explicațiile după tabel pentru comanda JMP pentru opțiuni (1). (2). (3). (4) sunt potrivite pentru comanda CALL.







Pentru apelurile procedurale la distanță FAR, valoarea segmentului CS este stocată și pe stivă, cu CS primul introdus în stivă și apoi EIP (sau IP pentru modul "16 biți").

Întoarceți comanda de la procedură

Există patru coduri de operare diferite pentru comanda RET, aceste instrucțiuni ale mașinii sunt executate puțin diferit.

Cu o întoarcere apropiată NEAR din stivă recuperează valoarea pentru EIP, în timp ce valoarea CS rămâne neschimbată. Atunci când FAR este departe de stiva, se extrage valoarea pentru EIP, urmată de valoarea pentru CS.

Tipul de returnare din procedură - o apropiere aproape de NEAR sau de la distanță FAR - trebuie să se potrivească cu tipul apelului procedurii cu comanda CALL. De obicei, asamblatorul vă permite să adăugați litera "N" sau "F" la numele comenzii RET pentru a specifica tipul de returnare.

Comenzi pentru cadrele stivei

Un cadru de stivă este un fel de mecanism software care vă permite să alocați un teanc în stivă pentru plasarea dinamică a variabilelor locale în stivă. Comenzile ENTER și LEAVE oferă suport hardware pentru acest mecanism și facilitează programarea.

Comanda ENTER este plasată la începutul procedurii. Ea pregătește cadrul stivei pentru muncă. Comanda LEAVE este plasată înainte de a ieși din procedură și este plasată înaintea fiecărei comenzi RET, dacă există mai multe ieșiri. Aceasta restabilește situația veche din stack.

Comanda ENTER are doi parametri. Primul parametru specifică numărul de octeți de rezervat pentru variabilele locale ale acestei proceduri. Al doilea parametru este de obicei zero.

Paginile principale ale directorului







Trimiteți-le prietenilor: