Функції DOS виводу даних на екран

DOS надає наступні способи виводу даних на екран:

- використання функцій Int 21h (02h, 06h, 09h), що забезпечують посимвольний ввід з клавіатури в різних режимах;

- звертання до екрана, як до файла, за допомогою функції 40h.

· Функція 02h. Виведення одиничного символа.

Виводить символ, що знаходиться в регістрі DL, на екран. Для виводу стрічки функцію потрібно використати в циклі. Допускає перенаправлення виводу. Виконує обробку < Ctrl/С > при введенні цієї комбінації з клавіатури перед виводом кожного 64-го символа. Ця функція виводить і керуючі ASCII - символи з кодами 7, 8, 9, 0Ah, 0Dh. Символ з кодом 7 (bell, дзвінок) викликає звуковий сигнал, з кодом 8 (backspace)- повертає курсор на одну позицію ліворуч, з кодом 9 (tab, табуляція) - зміщає курсор на одну позицію праворуч, кратну 8. Дії керуючих клавіш з кодами 0Ah і 0Dh розглядалися раніше.

Виклик:AH=02h, Int 21h

Ввід:DL= ASCII -код символа

Вивід: AL= код останнього записаного символа (крім випадку, коли DL=09, тоді повертається значення 20h)

 

Використання даної функції розглянемо на прикладі процедури переходу на нову стрічку.

PROC NewLine  
  push ax  
  push dx  
  mov ah, 2 ;Запит функції 02h
  mov dl, 13 ;Повернення каретки
  int 21h ;Виклик DOS
  mov dl, 10 ;перевід стрічки
  int 21h ;Другий виклик DOS
  pop dx  
  pop ax  
  ret  
ENDP NewLine  

 

· Функція 09h. Вивід стрічки.

Виводить рядок символів на пристрій стандартного виводу (використовується в системних програмах для виведення на екран інформаційних повідомлень). Рядок повинен закінчуватися символом $ (код 24h), який служить ознакою кінця рядка, і сам не виводиться. Допускає перенаправлення виводу. У повідомлення можуть бути включені і керуючі коди (7, 8, 9, 0Ah, 0Dh), які викликають відповідні їм дії (див. функцію 02h). Функція виконує обробку < Ctrl/С > при введенні цієї комбінації з клавіатури перед виводом кожного 64-го символа.

Приклад використання.

Promt DB 'Name? $'
  lea dx, [Promt] ;Адреса рядка Promt: DS:DX
  mov ah, 09h ;Запит функції 09h
  int 21h ;Виклик DOS

 

Функція 40h. Вивід даних в файл або в пристрій.

Універсальна функція виводу даних з буфера користувача в сегменті даних в файл або на пристрій, дескриптор якого вказується в регістрі BX. Дескриптор 1, закріплений за стандартним пристроєм виводу, забезпечує перенаправлення виводу. Значення регістра CX визначає число байтів, які повинні бути виведені, а пара регістрів DS:DX вказує адресу даних, що виводяться. Керуючі коди 08h, 0Ah, 0Dh і деякі інші приводять до виконання відповідних їм дій. Після завершення виводу при CF=0 регістр AX містить число дійсно виведених байтів, а при CF=1 -поворотний код помилки. Як і при використанні функції 3Fh, це коди помилок 5 або 6. Приклад використання.

Out_Area DB 20 DUP(?)
  mov ah, 40h ;Запит функції 40h
  mov bx, 01 ;Дескриптор дисплея
  mov cx, 20 ;Число байт, що пересилаються
  lea dx, [Out_Area] ;Адреса буфера для повідомлення
  int 21h ;Виклик DOS
  mov cx, ax  
  sub cx, 2  

 

ЛАБОРАТОРНЕ ЗАВДАННЯ

1. Ознайомитись із змістом матеріалу роботи і відповідними тематичними розділами в літературі, що рекомендується. Отримати виконуваний EXE файл програми Demon.asm (Додаток A) і виконати дії з операторами перенаправлення вводу-виводу, а саме:

o Demon1.exe > File1.txt

o Demon1.exe < File2.txt

Файл File2.txt, що включає рядок символів, заздалегідь створити за допомогою будь-якого редактора.

2. Введення з клавіатури на екран довільний тексту з одночасним записом в буфер. Реалізувати елементи редагування: стирання останніх символів клавішею" ", контроль над великою буквою першого слова нового речення. При помилці мала буква замінюється прописною. Перехід на новий рядок здійснюється кл <Enter>. Управління: <F1>- виведення відредагованого тексту з буфера, <F10>- вихід з програми.

3. Демонстрація основної програми з можливим використанням операторів пере направлення

Текст програми


7.1) Що таке тупиковий стан? Перерахуєте умови, при яких виникає тупик.

 

Тупиковий стан - в широкому розумінні, зависанням є такий стан системи, в якому вона не може продовжувати роботу далі. В системах без часу, зависанням є стан системи, в якому вона не може виконати жодну дію. Однак, в автоматах з часом, переходи відповідають як плину часу, так і виконанню дій.

Тупиковий стан (зависання) - причинами зависання є помилки в програмуванні, частіше всього неправильне завершення циклів чи, в багатозадачних ОС, взаємне блокування процесів або неправильне використання пам'яті програмами, а також помилки в драйверах. Крім того, зависання може виникнути в результаті апаратного збою технічних засобів комп'ютера (наприклад, перегрів, пошкоджена оперативна пам'ять).

 

8.3) Що робить системний виклик fork()? Яким чином здійснюється в UNIX запуск нової задачі?

 

У Unix-системах, fork () - системний виклик, що створює новий процес (нащадок), який є майже точною копією процесу-батька, що виконує цей виклик. Між процесом-нащадком і процесом-батьком існують відмінності:

· PID процесу-нащадка відмінний від PID процесу-батька;

· значенням PPID процесу-нащадка присвоюється значення PID процесу-батька;

· Процес-нащадок отримує власну таблицю файлових дескрипторів, що є копією таблиці процесу-батька на момент виклику fork (). Це означає, що відкриті файли успадковуються, але якщо процес-нащадок, наприклад, закриє якийсь файл, то це не вплине на таблицю дескрипторів процесу-батька.

· для процесу-нащадка очищаються вcе очікують доставки сигнали;

· тимчасова статистика виконання процесу-нащадка в таблицях ОС обнуляється;

· блокування пам'яті і запису, встановлені в процесі-батьку, не успадковуються.

 

Після виклику fork () алгоритм зазвичай розгалужується (у разі успішного виконання функції fork () вона повертає PID процесу-нащадка батьківському процесу і нуль процесу-нащадку. Якщо породження процесу-нащадка закінчилося невдачею, функція fork () повертає значення -1).

 

Після fork () процес-нащадок найчастіше виконує системний виклик exec (), що завантажує в простір процесу нову програму (саме так, і тільки так, в Unix-системі виконується запуск програми в окремому процесі). Так, перший (нульовий) процес Unix (ядро системи) створює свою копію, щоб запустити init (процес з PID = 1), який в свою чергу створює дочірні процеси для запуску ініціалізації системи та терміналів.

 

Деякі програми створюють дочірні процеси не для запуску іншої програми, а для виконання паралельної завдання. Так, наприклад, надходять прості мережеві сервери - при приєднанні клієнта, сервер створює свою копію (дочірній процес), яка обслуговує клієнтське з'єднання і завершується за його закриття. Батьківський же процес продовжує очікувати нових сполук.

 

Виклик fork () виконується досить довго, тому що вимагає копіювання великої кількості даних. Для того щоб це обійти, деякі мережеві сервери (наприклад, веб-сервери Apache і Lighttpd), створюють дочірні процеси заздалегідь, щоб зменшити час відгуку сервера. Також існують «полегшені» реалізації fork (), що відображають в новий процес сторінки пам'яті батьківського, замість того щоб їх копіювати (нова сторінка створюється тільки при зміні її вмісту одним з процесів), що істотно знижує час створення нового процесу (т. зв. Copy -on-write).

 



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: