Приветствую Вас, Гость! Регистрация RSS
Вторник, 26.11.2024


Главная » Файлы » Мои файлы

«Операційні системи»
[ Скачать с сервера (67.3 Kb) ] 18.08.2017, 22:21
Лабораторна робота №5
Тема:«Програмування простих циклів і розгалужень»
Мета роботи:вивчення правил побудови простих циклів і розгалужень, способів адресації змінних і набуття навиків їх реалізації у програмах мовою асемблера.
Завдання
1. Ввести з клавіатури довільний текст (не більше рядка на екрані).
Виконати його оброблення згідно варіанту. Текст після оброблення вивести на екран.
Варіант №17: Додати після кожного символа по три пробіли.

2. Визначити довільний масив цілих елементів (тип byte для непарних
варіантів, word– для парних). Виконати його оброблення згідно варіанту. Правильність роботи програми перевірити у налагоджувачі.
Варіант №17: Визначити середнє значення невід’ємних елементів масиву.

Виконання
Lab5_1.asm
data segment
OutMsg db "Enter string and press Enter: ", "$"
ResMsg db 13,10,"Result line: ", "$"
string db 0dh,0ah,80 dup (?)
data ends
code segment
assume ds:data,cs:code,ss:stack
start:
mov ax,data
mov ds,ax
moves,ax
mov ah,0 ;номер функції установки режиму дисплея
moval,2 ;код режиму 80*25 чорно-білий
int 10h
lea dx,OutMsg ;розміщення в DX вказівника на рядок
movah,9 ;функція DOS для виведення рядка
int 21h ;виклик DOS
leadi,string+2 ;розміщення в di вказівника на рядок
movah,1 ;функція DOS для введення символу
Input:
int 21h ;виклик DOS, символ знаходиться в al
cmp al,0dh
jzOutput
stosb
moval,' ' ;додавання трьох пробілів після кожного символа
stosb
jmp Input
Output:
lea dx,ResMsg ;розміщення в DX вказівника на рядок
movah,9h ;функція DOS для виведення рядка
int 21h ;виклик DOS
mov byte ptr[di],'$' ;в кінець рядка символ закінчення
mov ah,9
lea dx,string
int 21h
mov ax,4c00h
int 21h
code ends
end start

Lab5_2.asm:
data segment
Number db "Enter number of elements: ", "$"
OutMsg db "Enter elements and press Enter: ", "$"
Error db "Incorrect number$"
Buffer db 6,7 Dup(?)
Iterdw0
cIterdw 0
Space db " ",13,10, "$"
Chisldw 0
Znamdb 0
Array dw0, … , 0
data ends
code segment
assume ds:data,cs:code,ss:stack
start:
mov ax,data
mov ds,ax
moves,ax
mov ah,0 ;номер функції установки режиму дисплея
moval,2 ;код режиму 80*25 чорно-білий
int 10h
lea dx,Number ;розміщення в DX вказівника на рядок
mov ah,9h ;функція DOS для виведення рядка
int 21h ;виклик DOS
call InputInt
cmp di,1 ;перевірка, чи ввів користувач від'ємне значення к-ті елементів
jnz Plus ;якщо ні, то перехід на адресу Plus
negax ;якщо так перетворення негативного числа у позитивне
Plus:
mov [Iter],ax ;Число в AX - це кількість ітерацій
lea dx,OutMsg ;розміщення в DX вказівника на рядок
movah,9h ;функція DOS для виведення рядка
int 21h ;виклик DOS
leadx,Space ;розміщення в DX вказівника на рядок
movah,9h ;функція DOS для виведення рядка
int 21h ;виклик DOS
mov [cIter], 0 ;скільки разів виконується цикл
mov [Chisl], 0 ;сума невід'ємних елементів у чисельнику
mov [Znam], 0 ;їх кількість у знаменнику
again:
CallInputInt
movdi, [cIter] ;у di - поточний індекс масиву
mov Array[di], ax ;занесення за цим індексом введеного числа
inc[cIter]
mov cx,[cIter]
cmp [Iter],cx
jnzagain
mov ax, Chisl
mov cl, Znam
div cl ;виконую ділення(результат знаходиться в ax)
call OutInt
mov ax,4c00h
int 21h
InputInt proc
mov ah,0ah
xor di,di
mov dx,offset Buffer ;в dx адреса буфера
int 21h
mov dl,0ah ;перенос рядка
mov ah,02
int 21h
movsi,offset Buffer+2 ;взяття адреси початку рядка
cmpbyte ptr[si],"-" ;якщо перший символ мінус
jnz InpInt1
movdi,1 ;встановлюємо вказівник
incsi ;і пропускаємо його
InpInt1:
xor ax,ax
movbx,10 ;основа системи числення
InpInt2:
mov cl,[si] ;взяття символу з буфера
cmpcl,0dh ;якщо це символ закінчення рядка
jz endin
cmp cl,'0' ;якщо < 0
jllError
cmp cl,'9' ;якщо > 9
jalError
subcl,'0' ;перетворення символу в число
mulbx;множення на основу системи числення
add ax,cx ;дописуєм до рядка
incsi;збільшення вказівника на наступний символ
jmp InpInt2 ;повтор
lError: ;якщо введене не число, то на вихід
mov dx, offset Error
mov ah,09
int 21h
endin:
cmpdi,1 ;перевірка, чи був введений '-'
jnz InpInt3 ;якщо ні, то перехід...
negax ;якщо так, то перетворення числа у від'ємне
InpInt3:
add Chisl, ax ;сумуємо з іншими додатніми числами
inc[Znam] ;збільшення значення знаменника
Категория: Мои файлы | Добавил: opteuropa | Теги: звіт, «Операційні системи», скачать безплатно, Кафедра інформаційних систем
Просмотров: 453 | Загрузок: 10 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Украина онлайн

Рейтинг@Mail.ru

подать объявление бесплатно