Приведем текст программы с комментариями.
TITLE Задача 41_2.
;Программа сделана как 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 "y = $"
KW DW ? ;Квадрат введенного числа.
C DW ? ;Введенное число.
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 ;Ввод числа.
MOV C,BX ;Сохранение введенного числа.
MOV AX,BX ;Вычисление квадрата введенного числа.
MUL BL
MOV KW,AX ;Сохранить квадрат числа.
CMP C,0 ;Сравнить число с нулем.
JG M1 ;Перейти на M1, если больше 0.
;---------------- Следующие действия будут выполнены,
;---------------- при значении, меньшем или равном 0.
MOV AX,KW
MOV AH,0
DEC AX
MUL AX
MOV BX,AX
JMP M2 ;Переход на вывод результата.
M1:
;---------------- Реализация второго случая.
MOV AX,KW
SUB AX,3
CMP AX,10
JGE M3
;---------------- Следующие действия будут выполнены,
;---------------- если x*x-3 меньше 10.
MOV BX,15
JMP M2 ;Переход на вывод результата.
M3:
;---------------- Следующие действия будут выполнены,
;---------------- если x*x-3 больше или равно 10.
MOV BX,20
;---------------- Вывод результата.
M2:
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
.