При выполнении лабораторной работы рекомендуется использовать функции DOS, приведенные в таблице 6.1.
Таблица 6.1. Функции DOS (прерывание int 21h)
Назначение | Номер функции | Вход | Выход |
Ввод символа с ожиданием и эхосопровожде-нием (отображением на экране) | ah=01h | al=ASCII-код символа | |
Вывод символа | ah=02h | dl=ASCII-код символа | |
Ввод символа с ожиданием и без эхосопровожде-ния | ah=07h ah=08h | dl=ASCII-код символа | al=ASCII-код символа (функция 08h при вводе проверяет, не нажато ли CRTL-BREAK) |
Вывод строки на экран | ah=09h | ds:dx=адрес строки с символом «$» на конце | |
Ввод строки с клавиатуры | ah=0ah | ds:dx=адрес буфера для ввода; первый байт буфера – количество запрашиваемых символов (задается пользователем); второй байт – реально введенное количество символов (выдается машиной); третий и последующие байты – коды символов введенные с клавиатуры | Введенная строка в буфере по адрес ds:dx и количество реально введенных символов в регистре dl |
Проверка состояния буфера клавиатуры | ah=0bh | al=0 – буфер пуст al=0ffh – в буфере есть символы |
Пример использования прерывания int 21h.
Задание: требуется вывести на экран код символа, содержащийся в переменной sum, размерность которой составляет 1 байт.
Решение:
mov dl, sum
mov ah, 02h
int 21h
Результат: на экране появиться символ, ASCII-код которого содержится в переменной sum.
Замечание: При выводе на экран содержимого любой переменной, либо ячейки памяти, либо регистра, требуется произвести посимвольный вывод. считая, что любое число состоит из набора следующих друг за другом шестнадцатеричных цифр, требуется произвести преобразование каждой цифры в ее эквивалентный код и затем переслать данный код в устройство ввода-вывода. Для этого к шестнадцатеричной цифре, представленной десятичной цифрой надо прибавить число 30h, а к шестнадцатеричной цифре, представленной литералом добавить число 37h. В таблице 6.2 приведен набор ASCII-кодов для символов, используемых при работе с экраном и клавиатурой.
Далее приведен пример вывода на экран содержимого переменной sum. В данном случае переменная sum равна b3.
Пример:
.data
sum db 0b3h
.code
prog:
mov ax, @data
mov ds, ax
mov al, sum
and al,0f0h
ror al, 4
add al, 37h
mov dl, al
mov ah, 02h
int 21h
mov al, sum
and al,0fh
add al, 30h
mov dl, al
mov ah,02h
int 21h
mov ax, 4c00h
int 21h
end prog
В итоге выполнения, приведенного выше кода, на экране появятся два символа «B» и «3».
Код данной программы является очень избыточным и недопустим при выполнении лабораторных работ. В данной программе можно заметить двукратное повторение группы операторов, которые могут быть использованы единожды при циклической организации программы. Это позволило бы сократить программный код, а также сделать представленную выше программу более практичной.
Задание на лабораторную работу:
1. Вывести на экран монитора в режиме эмуляции DOS содержимого двух регистров в соответствии с вариантом задания (таблица 6.3).
Таблица 6.3.
Вариант | Регистры | Вариант | Регистры | Вариант | Регистры |
1 | ax, bl | 11 | sp, bh | 21 | bp, dh |
2 | dx, ah | 12 | di, bh | 22 | si, bx |
3 | cx, bh | 13 | cx, bp | 23 | di, al |
4 | bx, cl | 14 | ax, dh | 24 | sp, si |
5 | di, dh | 15 | si, al | 25 | cx, dl |
6 | bx, al | 16 | sp, ax | 26 | ax, bh |
7 | dx, si | 17 | bx, si | 27 | si, cl |
8 | cx, ax | 18 | bx, dh | 28 | di, ch |
9 | sp, bp | 19 | cx, al | 29 | bx, dl |
10 | bp, al | 20 | ax, bp | 30 | sp, dx |
Если при выводе значение регистра равно нулевому значению, то предусмотреть в коде программы (без ввода с клавиатуры) возможность записи в данный регистр произвольного значения.
Таблица 6.2.
Набор ASCII-кодов символов
Дес Шест Симв
000 00h Нуль
001 01h Начало заголовка
002 02h Начало текста
003 03h Конец текста
004 04h Конец передачи
005 05h КТМ
006 06h Да
007 07h Звонок
008 08h Возврат на шаг
009 09h Гориз. табуляция
010 0Ah Перевод строки
011 0Bh Верт. табуляция
012 0Ch Перевод стр-цы
013 0Dh Возврат каретки
014 0Eh Shift out
015 0Fh Shift in
016 10h Data line esc
017 11h Управление 1
018 12h Управление 2
019 13h Управление 3
020 14h Управление 4
021 15h Нет
022 16h Синхронизация
023 17h Конец блока
024 18h Анулирование
025 19h End of medium
026 1Ah Замена
027 1Bh Escape
028 1Ch Раздел. файла
029 1Dh Раздел. группы
030 1Eh Раздел. записи
031 1Fh Раздел. единицы
032 20h sp
033 21h!
034 22h "
035 23h #
036 24h $
037 25h %
038 26h &
039 27h '
040 28h (
041 29h )
042 2Ah *
043 2Bh +
Дес Шест Симв
044 2Ch,
045 2Dh -
046 2Eh.
047 2Fh /
048 30h 0
049 31h 1
050 32h 2
051 33h 3
052 34h 4
053 35h 5
054 36h 6
055 37h 7
056 38h 8
057 39h 9
058 3Ah :
059 3Bh ;
060 3Ch <
061 3Dh =
063 3Fh?
062 3Eh >
064 40h @
065 41h A
066 42h B
067 43h C
068 44h D
069 45h E
070 46h F
071 47h G
072 48h H
073 49h I
074 4Ah J
075 4Bh K
076 4Ch L
077 4Dh M
078 4Eh N
079 4Fh O
080 50h P
081 51h Q
082 52h R
083 53h S
084 54h T
085 55h U
Дес Шест Симв
086 56h V
087 57h W
088 58h X
089 59h Y
090 5Ah Z
095 5Fh _
092 5Ch \
093 5Dh ]
094 5Eh ^
091 5Bh [
096 60h `
097 61h a
098 62h b
099 63h c
100 64h d
101 65h e
102 66h f
103 67h g
104 68h h
105 69h i
106 6Ah j
107 6Bh k
108 6Ch l
109 6Dh m
110 6Eh n
111 6Fh o
112 70h p
113 71h q
114 72h r
115 73h s
116 74h t
117 75h u
119 77h w
118 76h v
120 78h x
121 79h y
122 7Ah z
123 7Bh {
125 7Dh }
124 7Ch |
126 7Eh ~
127 7Fh Забой
2. Задать в программе как минимум четыре переменные, две из которых будет однобайтные и две двухбайтные (таблица 6.4).
Таблица 6.4
Вар-т | 1 байт | 2 байта | Вар-т | 1 байт | 2 байта | Вар-т | 1 байт | 2 байта |
1 | a, b, | c, d | 11 | a, b, | c, d | 21 | a, b, | c, d |
2 | a, c | b, d | 12 | a, c | b, d | 22 | a, c | b, d |
3 | a, d | b, c | 13 | a, d | b, c | 23 | a, d | b, c |
4 | b, c | a, d | 14 | b, c | a, d | 24 | b, c | a, d |
5 | b, d | a, c | 15 | b, d | a, c | 25 | b, d | a, c |
6 | c, d | a, b | 16 | c, d | a, b | 26 | c, d | a, b |
7 | a, b, | c, d | 17 | a, b, | c, d | 27 | a, b, | c, d |
8 | a, c | b, d | 18 | a, c | b, d | 28 | a, c | b, d |
9 | a, d | b, c | 19 | a, d | b, c | 29 | a, d | b, c |
10 | b, c | a, d | 20 | b, c | a, d | 30 | b, c | a, d |
Разработать программу выполнения элементарных операций над заданными тремя числами в соответствии с вариантом задания (таблица 6.5.).
Таблица 6.5.
Вар-т | Регистры | Вар-т | Регистры | Вар-т | Регистры |
1 | (a+b)Ù(c-d) | 11 | (a+b)-(cÅd) | 21 | (aÚc)Ù(aÅbÅd) |
2 | (aÚc)-(bÅd) | 12 | (aÅb)-(dÅc) | 22 | ((a+b)Å(c+d)) Úa |
3 | (a-c)Ú(bÅd) | 13 | (aÙbÚc)Åd | 23 | (aÚbÚc)Å(c+d) |
4 | aÅbÚ(c-d) | 14 | (a+b+c)Úd | 24 | (aÅd)+(cÅ(-b)) |
5 | a+b-(cÅd) | 15 | (a-b-c)Úd | 25 | aÅbÅcÅd |
6 | (aÚb)+(cÚd)Åa | 16 | (aÚc)+(bÚd) | 26 | (a+b-d)Ú(c+d) |
7 | (a+b)Å(c-a-d) | 17 | (a+c)Ú(bÅd) | 27 | (aÚcÚd)Ù(a+b) |
8 | aÅbÅ(c+a+d) | 18 | (aÚb)+(dÙc) | 28 | (aÅd)+(cÅd)-b |
9 | (a-b)Å(cÅd)-a | 19 | (a+b+c)Åd | 29 | (a-b)Å(a-c)Å(a-d) |
10 | (a-b)Å(dÚc) | 20 | (a-c)Åb-(bÚd) | 30 | ((a+b)-(bÚd))Åa |
В таблице приняты следующие обозначения:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 |


