Инструкция RET


Как выучить английский Как выучить английский

В наше время любой человек должен знать английский язык. А тем более программист. Потому что довольно большая часть документации существует только на английском. А профессионал не может ждать, пока кто-то переведёт ему документацию. Он должен уметь быстро получать нужную инфорамцию и использовать её, независимо от того, на каком она языке - на английском или на русском... Ссылки на курсы по английскому...

Инструкция RET в Ассемблере выполняет возврат из ближней процедуры. У этой команды обычно нет операндов, хотя в качестве операнда может быть чётное число (только непосредственное значение).

Если не заморачиваться о таких вещах как ближний/дальний вызов, то можно сказать, что эта команда выполняет выход из программы или процедуры.

Алгоритм работы команды RET:

  1. Получить из стека IP (адрес возврата в программу из процедуры).
  2. Если имеется операнд, то SP = SP + операнд. Операнд необязателен, но если он есть, то после того, как будет считан адрес возврата, из стека будет удалено столько байтов, сколько указано в операнде. Это требуется, если при вызове процедуры ей передавались параметры через стек.

Никакие флаги при выполнении команды не изменяются.

ВНИМАНИЕ!
В зависимости от того, как была описана процедура, которую завершает команда RET, ассемблер может заменить команду RET на команду RETN или RETF.

Для лучшего понимания смысла и алгоритма работы инструкции RET необходимо разобраться с тем, как вызываются и выполняются процедуры в ассемблере. Но это другая отдельная тема. А сейчас небольшой пример использования:

  .model tiny
  .code
  ORG    100h
	
start:	
  CALL  MyProc  ;Вызвать процедуру
  ADD   AX,  1

  RET           ;Вернуться в операционную систему

MyProc PROC     ;Объявление процедуры.
  MOV AX, 1
  RET           ;Вернуться в программу.
MyProc ENDP

  END  start

Ну и напоследок о происхождении названия команды.

RET - это сокращение от слова RETURN (возврат).



Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика