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 ; "флаг отрицательности"
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.