Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LABA06_2012.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
442 Кб
Скачать
☆

Вивід на екран.

1. Використання групи функцій переривання DOS INT 21H, при цьому номер функції цього переривання вказується в регістрі AH:

AH=02: Вивід символу. Для виводу символу на екран в поточну позицію курсору необхідно помістити ASCII код даного символу в pегістр DL. Коди табуляції, повернення каретки й кінця рядка діють звичайним чином.

AH=09 Вивід на екран рядка в базовій версії DOS.

Використання даної функції вимагає визначення текстового повідомлення в області даних, установки в регістрі AH значення 09 (виклик функциии DOS) і виклику переривання INT 21H. У процесі виконання операції кінець повідомлення визначається за ознакою закінчення рядка($).

2. Звертання до пристрою виводу(монітору), як до файлу.

Це здійснюється шляхом використання функцій 40h переривання 21h

При цьому у регістр CX заноситься кількість байт для виводу, а в регістр DX - адреса області виводу. У результаті успішного виконання операції виводу очищається прапорець переносу (CF) і в регістр AX встановлюється кількість виведених символів. При неуспішній операції встановлюється прапорець CF, а код помилки (в даному випадку 6) заноситься в регістр AX. Оскільки регістр AX може містити як довжину даних, так і код помилки, то єдиний спосіб визначити наявність помилки – перевірити прапорець CF.

Процедура підготовки даних до виводу на екран

Як видно з попереднього опису функцій друку на екран, єдино можливими даними для виводу є ASCII коди. Тому отримані в результаті обчислень шістнадцяткові значення слід перетворити у відповідні їм ASCII – коди, а вже потім застосувати одну з функцій 21h переривання. Очевидно, що для виводу шістнадцяткових значень будуть використані цифри від 0 до 9 та латинські букви A, B, C, D, E, F (або a,b,c,d,e,f). Відомо, що ASCII коди цих символів становлять:

цифра

ASCII-код

десяткова

ASCII-код

шістнадцяткова

0

48

30

1

49

31

2

50

32

3

51

33

4

52

34

5

53

35

6

54

36

7

55

37

8

56

38

9

57

39

символ

ASCII-код

десяткова

ASCII-код

шістнадцяткова

A

65

41

B

66

42

C

67

43

D

68

44

E

69

45

F

70

46

символ

ASCII-код

десяткова

ASCII-код

шістнадцяткова

a

97

61

b

98

62

c

99

63

d

100

64

e

101

65

f

102

66

Отже:

щоб отримати ASCII - код цифри слід до її значення додати 30h (або 48d);

щоб отримати ASCII - код великої латинської літери до значення треба додати 37h (або 55d) (наприклад, для шістнадцяткового значення Сh, код повинен становити 43h, тобто Сh+37h, або в десятковому еквіваленті 12+55=67);

щоб отримати ASCII - код малої латинської літери до значення треба додати 57h або 87d. (наприклад, для шістнадцяткового значення Dh, код малої літери повинен становити 64h, тобто Dh+57h, або в десятковому еквіваленті 13+87=100).

При виводі на екран необхідно врахувати те, що в одному байті знаходиться дві шістнадцяткові цифри (або букви), тоді як для формування ASCII кодів використовується лише одна, тобто слід виділити спочатку старшу цифру а далі – молодшу (щоб відображення відповідало значенню). Для того щоб виділити старшу цифру в байті треба обнулити чотири молодші двійкові розряди (попередньо зберігши весь байт) а потім зсунути чотири старші на місце молодших. Далі, щоб виділити молодшу цифру, слід обнулити старші розряди. Якщо байт даних знаходиться в регістрі AL, то відповідні команди Асемблера будуть:

mov ah,al

and ah,0F0h

shr ah,4

and al,0Fh

тепер в регістрі AH знаходиться старша, а в регістрі AL – молодша цифра значення.

Крім того, значення може міститися у двох, трьох і більше байтах. В такому випадку перевід треба починати з найстаршого байту (оскільки саме він буде виводитися першим) і зчитувати дані з пам’яті зменшуючи лічильник байтів. Якщо значення, яке буде виводитися розміщене в пам’яті не по одному байту, то слід використати оператор приведення типу PTR. Наприклад якщо в сегменті даних міститься директива A dw 2356h, то команда MOV AL, BYTE PTR A дозволить занести в однобайтний регістр AL значення 56h, а MOV AH, BYTE PTR A+1 занесе в регістр AH значення 23h

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]