MOV ES, AX ; загрузка в ES указателя доп. сегмента данных
; загрузим в регистры BX и DI смещения в сегменте данных,
;указывающих на первые элементы массивов SOURCE и DEST
MOV BX, OFFSET SOURCE; загрузка указателей массива SOURCE
;в BX
LEA DI, DEST; загрузка указателей массива DEST в DI
;команды MOV и LEA здесь имеют одно назначение
; загрузим в регистр CX количество проходов цикла, равное
; количеству элементов в нем
MOV CX, 5; счетчик проходов цикла
; организуем цикл
A_1: MOV AX, [BX]; загрузка числа в регистр AX из массива-источника
; по указанному адресу, хранимому в регистре BX
CMP AX, 0FAH; сравнение элемента в регистре AX с константой
JNZ N_EQ; если число не равно (флаг Z не равен 1), то переход
; на метку N_EQ
MOV AX,0 ; иначе (флаг Z равен 1), то обнуляем элемент
; в регистре AX (в случае если флаг Z не равен 1
; эта команда пропускается)
N_EQ: MOV ES: [DI], AX; теперь помещаем обработанный элемент из
; регистра AX (обнуленный, если он был равен константе и
; неизменный, если не равен) в массив-приемник по
; адресу, указанному в массиве DI
ADD DI, 2; увеличиваем адрес указателя массива-приемника
; на 2 байта т.к. слово=2 байта
ADD BX, 2; увеличиваем адрес указателя массива-источника
; на 2 байта т.к. слово=2 байта
LOOP A_1; повторение цикла, пока значение регистра-счетчика CX
; не станет равным 0
RET; команда возврата из процедуры, она извлекает данные,
; которые мы положили в стек в начале программы
OUR_PROG ENDP; закрываем описание процедуры OUR_PROG
_CODE ENDS; закрываем описание сегмента кода _CODE
END OUR_PROG; закрываем описание программы