При выполнении лабораторной работы рекомендуется использовать функции 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