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

            mov ah,0Ah                ; формирование функции буферизованного ввода с клавиатуры

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

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

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

            sub bcd1[di],30h        ; разность вида bcd1[di]:=bcd1[di]-30h

            push word ptr bcd1[di]           ; запись в стек как слова di-ого элемента цепочки bcd1

            inc di                          ; инкремент di

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

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

            mov cx,10                   ; инициализация счетчика cx десятью

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

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

            pop ax                         ; извлечение в регистр ax числа из стека

            mov bcd1[di],al                      ; запись в di-й элемент цепочки bcd1 младшего байта регистра ax

            inc di                          ; инкремент di

            loop cyc11                  ; сравнение вида cx=0, и если false, то cx:=cx-1, и переход на метку cyc11

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

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

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

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

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

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

            mov dx,offset bcd2    ; инициализация dx адресом начала буфера ввода bcd2

            mov ah,0Ah                ; формирование функции буферизованного ввода с клавиатуры

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

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

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

            sub bcd2[di],30h        ; разность вида bcd2[di]:=bcd2[di]-30h

            push word ptr bcd2[di]           ; запись в стек как слова di-ого элемента цепочки bcd2

            inc di                          ; инкремент di

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

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

            mov cx,10                   ; инициализация счетчика cx десятью     

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

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

            pop ax                         ; извлечение в регистр ax числа из стека

            mov bcd2[di],al                      ; запись в di-й элемент цепочки bcd2 младшего байта регистра ax

            inc di                          ; инкремент di

            loop cyc22                  ; сравнение вида cx=0, и если false, то cx:=cx-1, и переход на метку cyc22

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

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

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

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

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

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

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

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

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

            mov si,9                      ; инициализация индексного регистра si девятью

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

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

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

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

            mov dx,45                  ; инициализация регистра dx символом "минус" (код 45d)

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

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

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

            mov cx,10                   ; инициализация счетчика cx нулем

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

            mov dx,word ptr res[si]          ; запись в регистр dx как слова si-ого элемента цепочки res

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

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

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

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

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

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

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

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

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

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

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

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

            mov ax,@data                        ; инициализация...   

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

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

            mov di,11                   ; запись в индексный регистр di числа 11

            mov si,2                      ; запись в индексный регистр si числа 2

            mov cx,10                   ; инициализация счетчика циклов cx десятью

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

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