Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Тема: Виведення символьної стрічки на екран за допомогою мови Asembler




Мета: навчитися (згадати) методи програмування в мові Асемблер, застосовуючи команди вводу-виводу та відповідні регістри і функції.

Теоретичні відомості викладені в розділі 2 методичного посібника з системного програмування для самостійних робіт.

Хід роботи:

1. Розробити програму для введення - виведення стрічкових написів на екран монітора, застосовуючи різні функції операційної системи (DOS).

2. Формуємо функціональне наповнення.

Найбільш поширеними діями у будь-яких прикладних програмах є операції введення – виведення. Мовою Assembler, окрім виклику функції самої операції, необхідно здійснити ряд додаткових дій, наприклад перевірити готовність відповідного пристрою. У зв'язку з цим, для типових пристроїв розроблені стандартні програми організації введення - виведення, які викликаються разом із функціями переривання, що звертаються до операційної системи INT 21h.

Перелік основних функцій DOS для реалізації підпрограмам введення–виведення наведені у таблиці нижче. Код будь-якої функції завжди повинен передаватися у підпрограму через старший байт AHрегістра AX.

Код функції Функція
01h Введення з клавіатури та виведення на монітор одного символу (переривання функції Ctrl-Break)
02h Виведення одного символу на екран дисплея з регістра DL (переривання функції Ctrl-Break)
07h Введення в регістр AL (без переривання функції Ctrl-Break, з очікуванням)
09h Виведення рядка на екран (DS:DX - адреса рядка, який повинен завершуватися символом "$")
0Ah Введення рядка до буфера з виведенням на монітор (DS:DX - адреса буфера, перший байт якого повинен містити розмір символів буфера, далі резервний байт та поле буфера)

 

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. Дооформіть свою практичну роботу і здайте її на перевірку, зробивши висновок.

Варіанти виконання практичної роботи:

 

Варіант Набір символів Варіант Набір символів
1. qwaszxcvdf 16. vbasdpofgh
2. qwertyuiop 17. qawszxderf
3. poiuytrewq 18. lopkmjyhtv
4. trewqpoiuy 19. egauehgfdl
5. opiutyreqw 20. dfvghbjkma
6. wqopiuerty 21. bgtyhnmkop
7. asdfghjklq 22. xswedcvfrq
8. lkjhgfdsap 23. mjnhbgvfcdx
9. asdlkjhgfe 24. zsxdcfvgbh
10. dfasghklji 25. cvdbngmhxa
11. hjkgfdlsaw 26. czxbmnfvgp
12. kjlhfgdasr 27. cbnxmzvfgq
13. hjdkhgasdl 28. xzmncvbgwo
14. kalshdjfgt 29. zxcmnbfgvy
15. mnbvcxzert 30. ercvtybvnu

 


Поделиться:

Дата добавления: 2015-08-05; просмотров: 210; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты