Приведем текст программы с комментариями.

        TITLE Возврат данных из процедуры через стек.
        ;Программа сделана как EXE-файл.
        ;-------------------------------
        EXTRN Vvod:FAR,Vyvod:FAR,Clear:FAR,Write_Str:FAR,Cursor:FAR
        ;----- Сегмент стека
StackSg SEGMENT PARA STACK 'Stack'
DW      256  DUP(?)
StackSg ENDS
        ;----- Сегмент данных
DataSg  SEGMENT PARA PUBLIC
STR1    DB  "Задайте значение x: $"
STR2    DB  "Результат: $"
DataSg  ENDS
        ;----- Сегмент кода
CodeSg  SEGMENT  PARA  PUBLIC
        ASSUME CS: CodeSg, DS:DataSg, SS: StackSg
Begin   PROC  FAR
        ;Пролог EXE-файла.
        PUSH DS
        XOR AX,AX
        PUSH AX
        MOV AX,DataSg
        MOV DS,AX 
        ;Конец пролога.
        CALL Clear     ;Очистка экрана.
        MOV  DX,0000h
        CALL Cursor    ;Установка курсора.
        LEA  DX,STR1
        CALL Write_Str ;Вывод строки.
        CALL Vvod      ;Ввод числа.
        CMP  BX,-7     ;Сравним BX с -7.
        JLE  M1        ;Если меньше или равно, то переход на метку M1.
;---------------- Следующие действия будут выполнены,
;---------------- при значении, большем -7.
        CMP  BX,6
        JG   M2        ;Если больше 6, то переход на метку M2.
;---------------- Здесь -7<x<=6.
        ADD  BX,BX
        SUB  BX,4
        JMP  M3        ;Переход на вывод результата.
M2:
        CMP  BX,13     ;Сравним BX с 13
        JGE  M1        ;Если больше или равно, то переход на метку M1.
;---------------- Здесь 6<x<13.
        MOV  CX,BX
        ADD  BX,BX
        ADD  BX,CX
        SUB  BX,15
        JMP  M3        ;Переход на вывод результата.
M1:
;---------------- Реализация последнего случая.
        ADD  BX,10
;---------------- Вывод результата.
M3:
        MOV  DX,0100h
        CALL Cursor    ;Установка курсора.
        LEA  DX,STR2
        CALL Write_Str ;Вывод строки.
        CALL Vyvod 
        MOV AH,1       ;Задержка.
        INT 21h             
        RET
Begin	ENDP
CodeSg  ENDS
        END Begin
Текст этой программы можно взять здесь.