КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Тема: Виведення символьної стрічки на екран за допомогою мови AsemblerМета: навчитися (згадати) методи програмування в мові Асемблер, застосовуючи команди вводу-виводу та відповідні регістри і функції. Теоретичні відомості викладені в розділі 2 методичного посібника з системного програмування для самостійних робіт. Хід роботи: 1. Розробити програму для введення - виведення стрічкових написів на екран монітора, застосовуючи різні функції операційної системи (DOS). 2. Формуємо функціональне наповнення. Найбільш поширеними діями у будь-яких прикладних програмах є операції введення – виведення. Мовою Assembler, окрім виклику функції самої операції, необхідно здійснити ряд додаткових дій, наприклад перевірити готовність відповідного пристрою. У зв'язку з цим, для типових пристроїв розроблені стандартні програми організації введення - виведення, які викликаються разом із функціями переривання, що звертаються до операційної системи INT 21h. Перелік основних функцій DOS для реалізації підпрограмам введення–виведення наведені у таблиці нижче. Код будь-якої функції завжди повинен передаватися у підпрограму через старший байт AHрегістра AX.
3. Формуємо мову завдань. Синтаксис мови завдань буде представлений такими поняттями: Адреса – величина, що визначає розміщення даних. Адреса команди – адреса пам’яті, зайнятої командою. Поле – ділянка носія інформації, або пам’яті, яка використовується для особливого класу елементів даних. Символьний рядок – рядок, який містить виключно символи. 4. Системне наповнення. До системного наповнення програми відносимо ресурси операційної системи Windows 9X-XP, транслятор Assembler. 5. Послідовність створення програми. Кодування здійснюється згідно з таким лістингом: data segment ; початок сегменту даних (; позначає опис-коментар) ;----------- резервуємо п’ять рядків напису для подальшого виведення str0 db 'Програма для функцій введення-виведення',13, 10,'$' str1 db 'Функція 01h (одночасне виведення на екран символу з клавіатури)- символ-$' str2 db 'Функція 07h (введення з клавіатури через регістр AL без виведення на екран)',13,10, '$' ; запис повинен бути в один рядок без перенесення str3 db 'Функція 02h (виведення на екран символу з регістра AL) - символ - $' str4 db 'Функція 0Ah (одночасне введення-виведення через буфер 10-ти символів)-$' ;----------- резервуємо порожній рядок за рахунок кодів 13 (введення каретки) ;та 10 (перехід на початок рядка) ent db 13,10,'$' ; резервуємо коди для переведення курсора на новий рядок ;----------------- початок структури буфера max db 10 ;максимальна кількість символів len db ? ;резервний байт bufer db 11 dup (?) ;буфер для розміщення кодів символів db ? ;байт для розміщення знаку $ ;----------------- кінець структури буфера data ends ;кінець сегмента даних code segment ; початок сегмента коду (коментар) assume cs:code, ds:data ;директива assume повідомляє значення ;сегментних регістрів begin: ; мітка початку виконавчого коду mov ax, data ; налаштовуємо регістр даних, вміщуємо адресу сегменту mov ds, ax ;даних до регістру AX. ; -------------- конструктори функції 09h. lea dx,ent ;вказуємо зміщення на рядок - зарезервоване поле ent. mov ah,09h ;функцію виведення рядка на екран 09h вміщуємо до ah. int 21h ;виконується переривання DOS. lea dx,str0 ;вказуємо зміщення на зарезервований рядок str0. mov ah,09h ;функцію виведення рядка на екран 09h вміщуємо до ah. int 21h ;виконується переривання DOS. lea dx,str1 mov ah,09h ;виведення рядка str1. int 21h ; ----------------конструктор функції 01h mov ah,01h ;функцію одночасного виведення на екран символу з клавіатури ;поміщаємо до ah int 21h ;виконується переривання DOS ; ----------------конструктори функції 09h lea dx, ent mov ah,09h ;виведення порожнього рядка int 21h lea dx,str2 mov ah,09h ;виведення рядка str2 int 21h lea dx,str3 mov ah,09h ;виведення рядка str3 int 21h ; ----------------конструктор функції 07h mov ah,07h ;функція введення з клавіатури без виведення на екран ;код символу заноситься до регістра AL int 21h ; --------------конструктор функції 02h mov dl,al ;код символу переміщається до регістра DL mov ah,02h ;функція виведення на екран символу int 21h ;виконується переривання DOS ; --------------конструктори функції 09h lea dx,ent ;виведення порожнього рядка mov ah,09h int 21h lea dx,str4 mov ah,09h ;виведення рядка int 21h ; ------------------конструктор функції 0Ah mov ah,0ah ;функція введення-виведення через буфер символів lea dx, max ;вказуємо зміщення на структуру буфера int 21h mov bl, len ;формування адреси у регістрі BX mov bh,0 mov [bx+bufer+1],'$' ;додавання знака $ у кінець буферу шляхом ; непрямої адресації пам’яті ; ------------------конструктор функції 4Ch mov ah, 4ch ;функція завершення програми з виходом у DOS int 21h code ends ;кінець сегмента коду end begin ;кінець коду програми 6. Реалізація програми. Вікно виконаної програми наведене на рис.1. Рис.1. Програма практичного завдання 2 після виконання
7. Дооформіть свою практичну роботу і здайте її на перевірку, зробивши висновок. Варіанти виконання практичної роботи:
|