Описание алгоритмов вывода чисел
Вывод числа в 2 с/с
1. Занесите число для вывода в регистр(например в bl).
2. Выполните сдвиг на один разряд влево через флаг переноса
3. Обнулите вспомогательный регистр (например dl).
4. выполните сдвиг dl на один разряд влево так , чтобы содержимое флага переноса попало в младший бит регистра dl.
5. прибавьте к регистру dl константу 30h для преобразования числа в ASCII-код символа данного числа и выведите на экран полученный символ.
6. Выполните шаги 2-5 восемь раз для вывода всего байта.
Схема выполнения сдвигов:
Вывод числа в 16 с/с
1. Занесите число для вывода в регистр ( например в bl).
2. Сдвиньте bl на 4-ре разряда вправо так, чтобы старшие разряды стали нулевыми.
3. Сравните получившееся число с цифрой 9 и если оно меньше ли равно, то прибавьте к данному числу константу 30h ( для получения ASCII-кодов цифр 0-9 ).
4. Снова занесите исходное число в регистр bl.
5. Обнулите старшие 4-ре разряда и повторите пункт 3.
Задание
а) Выполните преобразование чисел из 2 с/с в 16 с/с, 10 с/с (ПК без знака), 10 с/с (ПК со знаком) и 10 с/с (ДК) в соответствии с вариантом 3.
Преобразовать число из 2 с/с в 16 с/с.
1) 0011 00102 →3 216
2) 1010 00112 →A 316
3) 0101 01012 →5 516
4) 1011 10002 →B 816
5) 0111 00102 →7 216
6) 1001 10102 →9 A16
Преобразовать число из 2 с/с в 10 с/с (ПК без знака)
1) 0011 00102 →32+16+2=5010
2) 1010 00112 →128+32+2+1=16310
3) 0101 01012 →64+16+4+1=8510
4) 1011 10002 →128+32+16+8=18410
5) 0111 00102 →64+32+16+2=11410
6) 1001 10102 →128+16+8+2=15410
|
|
Преобразовать число из 2 с/с в 10 с/с (ПК со знаком)
1) 0011 00102 →32+16+2=+5010
2) 1010 00112 →32+2+1=-3510
3) 0101 01012 →64+16+4+1=+8510
4) 1011 10002 →32+16+8=-5610
5) 0111 00102 →64+32+16+2=+12410
6) 1001 10102 →16+8+2=-26
Преобразовать число из 2 с/с в 10 с/с (ДК)
1) 0011 00102 →32+16+2=+5010
2) 1010 00112 → 11011101= 64+16+8+4+1=-93
3) 0101 01012 →64+16+4+1=+8510
4) 1011 10002 → 11001000= 64+8=-72
5) 0111 00102 →64+32+16+2=+12410
6) 1001 10102 → 11100110= 64+32+4+2=-102
б) Написать программу, которая выполняет вывод ASCII кода нажатой клавиши в 2 с/с и 16 с/с. Завершение программы должно происходить по нажатию клавиши Num Lock
Продолжение блок - схемы
Рисунок 1.1 – Блок схема основной программы
Основная программа
Stac segment
db 64 dup (0)
ends
data segment
Msg db 13,10,''
System16 db 13,10,'16 б/б=$'
System2 db 13,10,'2 б/б=$'
Pystaya db 13,10,'$'
stQ db 13,10,''
ends
code segment
assume ds:data, cs:code, ss:stac
Start:
mov ax, data
mov ds, ax
mov es, ax
;--------------------------------------------
c:; Вывод строки 'Нажмите любую клавишу...'
mov ah, 09h
lea dx , Msg
int 21h
;Вывод ASCII код нажатой клавиши
mov ah, 01h
int 21h
mov cx, 8; Занесение в CX кол-ва циклов
mov bl, al; Сохранение AL в BL
mov bh, al;Сохранение Al в BH
;Вывод строки э2 с/с='
mov ah, 09h
lea dx, System2
int 21h
m1: sal bl, 1; Сдвиг BL на 1 разряд
mov dl, 0;Обнуление DL
rcl dl, 1;Сдвиг dl на 1 разряд
add dl, 30h; DL=DL+30
;Вывод DL
mov ah, 02h
int 21h
loop m1
;Вывод строки '16 c/c='
mov ah, 09h
lea dx, System16
int 21h
|
|
mov bl, bh; Загрузка исходного AL
mov cx, 4
sar bl, cl;Сдвиг BL c 9
cmp bl, 9 ; Сравнение BL c 9
jle m2 ;Переход на m2 если <или=
add bl, 37h; BL=BL+37
jmp m3; Переход на m3
m2: add bl, 30h;BL=BL+30
;Вывод m3
m3: mov ah, 02h
mov dl, bl
int 21h
mov bl, bh; Загрузка исходного AL
and bl, 0Fh;Обнуление первых 4 разрядов
cmp bl, 9;Сравнение bl c 9
jle m4 ; Переход на m4 если <или=
add bl, 37h; BL=BL+37
jmp m6 ; Переход на m6
M4: add bl, 30h; BL=BL+30
;Вывод BL
M6: mov ah, 02h
mov dl, bl
int 21h
mov ah, 09h
lea dx, stQ
int 21h
mov ah, 02h
int 16h
and al,10000000b
jz d
mov ax, 4c00h
int 21h
d: jmp c
ends
END Start
Рисунок 1.2 – Результат работы программы
ГЕНЕРАЦИЯ ЗВУКОВЫХ СИГНАЛОВ В ПЭВМ
Для генерации звука в ПЭВМ используется программируемый таймер и программируемый параллельный интерфейс. Поэтому кратко рассмотрим использование данных микросхем в ПЭВМ.
Таймер КР1810ВИ54
Для задания временных интервалов и формирования сигналов с различными временными параметрами в IBM PC применяется программируемый таймер i8254 (отечественный аналог КР1810ВИ54) рисунок 2.1.
Рисунок 2.1 – Условно графическое обозначение таймера КР1810ВИ54
Таймер содержит три независимых канала, каждый из которого можно запрограммировать на работу в одном из шести режимов. Программирование канала осуществляется путём ввода управляющих слов в регистр режима канала и начального значения в его счётчики. Каждый канал имеет управляющий вход GATE и выход OUT и может работать в одном из следующих шести режимов, Которые условно можно разделить на три группы: Программируемый одновибратор (режимы 0 и 1), делитель частоты (режимы 2 и 3) , счётчик событий (режимы 4 и 5). При этом режимы 0, 4 – это режимы автозагрузки, т.е. после окончания выполнения функция без перепрограммирования по фронту сигнала GATE. Режимы 2, 3 – это режимы авто загрузки, т.е. после окончания выполнения функция без перепрограммирования начинает выполняться заново.
|
|
Режим 0 – прерывание терминального счёта.
Режим 1 – ждущий мультивибратор.
Режим 2 – генератор частоты.
Режим 3 – генератор меандра.
Режим 3 – счётчик событий.
Режим 5 – счётчик событий с автозагрузкой.
Для работы таймера его нужно запрограммировать на необходимый вид работы и загрузить в него константу счётчика. В IBM PC таймер имеет следующие программируемые порты:
Таблица 2.1 – Программируемые порты
Адрес | Операция | Назначение |
40h | запись чтение | Загрузка счётчика канала 0 Чтение счётчика канала 0 |
41h | запись чтение | Загрузка счётчика канала 1 Чтение счётчика канала 1 |
42h | запись чтение | Загрузка счётчика канала 2 Чтение счётчика канала 2 |
43h | запись | Запись управляющего слова в регистр режима канала |
|
|
Для задания режима работы таймера нужно записать в порт 43h константу в соответствии с форматом управляющего слова (рисунок 2.2). А затем в порт 40h, 41h или 42h, в зависимости от программирующего канала, записать константу счётчика (для генерации звука данная константа задаёт частоту звука).
Рисунок 2.2 – Формат управляющего слова
Канал таймера имеет следующее назначение в IBM PC.
Таблица 2.2 – Назначение каналов таймера
Канал | Назначение | Режим |
0 | Системные часы (IRQ0) | Режим 3, счётчик=0 (65536) |
1 | Запрос для канала 0 ПДП (регенерация памяти) | Режим 2, счётчик=18 |
2 | Генератор звука | - |
Для генерации звука в IBM PC используется канал 2, который программируется на режим 3, временная диаграмма которого показана на рисунке 2.3.
Рисунок 2.3 – Временная диаграмма работы таймера в режиме 3
Тактовая частота каждого канала равна 1,19318 МГц, т.е. каждый такт имеет длительность 0,84 мсек. Вход GATE каналов 0 и 1 всегда имеют высокий уровень, поэтому счёт на этих каналах разрешён всегда. Вход GATE канала 2 управляется битом 0 порта РВ интерфейса i8255 связанного с портом 61h.
При начальной загрузке BIOS инициализирует канал 0 для работы в режиме 3 со счётчиком 0( т.е. 65536 декрементов на цикл счёта). Поэтому частота системных часов равна 1,19 Мгц/65536= 18.2 Гц и прерывание IRQ0, связанное с вектором Int 8, происходит 18,2 раз в секунду, т.е. каждые 55 мсек увеличивается на единицу значение системных часов.
Канал 1 работает в режиме 2 со счётчиком 18, поэтому регенерация памяти происходит каждые 18 мсек. Перепрограммировать канал 0 и канал 1 нельзя, т.к. это приведёт к нарушению целостности данных в ОЗУ.
Дата добавления: 2020-01-07; просмотров: 168; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!