6. Выполните шаги 2-5 восемь раз для вывода всего байта.
Схема выполнения сдвигов:
Вывод числа в 16 с/с
1. Занесите число для вывода в регистр ( например в bl).
2. Сдвиньте bl на 4-ре разряда вправо так, чтобы старшие разряды стали нулевыми.
3. Сравните получившееся число с цифрой 9 и если оно меньше ли равно, то прибавьте к данному числу константу 30h ( для получения ASCII-кодов цифр 0-9 ).
4. Снова занесите исходное число в регистр bl.
5. Обнулите старшие 4-ре разряда и повторите пункт 3.
1.5 Задание
а) Выполните преобразование чисел из 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 с/с. Завершение программы должно происходить по нажатию клавиши NumLock
Продолжение блок - схемы
Рисунок 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 – Результат работы программы
2 ГЕНЕРАЦИЯ ЗВУКОВЫХ СИГНАЛОВ В ПЭВМ
Для генерации звука в ПЭВМ используется программируемый таймер и программируемый параллельный интерфейс. Поэтому кратко рассмотрим использование данных микросхем в ПЭВМ.
2.1 Таймер КР1810ВИ54
Для задания временных интервалов и формирования сигналов с различными временными параметрами в IBMPC применяется программируемый таймер 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 – счётчик событий с автозагрузкой.
Для работы таймера его нужно запрограммировать на необходимый вид работы и загрузить в него константу счётчика. В IBMPC таймер имеет следующие программируемые порты:
Таблица 2.1 – Программируемые порты
Адрес | Операция | Назначение |
40h | записьчтение | Загрузка счётчика канала 0Чтение счётчика канала 0 |
41h | записьчтение | Загрузка счётчика канала 1Чтение счётчика канала 1 |
42h | записьчтение | Загрузка счётчика канала 2Чтение счётчика канала 2 |
43h | запись | Запись управляющего слова в регистр режима канала |
Для задания режима работы таймера нужно записать в порт 43h константу в соответствии с форматом управляющего слова (рисунок 2.2). А затем в порт 40h, 41h или 42h, в зависимости от программирующего канала, записать константу счётчика (для генерации звука данная константа задаёт частоту звука).
Рисунок 2.2 – Формат управляющего слова
Канал таймера имеет следующее назначение в IBMPC.
Таблица 2.2 – Назначение каналов таймера
Канал | Назначение | Режим |
0 | Системные часы (IRQ0) | Режим 3, счётчик=0 (65536) |
1 | Запрос для канала 0 ПДП (регенерация памяти) | Режим 2, счётчик=18 |
2 | Генератор звука | - |
Для генерации звука в IBMPC используется канал 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 нельзя, т.к. это приведёт к нарушению целостности данных в ОЗУ.
2.2 Программируемый периферийный интерфейс КР580ВВ55А
В состав IBMPC входит программируемый периферийный интерфейс (ППИ) i8255 (отечественный аналог KP580BB55A) рисунок4 .ППИ содержит три 8-разрядных порта (PA, PB, и PC) для организации обмена между ЦП и внешними устройствами, и регистр управления. Порты сгруппированы в две группы : группа А состоит из порта PA и старшей тетрады порта PC, группа B – из порта PB и младшей тетрады порта PC. Группа А может работать в трех режимах (0,1,2); группа B в двух (0 и 1). Режимы определяются содержимым регистра управления , имеющим формат изображенный на рисунке 2.5.
Рисунок 2.4 – условное графическое обозначение ППИ КР580ВВ55А
Рисунок 2.5 – Формат регистра управления ППИ
Режим 0 – основной режим Ввода – вывода (однонаправленный синхронный обмен).В этом режиме группа разделяется на два набора (порт и тетрада PC).В данном режиме порт PA,PB и тетрады (0-3), PC(4-7) могут использоваться для передачи данных между ЦП и внешними устройствами. Их можно программировать на ввод или вывод, для этого нужно лишь загрузить необходимую константу в управляющий регистр ППИ (рис.2)
Режим 1 – режим стробируемого ввода-вывода (однонаправленный асинхронный обмен по прерыванию). Порты РА и РВ используются для передачи данных, РС – для управляющих сигналов.
Режим 2 – режим двунаправленной шины (двунаправленный асинхронный обмен по прерыванию). Этот режим допустим только для группы А. В нем порт А становится двунаправленным, а 5-ть разрядов порта РС используются для управления портом РА.
ППИ в IBM РС занимает порты 60h – 63h. BIOS заносит в регистр управления (порт 63h) 99h, т.е. программирует группы А и В в режим 0, причем РА и РС является портами ввода, а РВ – портом вывода. Назначение портов следующее:
Таблица 2.3 – Назначение портов
Адрес | Операция | Назначение |
60h | чтение | Вывод из порта РА |
61h | чтениезапись | Вывод из порта РВВывод в порт РВ |
62h | чтение | Вывод из порта РС |
63h | запись | Ввод управляющего слова в регистр управления ППИ |
Содержимое порта РВ изображено на рисунке 2.6.