Новичок
Профиль
Группа: Участник
Сообщений: 27
Регистрация: 29.12.2009
Репутация: нет Всего: нет
|
Код | data segment message1 db "Введите размер массива/Vvedite razmer massiva: $" message2 db "Введите элементы массива/Vvedite elementi massiva: $" message3 db 13,10,"Ср.Арифметическое/ Sr Arifmet: $"
n db 0 mas db 400 dup(?) ; массив i db 0 flag db 0 first db 0 second db 0 data ends stk segment stack db 256 dup(?) stk ends assume cs:code, ds:data, ss:stk code segment main: mov ax,data ; присваиваем ds адрес начала сегмента данных mov ds,ax mov ah,9h ; вывод приглашения к вводу lea dx,message1 int 21h inputN: mov ah,1 int 21h ; ввод символа с клавиатуры AfterPressN: cmp al,13 ; проверка на нажатие Enter je endInputN ; если нажат Enter конец ввода sub al,30h mov bl,al mov bh,10 mov al,n xor ah,ah mul bh ; умножаем уже введенное число на 10 add al,bl ; суммируем с введенной цифрой mov n,al jmp inputN endInputN: ; перевод строки mov ah,2 ; заносим в ah номер функции mov dl,10 ; в dl - код перевода строки int 21h ; вывод символа mov ah,9h ; вывод приглашения к вводу lea dx,message2 int 21h ; заполнение массива mov si,0 ; адрес смещения относительно начала mov cl,n ; счетчик цикла create: mov flag,0 xor dl,dl mov ah,1 int 21h cmp al,'-' ; проверяем на наличие минуса jne AfterPressDl mov flag,1 inputDl: mov ah,1 int 21h ; ввод символа с клавиатуры AfterPressDl: cmp al,13 ; проверка на нажатие Enter je endInputDl ; если нажат Enter конец ввода sub al,30h mov bl,al mov bh,10 mov al,dl xor ah,ah mul bh ; умножаем уже введенное число на 10 add al,bl ; суммируем с введенной цифрой mov dl,al jmp inputDl endInputDl: cmp flag,1 ; если изначальное был введен минус jne NotMinus neg dl ; изменяем знак NotMinus: mov mas[si],dl ; записываем в массив число ; перевод строки mov ah,2 ; заносим в ah номер функции mov dl,10 ; в dl - код перевода строки int 21h ; вывод символа end_loop: ; окончание цикла inc si ; увеличиваем смещение loop create ; цикл по счетчику cl call Change ; перевод строки mov ah,2 ; заносим в ah номер функции mov dl,10 ; в dl - код перевода строки int 21h ; вывод символа mov ah,9h ; вывод приглашения к вводу lea dx,message3 int 21h mov al,first mov dl,second cwd div dl aam add ax,3030h mov dl,ah mov dh,al mov ah,02 int 21h mov dl,dh int 21h mov ah,0 int 16h mov ah,10h ; ожидание нажатия клавиши int 16h exit: mov ax,4c00h ; выход int 21h Change proc mov si,0 mov bl,mas[si] prepare_for_change: ; подготовка к изменению массива mov si,0 ; смещение обнуливается mov cl,n ; счетчик цикла - число элементов в массиве xor ch,ch changing: mov ax,si ; переносим в ax номер элемента mov dl,3 ; dl = 3 - заменяем каждый 3-й элемент div dl ; делим cmp ah,0 ; сравниваем остаток от деления с 0 jne nextIterationChange ; если не равен 0, то номер не кратен 3, переходим на следующую итерацию ; если равен 0, значит номер элемент кратен 3 mov dl,first add dl,mas[si] mov first,dl mov dl,second add dl,1 mov second,dl nextIterationChange: ; подготовка к следующей итерации inc si ; увеличение счетчика loop changing ; переход на следующую итерацию ret Change endp code ends end main
|
|