Описание алгоритмов вывода чисел



 

Вывод числа в 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!