Главная » Файлы » Мои файлы |
«Операційні системи»
[ Скачать с сервера (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] ;збільшення значення знаменника | |
Просмотров: 453 | Загрузок: 10 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |