;*****************************************************************
; определение  области памяти, используемой для хранения данных
;
SDATA SEGMENT WORD PUBLIC 'DATA'

ARRAY_X     DB 0,-1,22,-34,43,-51,-63,17,18,-95 ; - массив чисел X
ARRAY_Y     DB 10 DUP(0)                        ; - массив чисел Y

SDATA ENDS
;*****************************************************************
; определение  области стека
SSTACK SEGMENT PARA STACK 'STACK'
DW 64 DUP (?)
STACK_POINT LABEL WORD
SSTACK ENDS
;*****************************************************************
; определение программного сегмента
SCODE SEGMENT WORD PUBLIC 'CODE'
ASSUME CS:SCODE,DS:SDATA,SS:SSTACK
START:   MOV AX,SDATA	;запись сегментного адреса
MOV DS,AX	;данных в регистр DS
MOV AX,SSTACK	; Определение сегмента стека
MOV SS,AX	; и указателя стека
MOV SP,OFFSET STACK_POINT
; Инициализация исходных данных
MOV SI,0	;- SI содержит индекс массива X
MOV DI,0	;- DI содержит индекс массива Y
MOV CX,10   ;- СX:= число элементов массива X 
; Начало цикла
M1:	MOV AL,ARRAY_X[SI] 	;- занесение очередного элемента
; массива X в аккумулятор
CMP AL,12		;- сравнение содержимого AL
;  с числом 12
JGE M2		;- переход на M2 если больше или равно
MOV ARRAY_Y[DI],AL 	;- запись в массив Y
INC DI		;- увеличение DI на 1
M2:	INC SI		;- увеличение SI на 1
LOOP M1		;- переход на метку M1
MOV AX,4C00H		;- выход из программы
INT 21H		;  выполняется функция DOS, номер
;  которой находится в AH
SCODE   ENDS		;- конец сегмента программы
END START		;- конец программы

