Формирование массива из 10 двухбайтных чисел, переписать во второй массив все положительные числа, страница 2

            pop dx                         ; запись в dx верхнего элемента стека

            add dx,30h                  ; сумма вида dx:=dx+30h

            mov ah,02h                 ; формирование функции вывода символа на экран

            int 21h                        ; программное прерывание типа 21h

            dec cx                         ; декремент cx

            cmp cx,0                     ; сравнение вида cx=0, и если false, то...

            jne star2                      ; ...переход на метку star2

            mov dx,0                    ; очистка регистра dx

            int 21h                        ; программное прерывание типа 21h

            add si,2                       ; увеличение индекса массива si на 2

            cmp si,di                     ; сравнение вида si=20, и если false, то...

            jne star0                      ; ...переход на метку star0

            mov ah,07h                 ; формирование функции ввода единичного символа (в целях ожидания)

            int 21h                        ; программное прерывание типа 21h

            ret                               ; возврат в основную процедуру

outnum endp              ; конец процедуры outnum

main proc                   ; начало процедуры main

            mov ax,@data                        ; инициализация сегментного...    

            mov ds,ax                   ; ...регистра ds          

            mov ah,9                     ; формирование функции вывода строки на экран

            mov dx,offset mess1  ; инициализация dx адресом начала символьной цепочки mess1

            int 21h                        ; программное прерывание типа 21h

            mov dx,13                  ; инициализация dx символом "Carriage Return" ("Возврат Каретки")

            mov ah,02h                 ; формирование функции вывода единичного символа на экран

            int 21h                        ; программное прерывание типа 21h

            mov dx,10                  ; инициализация dx символом "Line Feed" ("Перевод Строки")

            mov ah,02h                 ; формирование функции вывода единичного символа на экран

            int 21h                        ; программное прерывание типа 21h

            mov dx,10                  ; инициализация dx символом "Line Feed" ("Перевод Строки")

            mov ah,02h                 ; формирование функции вывода единичного символа на экран

            int 21h                        ; программное прерывание типа 21h

            mov di,0                     ; инициализация индексного регистра di нулем

scan:                           ; пользовательская метка scan

            call innum                  ; вызов процедуры innum

            add di,2                       ; увеличение значения регистра di на 2

            cmp di,20                   ; сравнение вида di=20, и если false, то...

            jne scan                      ; переход на метку scan

            mov dx,10                  ; инициализация регистра dx числом 10

            mov ah,02h                 ; формирование функции вывода единичного символа на экран

            int 21h                        ; программное прерывание типа 21h

            mov si,0                      ; инициализация индексного регистра si нулем

            mov di,0                     ; инициализация индексного регистра di нулем

            mov cx,10                   ; запись в счетчик cx числа 10

cycle:                          ; пользовательская метка scan

            jcxz endpr                   ; если cx=0, то переход на метку endpr,...

            mov ax,mass1[si]       ; ...в противном случае в ax записывается si-й элемент mass1

            mov bx,2                    ; в bx помещается число 2

            xor dx,dx                    ; очистка регистра dx

            div bx                         ; деление вида (ax.dx)=ax/bx

            cmp dx,0                     ; сравнение вида dx=0, и если true, то...

            je parity                      ; ...переход на метку parity

            dec cx                         ; декремент cx

            add si,2                       ; сумма вида si:=si+2

            jmp cycle                    ; безусловный переход на метку cycle     

parity:                         ; пользовательская метка parity

            mov ax,mass1[si]       ; запись в регистр ax si-ого элемента массива mass1

            mov mass2[di],ax       ; запись в di-й элемент массива mass2 содержимого регистра ax

            add di,2                       ; сумма вида di:=di+2

            add si,2                       ; сумма вида si:=si+2

            dec cx                         ; декремент cx

            jmp cycle                    ; безусловный переход на метку cycle     

endpr:                         ; пользовательская метка endpr

            call outnum                ; вызов процедуры outnum

            mov ax,4c00h             ; формирование функции стандартного выхода          

            int 21h                        ; формирование прерывания типа 21h и стандартный выход             

main endp                   ; конец процедуры main

end main                     ; конец программы с точкой входа main

;ВАРИАНТ-04: Сформировать массив из 10 двухбайтных чисел. Переписать во второй массив все положительные числа

model small                                                   ; директива модели памяти model с параметром small

.data                                                               ; упрощенная директива сегмента данных

            mass1 dw 10 dup (0)                          ; инициализация двухбайтного 10-элементного массива mass1                 

            mass2 dw 10 dup (?)                          ; выделение памяти под двухбайтный 10-элементный массив mass2

            buff db 7 dup (7)                                                                   ; буфер ввода buff

            mess1 db "Please enter 10 integers (-32768...+32767): $"   ; символьная цепочка mess1

            mess2 db "Positive numbers: $"                                                       ; символьная цепочка mess2

            negf db 0                                            ; "флаг отрицательности"