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

            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 keyin                    ; вызов процедуры keyin

            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 первичного массива mass1

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

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

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

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

            cmp ax,0                     ; сравнение с нулем содержимого регистра ax

            jg positive                   ; если ax больше нуля, то переход на метку positive                      

            add si,2                       ; в противном случае увеличиваем si на 2 (т. к. массив типа word)           

            loop cycle                   ; уменьшаем cx на 1, и если cx не равно 0, то переходим на метку cycle

            jmp endpr                   ; в противном случае переходим на метку endpr, т. е. к концу программы

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

            mov mass2[di],ax       ; в di-й элемент массива mass2 записываем ax

            add di,2                       ; увеличиваем di на 2

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

            loop cycle                   ; уменьшаем cx на 1, и если cx не равно 0, то переходим на метку cycle

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

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

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

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

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

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

;ВАРИАНТ-17: Написать программу вычитания двух 10-байтовых чисел с учетом знака

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

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

            bcd1    db        13 dup(13)                  ; инициализация буфера 10-байтного BCD-числа

            bcd2    db        13 dup(13)                  ; инициализация буфера 10-байтного BCD-числа

            num1   db        10 dup(0)                    ; инициализация нулевого BCD-числа num1

            num2   db        10 dup(0)                    ; инициализация нулевого BCD-числа num2

            res       db        10 dup(0)                    ; инициализация нулевого BCD-разности res

            sign     db        0                                  ; инициализация переменной-знака sign

            mess1  db        'Please enter first 10-byte BCD-number: $'  ; символьная цепочка mess1

            mess2  db        'Please enter second 10-byte BCD-number: $'         ; символьная цепочка mess2

            mess3  db        'Difference: $'                                                ; символьная цепочка mess3

.stack 256h                                                     ; упрощенная директива для 256-байтного сегмента стека

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

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

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

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

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

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