Адрес возврата в вызывающую программу хранится в стеке.
Команда RET [число] возвращает управление вызывающей программе.
Она считывает адрес возврата из вершины стека, загружает его в регистры CS и IP (теперь выполняться будет следующая за CALL команда в программе) адрес возврата при этом удаляется из стека(!), затем стек очищается на указанное число байт и выполняется переход по адресу возврата.
Команда RET соответствует команде RET 0
В зависимости от того, дальняя или ближняя была описана процедура, ассемблер формирует одну из возможных команд RET. В первом случае из стека извлекается два слова, которые загружаются в регистры CS и IP, во втором - одно слово в регистр IP.
Команды CALL и RET действуют согласованно, за соответствием между командами следит транслятор.
Необязательный параметр [число] задает значение, удаляемое из стека при возврате из процедуры - в байтах (use16) или в словах (use32)