150
5. Rozkazy mikroprocesorów 8086/8088
RET (ang. return from procedurÄ™)
powrót z podprogramu_
Operacja: zob. opis Znaczniki: bez zmian
Rozkaz RET powoduje przekazanie sterowania z podprogramu do rozkazu następującego bezpośrednio po rozkazie CALL, który wywołał podprogram. Dokonuje się to przez
- pobranie ze stosu adresu kontynuacji zapisanego rozkazem CALL (offset lub offset
i segment w zależności od tego czy podprogram został wywołany wewnątrz segmentu, czy z innego segmentu), '
- załadowanie tym adresem wskaźnika rozkazów IP (lub także rejestru CS.)
Z każdym rozkazem CALL musi być związany odpowiedni rozkaz RET. Przy pośrednim wywołaniu podprogramu trzeba zwrócić szczególną uwagę na to, aby typ rozkazu CALL (NEAR lub FAR) był zgodny z typem rozkazu RET. Asembler generuje właściwy typ rozkazu RET, zgodnie z zadeklarowanym przez programistę typem podprogramu. Jeżeli przekazanie parametrów do podprogramu odbyło się za pośrednictwem stosu (PUSH), to rozkaz RET z parametrem (zob. opcje powrotu z parametrem) pozwala automatycznie zwolnić zajęty dodatkowo fragment stosu.
Powrót z podprogramu wewnątrz segmentu Operacja: IP<-M[SP + l]oM[SP]; ncxt SP«-SP + 2 1100 0011 Liczba taktów - 8.
Przykład
PROGRAM SEGMENT
• ••
CALL PODPROGRAM
PROC NEAR • • •
RET
ENDP
•• •
ENDS
♦
PODPROGRAM
PODPROGRAM
PROGRAM
Powrót z podprogramu wewnątrz segmentu z parametrem
Operacja:IP«-M[SP + l]oM[SP); next SP<-SP + 2; next SP«-SP + data_highodata_low 1100 0011 datalow datahigh
Liczba taktów -12.
powered by
5.5. Rozkazy sterowania skokami
Przykład PROGRAM |
SEGMENT • •• |
PODPROGRAM |
MOV AX, OFFSET ZMIENNA PUSH AX CALL PODPROGRAM • •• PROC NEAR |
PODPROGRAM |
• •• RET 2 ENDP |
PROGRAM |
• •• ENDS ♦ |
Powrót z podprogramu z innego segmentu Operacja: IP^M[SP + l]oM[SP]; next SP«-SP + 2 CS«-M[SP + l]oM[SP]; next SP+-SP + 2
1100 1011 Liczba taktów -18.
Przykład |
EXTRN PODPROGRAM:FAR |
PROGRAM |
SEGMENT • •• CALL PODPROGRAM |
PROGRAM |
• • • ENDS |
PROCEDURY |
• •• SEGMENT PUBLIC PODPROGRAM |
PODPROGRAM |
• •• PROC FAR |
PODPROGRAM |
••• RET ENDP |
PROCEDURY |
• • • ENDS ♦ |
Powrót z podprogramu z innego segmentu z parametrem °Pcracja: IP-M[SP + l]oM[SP]; next SP.-SP + 2 Cs<-M[SP + l|oM[SP]; nexl SP*-SP + 2