Системы счисления, применяемые в ЭВМ. Уровни программирования
Характеристика электронно-вычислительных машин (ЭВМ): их принцип действия; структура; устройство; основные классы (цифровые, машины дискретного действия, и аналоговые – непрерывного действия). Обзор систем счисления в ЭВМ и уровней программирования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | методичка |
Язык | русский |
Дата добавления | 17.04.2014 |
Размер файла | 193,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
В текстовых режимах (режимы 1, 2, 3, 4) на экран могут отображаться текстовые символы и символы псевдографики. Для кодировки каждого знакоместа экрана (символа) используется два байта. Первый из них содержит ASCII код символа, а второй - атрибуты символа (цвет символа и цвет фона). Коды символов имеют четные адреса, а их атрибуты - нечетные.
Размещено на http://www.allbest.ru/
R G B R G B
7 6 5 4 3 2 1 0
Цвет символа
Интенсивность символа
Цвет фона символа
Мигание фона символа или интенсивность.
R - красный цвет
G - зеленый цвет
B - синий цвет
Для программирования в текстовом режиме мы можем непосредственно обращаться к видеопамяти. Поскольку каждому символу на экране в видеопамяти отводится по 2 байта, можно рассчитать смещение первого байта в видеопамяти согласно его положению на экране. В стандартном режиме 80 символов на 25 строк, на каждую строку отводится 80*2 байта и плюс положение символа на строке*2 байта.
Приведем фрагмент программы, которая выводит в середину экрана на синем фоне красную букву А (код 65).
Из предыдущего рисунка находим байт атрибута
00010100 В = 16 + 4 = 20
mem[$b800:160*12+40*2] := 65; - запись в память символа
mem[$b800:160*12+40*2+1] := 20; - запись атрибута.
Приведем несколько примеров программ, работающих с видеопамятью в текстовом режиме.
{Данная программа выводит на 24 строку мерцающую
надпись "Видеоадаптер Super VGA"}
uses crt;
var i:integer;s:string;
begin clrscr;
s:='Видеоадаптер Super VGA';
for i:=1 to length(s) do
mem[$b800:160*24+30*2+i*2] := ord(s[i]);
repeat
for i:=1 to length(s) do
mem[$b800:160*24+30*2+i*2+1] :=
random(15)+1+16;delay(1000) ;
until keypressed;
end.
{Программа имитирует программу вирус "Листопад". Все символы экрана начинают сыпаться в нижнюю строку}
uses crt;
var x,y:integer;s,c,c1:byte;
begin
for x:=0 to 2000 do
mem[$b800:x*2]:=random(24)+95;
repeat x:=random(80);y:=random(25);
c1:=32; {код "Пробела"}
c:=mem[$b800:y*160+x*2];
repeat
mem[$b800:y*160+x*2]:=c1;
c1:=mem[$b800:(y+1)*160+x*2];
mem[$b800:(y+1)*160+x*2]:=c;
y:=y+1;delay(1000);
until y>24;
until keypressed;
end.
При отображении символа на экране происходит преобразование его из формата ASCII в двумерный массив пикселов. Для этого используется таблица трансляции символов (знакогенератор). У CGA знакогенератор расположен в ПЗУ, что не позволяет программам изменить конфигурацию символа. Поэтому есть большие сложности с «Руссификацией».
Видеопамять в графическом режиме
Распределение видеопамяти в графическом режиме отличается от распределения памяти в текстовых режимах. Это вызвано тем, что в графическом режиме необходимо хранить информацию о каждой точке экрана.
Из-за особенности микросхемы Motorola 6845 , используемой видеоадаптером CGA , отображение видеопамяти на экране не является непрерывным: первая половина видеопамяти (начальный адрес В800:0000) содержит данные всех нечетных линий экрана, а вторая половина (Начальный адрес В800:2000) содержит данные о всех четных. Каждому пикселу соответствует два бита, что дает возможность изображения 4 цветов. Следующие формулы определяют смещение байта от начала видеопамяти:
Если У - четные, то смещение байта = 50h*(y/2)+(x/4)
Если У - нечетные, то смещение байта = 200р+50h*((y-1)/2)+(x/4)
Номер первого бита = 7-mod(x/4)*2
Архитектура видеоадаптера EGA и VGA
Видеоадаптеры EGA и VGA условно делятся на шесть логических блоков:
Видеопамять. В видеопамяти размещаются данные, отображаемые адаптером на экране дисплея. Как правило она имеет объем 256 Кбайт. Физически память разделена на 4 банка, или цветовых слоя, использующих совместно единое адресное пространство.
Графический контроллер. Посредством его происходит обмен данными между центральным процессором и видеопамятью.
Последовательный преобразователь. Выбирает из памяти один или несколько байт, преобразует их в последовательный поток битов и затем передает их контроллеру атрибутов.
Контроллер атрибутов. Преобразует информацию о цветах.
Контроллер ЭЛТ. Контроллер генерирует временные синхросигналы, управляющие Электронно Лучевой Трубкой.
Синхронизатор. Управляет всеми временными параметрами видеоадаптера.
Размещено на http://www.allbest.ru/
Текстовый режим
При отображении символов на экран происходит преобразование его из ASCII в двумерный массив пикселов, выводимых на экран. Для этого преобразования используется таблица трансляции символов (Знакогенератор). Таблица знакогенератора хранится во втором цветовом слое.
Знакогенератор
При установке текстового режима BIOS загружает таблицу знакогенератора из ПЗУ во второй цветовой цветовой слой видеопамяти. Благодаря этому можно легко заменить стандартную таблицу своей собственной.
EGA поддерживает два размера для матрицы символов 8х8 и 8х14. VGA 9х16
На каждый символ отводится 32 байта.
Основные средства BIOS для работы с видеоадаптерами
Функция 00h прерывания 10h позволяет задать любой стандартный режим видеоадаптера:
На входа:Ah = 00h
AL = номер устанавливаемого режима. Если 7 бит =1, то при установке режима видеопамять не очищается.
Функция 01h позволяет изменить вертикальные размеры курсора путем задания верхней и нижней границы.
На входе:Ah = 01h
Ch = верхняя граница курсора
0 -
1 - Верхняя граница курсора
2 -
3 -
4 - 00 - обычный курсор
5 01 - невидимый курсор
6 10 - мигающий курсор
11 - быстро мигающий
CL = Нижняя граница курсора.
Функция 02h задает текущее положение курсора на экране.
На входе:Ah = 02h
Bh = номер страницы видеопамяти
Dh = номер строки(0-24)
DL = номер столбца (0-89)
Функция 03h позволяет узнать размер и текущие координаты курсора.
На входе: Ah = 03h
Bh = номер страницы видеопамяти
На выходе:Сh = верхняя граница курсора
CL = Нижняя граница курсора
Dh = позиция строки курсора
DL = позиция столбца курсора.
Функция 05h позволяет изменить активную страницу видеопамяти.
На входе:Ah = 05h
AL = номер страницы
Функция 06h позволяет осуществить свертку окна вверх.
На входе:Ah = 06h
AL = Число прокручиваемых линий, если =0, то окно прокручивается целиком.
Bh = Атрибут для строк, возникающих снизу
Ch = номер строки верхнего левого угла окна
CL = номер колонки левого угла окна
Dh = номер строки нижнего правого угла
DL = номер колонки правого нижнего угла
Функция 07h позволяет свернуть окно вниз (Входные параметры аналогичны предыдущей функции)
Функция 08h позволяет прочитать символ из текущей позиции экрана.
На входе:Ah = 08h
Bh = номер страницы видеопамяти
На выходе:AL = ASCII - код символа
Ah = байт атрибутов символа
Функция 09h позволяет записать один или несколько символов с заданными атрибутами в текущую позицию курсора.
На входе:Ah = 09h
AL = ASCII - код символа
Bh = номер страницы видеопамяти
BL = атрибут
Cx = число записываемых символов.
Функция 0Сh позволяет вывести на экран отдельную точку.
На входе:Ah = 0Ch
AL = номер цвета
Bh = номер страницы
Cx = Х - координата
Dx = Y - координата
Функция 0Dh позволяет прочитать цвет точки экрана.
На входе:Ah = 0Dh
AL = номер цвета
Bh = номер страницы
Cx = Х - координата
Dx = Y - координата
На выходе: AL = Номер цвета точки.
Функция 0Fh позволяет определить текущий видео режим.
На входе:Ah = 0Dh
На выходе: Ah = число символов в строке
AL = номер текущего режима
Bh = номер страницы
Работа со знакогенератором
Функция 11h прерывания 10h служит для загрузки таблиц знакогенератора.
На входе:Ah = 11h
AL = 00h, 10h - подфункция загрузки набора символов пользователя.
ES:BP = Адрес таблицы с новым набором символов.
СX = число загружаемых символов.
Dx = смещение в таблице знакогенератора (Равно коду первого заменяемого символа)
BL = номер загружаемой таблицы
Bh = число байт на символ в таблице (1-32)
Подфункция 04h функции 11h, прерывания INT 10h позволяет загрузить стандартный набор символов VGA
На входе:Ah = 11h
AL = 04h, 14h - загрузка набора символов из ПЗУ
BL = номер загружаемой таблицы
Подфункция 36h функции 12h позволяет гасить экран дисплея.
На входе:Ah = 12h
BL = 36h - гашение дисплея.
AL = 0 - включение экрана
1 - гашение экрана.
Приведем пример перепрограммирования знакогенератора.
В данном примере заглавная буква Х (код 88) заменяется на «Пляшущего человечка». Отныне при выводе на экран Х он будет печататься в виде человечка. Для того, чтобы загрузить стандартный набор символов, надо в данной программе заменить r.AL: = 4, и еще раз выполнить программу.
uses dos;
const a:array[1..14] of byte=(0,0,24,36,24,60,90,151,24,24,36,102,66,129);
var r:registers; i:integer;
begin
writeln('X');readln;
r.ah:=$11;
r.al:=$0;
r.es:=seg(a);
r.bp:=ofs(a);
r.cx:=1;
r.dx:=88;
r.bh:=32;
r.bl:=0;
intr($10,r);
readln
end.
Некоторые регистры EGA, VGA
Регистры синхронизатора.
Синхронизатор управляет всеми временными параметрами видеоадаптера, а также разрешает и запрещает доступ к отдельным цветовым слоям. Доступ к регистрам осуществляется через индексный порт с адресом 3C4h и через порт данных с адресом 3С5h.
Регистр с индексом 2 - разрешение записи в цветовой слой.
7 6 5 4 3 2 1 0
Размещено на http://www.allbest.ru/
Если бит равен 1, то можно записывать в нулевой цветовой слой.
В первый цветовой слой.
Во второй цветовой слой.
В третий цветовой слой.
Не используется.
Регистр начального адреса видеопамяти, которая будет выводиться в верхний левый угол. В регистр с индексом 0Сh записывается старший байт видеопамяти, в регистр с индексом 0Dh записывается младший байт. Доступ к этим регистрам можно осуществить у VGA в цветном режиме через индексный порт 3D4h и порт данных 3D5h. С помощью этих регистров можно осуществить плавную прокрутку видеопамяти.
Приведем пример программы, которая позволяет записывать информацию в различные цветовые слои. По очереди в различные слои записывается набор из 8 единиц. В результате мы получаем 4 разноцветных отрезка (синий, зеленый, красный и серый).
uses dos;
var
r:registers;
begin
r.ah:=0; {Функция задания режима работы VGA}
r.al:=18; {18-графический режим}
intr($10,r);{Включение 18 графического режима}
port[$3c4]:=2;{индексный порт открывает доступ}
{ко 2 регистру}
port[$3c5]:=1;{Разрешается запись в 0 (синий)}
{цветовой слой}
mem[$a000:15000]:=$FF;{рисуем отрезок из 8 точек}
port[$3c4]:=2;{}
port[$3c5]:=2;{Разрешается запись в 1 (зеленый)}
{цветовой слой}
mem[$a000:15001]:=$FF;
port[$3c4]:=2;
port[$3c5]:=4;{Разрешается запись вo 2 (красный)}
{цветовой слой}
mem[$a000:15002]:=$FF;
port[$3c4]:=2;
port[$3c5]:=8;{Разрешается запись в 3 (серый)}
{цветовой слой}
mem[$a000:15003]:=$FF;
ReadLn;
r.ah:=0;r.al:=3;intr($10,r);{Переход в 3 текстовый
режим работы VGA}
readln;
end.
{Данная программа позволяет просматривать все страницы видеопамяти}
uses dos,crt;
var r:registers;i,j,k:integer;c:char;
begin
for j:=0 to 7 do
for i:=0 to 1999 do
mem[$b800:2*i+j*4000]:=65+j;
k:=0;
repeat
c:=readkey;
if c=#80 then k:=k+1; if k>7 then k:=0;
if c=#72 then k:=k-1; if k<0 then k:=3;
r.ah:=05;r.al:=k;intr($10,r);
until c=#13;
end.
{Данная программа позволяет плавно прокручивать видеопамять}
uses dos,crt;
var r:registers;i,j,k:integer;c:char;
begin
for i:=0 to 15000 do
mem[$b800:i]:=random(32)+64;
k:=0;
repeat
c:=readkey;
if c=#80 then k:=k+160;
if c=#72 then k:=k-160;
j:=k mod 256;
i:=k div 256;
port[$3d4]:=$c;port[$3d5]:=i;
port[$3d4]:=$d;port[$3d5]:=j;
until c=#13;
end.
Практическое задание №2
Тема: Знакомство с видеоадаптером VGA. Видеопамять в текстовом режиме.
Цель работы: Научиться работать с отдельными битами видеопамяти.
Задание:
Используя непосредственное обращение к видеопамяти, в левый верхний угол вывести красную букву «А» на синем фоне.
Составить процедуру CLRSCR, которая очищает экран ЭВМ. Добиться этого путем заполнения видеопамяти нулями (Внимание! Не рекомендуется обнулять атрибуты текста, так как затем выводимый на экран текст будет не видим)
Используя непосредственное обращение к видеопамяти, в середину экрана вывести надпись «Super VGA». Заставить переливаться ее разными цветами.
Используя непосредственное обращение к видеопамяти, составить программу, которая выводит на экран цветное окно, от которого отбрасывается тень. Тень прозрачна (сквозь нее проглядывают буквы)
Используя непосредственное обращение к видеопамяти, составить программу вывода на экран светового меню.
Применить полученные навыки к созданию текстового редактора с возможностью выделения, копирования, вставки, удаления фрагмента текста.
Практическое задание №3
Тема: Знакомство с видеоадаптером VGA. Видеопамять.Цель работы: Научиться работать с отдельными битами видеопамяти. Распределение памяти в графических режимах. Использование средств BIOS для работы с видеоадаптером.
Задание:
Составить процедуру, которая по желанию пользователя переключает видеоадаптер в различные режимы.
Используя непосредственное обращение к видеопамяти, в 4 графическом режиме построить небольшой вертикальный отрезок, построить цветные окружности. Сделать то-же самое в других графических режимах.
Построить вертикальный отрезок и окружность, используя прерывание INT 10h.
4. Напишите процедуры, управления курсором IBM PC:
a) абсолютное позиционирования курсора;
б) относительное позиционирование курсора;
в) включения/выключения курсора;
г) изменение формы курсора;
е) чтение координат курсора.
Составить программу, переключающую страницы текста, находящегося в видеопамяти.
Составить программу, которая прокручивает текст, находящийся в видеопамяти, изменяя начальную точку левого верхнего угла экрана. Составить программу, которая создает эффект «плавающего» по экрану текста (Этого можно добиться, меняя координаты верхнего левого угла в видеопамяти).
Составить программу, которая прокручивает часть экрана (окно).
Практическое задание №3
Тема: Знакомство со знакогенератором.Цель работы: Научиться работать со знакогенератором, «Казификация алфавита»
Задание:
Составить программу, Позволяющую перекодировать произвольный символ знакогенератора. Распечатать таблицу кодов на экран.
С помощью перекодировки знакогенератора, вывести на экран образ «Пляшущего человечка». Составить программу, которая заставляет шагать по экрану этого «человечка» (в завершении программы восстановить первоначальный знакогенератор).
С помощью перепрограммирования знакогенератора, задать буквы казахского алфавита. Вывести на экран несколько предложений на казахском языке.
Составить программу, которая по желанию пользователя могла бы быстро перекодировать любой символ. Образ символа пользователь должен задавать в удобной графической форме.
§ 5. Программирование клавиатуры
Когда нажата клавиша, вызывается аппаратное прерывание INT 9 (IRQ 1). АТ посылает скан коды два раза, когда клавиша нажата и когда клавиша отпущена. Нажатые клавиши заносятся в циклический буфер (первый пришел, первым и выйдешь), всего до 15 символов.
В ячейках 0040:001А и 0040:001С хранятся голова и хвост буфера. Чтобы очистить буфер клавиатуры, достаточно установить значение ячейки 0040:001С равным значению ячейки 0040:001А. Если значение «Хвоста» и «Головы» буфера не совпадают, можно сделать вывод, что была нажата клавиша, посмотреть, какая была нажата клавиша.
Функция 0Bh 21h прерывания возвращает в AL значение 0FFh, когда буфет содержит символы и 0, когда буфер пуст.
Функция 7, 8 прерывания 21h ожидает ввода символа, если буфер пуст. Символ на экран не отображается. (Функция 8 распознает клавишу ^Break). Результат ввода читается из AL (ASCII - код), Если там расширенный код (т.е. ASCII=0), повторный запуск этого прерывания, в AL появляется второй байт расширенного кода.
16h прерывание BIOS дает ту - же возможность (0 - функция). Прерывание выполняется 1 раз. AL - ASCII код. Если AL=0, то расширенный код в AH. (^ Break не распознается)
Приведем пример программы ввода с клавиатуры пароля. Нажимаемые с клавиатуры символы не отображаются, а вместо них на экран выводятся звездочки. Для решения данной задачи воспользуемся нулевой функцией INT16h прерывания.
uses dos;
var r:registers;s:string;
begin
s:='';
repeat
r.ah:=0;intr($16,r);write('*');s:=s+chr(r.al);
until r.al=13;
writeln;writeln(s);
readln
end.
Функция 6 прерывания 21h - единственный способ получить введенный символ без ожидания. Функция не дает «Эхо» на экран и не распознает ^ Break
На входе:AX=6h;
DL=0FFh.
На выходе:AL=ASCII код (Если 0, то прерывание должно быть повторено)
Для примера приведем программу, которая опрашивает клавиатуру, не прерывая вычислительного процесса основной программы. Данная программа выводит в середину экрана вращающийся отрезок. При нажатии на любую клавишу выводится сам символ и его ASCII - код. Завершение работы программы - нажатие клавиши «ESC»
Uses dos, crt;
var r:registers;
begin clrscr;
repeat
gotoxy(30,12);write('/ ');delay(500);
gotoxy(30,12);write('- ');delay(500);
gotoxy(30,12);write('\ ');delay(500);
gotoxy(30,12);write('| ');delay(500);
r.ah:=6;r.dl:=$FF;intr($21,r);
if r.al<>0 then writeln(chr(r.al):2,r.al:3);
until r.al=27;
end.
Функция 0Ah прерывания INT 21h позволяет вводить строку длинной 254 символа, выдавая эхо на экран. DS:DX - указывает на адрес памяти, куда должна будет помещена строка.
Функция 3Fh прерывания INT 21h обеспечивает ввод строки без эха на терминал. В ВХ надо записать 0, DS:DX - адрес памяти, куда будет помещена строка. CX - должен содержать максимальную длину вводимой строки.
С помощью 05h функции прерывания INT16h можно записать символ в буфер клавиатуры. Данную возможность можно использовать, например, для того, чтобы после завершения программы выполнить запрограммированную командную строку. Для этого перед выходом из программы с помощью этой функции в буфер клавиатуры записывается нужная строка и завершается кодом <Enter>.
Вход: Ah = 05h
CL = ASCII код записываемого символа.
CH = Скан код записываемого символа.
Выход:AL = 0 - Запись выполнена успешно.
1 - Буфер клавиатуры переполнен.
Можно, например вывести на экран командную строку:
C:\dir *.exe+ <Enter>
uses dos;
const s:string='DIR *.exe'+#13;
var r:registers;i:integer;
begin
for i:=1 to length(s) do
begin
r.ah:=5;r.cl:=ord(s[i]);
intr($16,r);
end;
end.
После выполнения этой программы в командной строке появляется строка dir *.exe+ <Enter> которая выводит на экран список файлов.
Практическое занятие № 5
Тема: Знакомство с программированием клавиатуры.Цель работы: Научиться работать с клавиатурой, познакомиться с буфером обмена клавиатуры.
Теоретические сведения.
Каждой клавише в ЭВМ присвоен специальный скан-код (номер клавиши). При нажатии и отпускании клавиши генерируется INT 9 прерывание, которое воспринимает код нажатой клавиши и в соответствии с флажковым регистром клавиатуры генерирует ASCII код, или расширенный код. Далее этот код передается в буфер клавиатуры для дальнейшей обработки. Буфер клавиатуры построен по принципу циклической очереди. Указатели на голову и хвост очереди находятся по адресу 0040:001А и 0040:001С соответственно. В случае, когда указатель на голову и на хвост очереди совпадают, говорят, что буфер клавиатуры пуст. Всего буфер клавиатуры может содержать до 15 символов.
Для проверки буфера клавиатуры на наличие в нем символов, для ввода символов с ожиданием и без ожидания, DOS предоставляет обширные возможности с помощью функций 21h прерывания. BIOS предоставляет подобные функции с помощью 16h прерывания. Змедление и убыстрение действия клавиатуры можно осуществить используя порт с номером 60h.
Задание:
Распечатать на экране ASCII и Скан коды, нажимаемых на клавиатур клавиш.
Напишите функцию изменяющую состояние светодиодов на панели клавиатуры, не забывайте устанавливать соответствующие биты в байтах состояния клавиатуры.
Напишите функцию, ожидающую нажатия на любую клавишу. Во время ожидания программа выводит на экран поочередно символы '<' и '>'.
Составить процедуру, имитирующую работу процедур Readkey и Keypressed. С помощью этих процедур организовать ввод «пароля» с выводом на экран звездочек, вместо вводимых с клавиатуры символов.
Напишите функцию, прерывающую рабочую программу только комбинацией клавиш либо <Alt - X>, либо <Alt - x>.
Напишите функцию, которая блокирует на 5 секунд действие клавиатуры (Запрещает прерывание от клавиатуры).
Напишите функции, увеличивающую и замедляющую быстродействие клавиатуры.
Напишите функцию, проверяющую буфер клавиатуры на наличие введенных символов.
Составить программу таким образом, чтобы при завершении работы она записывала в буфер клавиатуры команду MS DOS, и этим после завершения своей работы запускала новую программу.
Программирование манипулятора «Мышь»
Можно выделить два наиболее часто используемых способа подключения «Мыши»: Через последовательный порт (COM1, COM2) и через специальный адаптер, который вставляется в слот расширения «Материнской платы» компьютера. Но стандартный BIOS и DOS не поддерживают работу с манипулятором «Мышь». Для подключения драйвера «Мыши» файл config.sys должен содержать строку:
Device =c:\mouse\mouse.sys
Если используется резидентная программа, она обычно вызывается в файле Autoexec.bat. В этом файле должна содержаться строка:
C:\mouse\mouse.com
Драйвер «Мыши» выполняет следующие действия:
Отслеживает перемещение курсора и нажатие клавиш.
Рисует курсоры.
Предоставляет программный интерфейс, основанный на вызове прерывания INT 33h.
Давайте рассмотрим некоторые функции данного прерывания:
Инициализация «Мыши»
На входе: Ax=00h
На выходе: Ax - Состояние «Мыши»
Bx - количество клавиш «Мыши»
Включить курсор «Мыши»
На входе: Ax=01h
Выключить курсор «Мыши»
На входе: Ax=02h
Определить положение курсора.
На входе: Ax=03h
На выходе: Bx - Состояние клавиш «Мыши»
Сx - Координаты «Мыши» по горизонтали.
Dx - Координаты «Мыши» по вертикали.
Приведем пример программы, которая при нажатии на левую клавишу «Мыши» совмещает символьный курсор и курсор «Мыши». При нажатии на правую клавишу - символьный курсор устанавливается в левый верхний угол экрана.
uses dos,crt;
var r:registers;c:char;
begin
r.ax:=1;intr($33,r);
repeat
r.ax:=3;intr($33,r);
if r.bx and 1<>0 then gotoxy(r.cx div 8,r.dx div 8);
if r.bx and 2<>0 then gotoxy(1,1);
if keypressed then c:=readkey;
until c=#27;
end.
Установить курсор.
На входе: Ax=04h
Сx - Координаты «Мыши» по горизонтали.
Dx - Координаты «Мыши» по вертикали.
Определение положения курсора при нажатии на клавишу.
На входе: Ax=05h
Bx - Клавиша, при нажатии на которую запоминается состояние «Мыши»
На выходе: Ax - Состояние клавиш «Мыши»
Bx - Количество нажатий на заданную клавишу.
Сx - Координаты «Мыши» по горизонтали.
Dx - Координаты «Мыши» по вертикали.
Определение положения курсора при отпускании клавиши «Мыши»
На входе: Ax=06h
Bx - Клавиша, при отпускании которой запоминается состояние «Мыши»
На выходе: Ax - Состояние клавиш «Мыши»
Bx - Количество нажатий на заданную клавишу.
Сx - Координаты «Мыши» по горизонтали.
Dx - Координаты «Мыши» по вертикали.
Задать диапазон движения курсора по горизонтали
На входе: Ax=07h
Cx - Минимальное значение Х.
Dx - Максимальное значение Х
Задать диапазон движения курсора по вертикали
На входе: Ax=08h
Cx - Минимальное значение Y.
Dx - Максимальное значение Y
Задать форму курсора в графическом режиме.
На входе: Ax=09h
Bx - Номер позиции точки указателя «Мыши»
Cx - Номер строки точки указателя.
Es:Dx - Указатель на битовое изображение курсора (64 байта)
Приведем пример программы, которая задает графический курсор в виде 4 точек по углам прямоугольника.
uses dos,graph;
var a:array[1..64] of byte;
r:registers; gd,gm,i:integer;
begin
gd:=detect;initgraph(gd,gm,'');
line(100,100,150,150);
for i:=1 to 32 do a[i]:=255;
a[34]:=128;a[33]:=1;
a[64]:=128;a[63]:=1;
r.ax:=$9;
r.es:=seg(a);
r.dx:=ofs(a);
intr($33,r);
r.ax:=1;intr($33,r);
readln;
closegraph;
end.
Установить драйвер событий.
На входе:AX=0Ch
CX= маска вызова.
Бит 0 - Вызов при перемещении мыши.
Бит 0 - Вызов при нажатии на левую клавишу.
Бит 0 - Вызов при отпускании левой клавиши.
Бит 0 - Вызов при нажатии на правую клавишу.
Бит 0 - Вызов при отпускании правой клавиши.
Бит 0 - Вызов при нажатии на среднюю клавишу.
Бит 0 - Вызов при отпускании средней клавиши.
Бит 0 - Вызов при любом событии.
Бит 0 - Отключение драйвера событий.
ES:DX - Адрес подключаемого драйвера событий.
Приведем пример программы, которая при нажатии на правую клавишу «Мыши» в середину экрана выводит красное окно.
uses dos,crt;
var r:registers;
procedure assa;interrupt;
begin
window(30,10,60,15);textbackground(4);clrscr;
delay(5000);
window(1,1,80,25);textbackground(1);clrscr;
end;
begin
r.ax:=1;intr($33,r);
r.ax:=$c;r.cx:=8;r.es:=seg(assa);r.dx:=ofs(assa);
intr($33,r);
readln;
end.
Практическое занятие N 6
Тема: Знакомство с программированием манипулятора «Мышь».Цель работы: Научиться работать с манипулятором «Мышь», познакомиться с основными функциями INT33h.
Задания
Составить программу, которая в символьном режиме выводит на экран курсор мыши. При нажатии на «Левую» клавишу мыши символьный курсор совмещается с курсором «Мыши»
Составить программу, которая выводит на экран некоторые графические объекты (кнопки). При нажатии на соответствующие кнопки на экране происходят заданные события.
Например: На экран выводятся разноцветные прямоугольники (палитра). При нажатии на прямоугольник с определенным цветом, рабочее окно экрана окрашивается в заданный цвет.
В графическом режиме переопределить образ указателя «Мышь»
Составить программу, которая создает на экране вертикальное световое «Меню». Управление осуществляется как с помощью клавиш управления курсором, так и при помощи манипулятора «Мышь»
Системный таймер.
Все IBM PC используют микросхему таймера 8253 (или 8254) для согласования импульсов от микросхемы системных часов. Число циклов системных часов преобразуется в один импульс, а последовательность этих импульсов подсчитывается для определения времени, или они могут быть посланы на громкоговоритель компьютера для генерации частоты определенной частоты. Микросхема 8253 имеет 3 идентичных, независимых канала, каждый из которых может программироваться.
Размещено на http://www.allbest.ru/
Микросхема работает независимо от процессора. Процессор программирует микросхему, затем обращается к другим делам. Таким образом микросхема 8253 действует как часы реального времени - она считает свои импульсы независимо от того, что происходит в компьютере. Однако, максимальный программируемый интервал составляет примерно 1/12 секунды. Для подсчета интервалов времени в часы и минуты нужны другие средства. Именно по этой причине импульсы от нулевого канала микросхемы накапливаются в переменной, находящейся в области данных BIOS. Этот процесс называется подсчетом времени суток. 18,2 раза в секунду выход канала 0 обрабатывается аппаратным прерыванием (прерывание таймера), которое ненадолго останавливает процессор и увеличивает счетчик времени суток.
Каждый из трех каналов микросхемы таймера состоит из трех регистров. Доступ к каждой группе регистров осуществляется через один порт: Номера портов от 40h до 42h соответствуют каналам 0-2. Порт связан с 8-битным регистром ввода/вывода, который посылает и принимает данные для этого канала. Данные передаются в 16 разрядный регистр задвижки (latch register), который хранит это число и из которого копия перемещается в 16 разрядный регистр счетчик. В регистре счетчика число уменьшается на единицу каждый раз, когда импульс от системных часов пропускается через канал. Когда значение этого числа достигает нуля, то канал выдает выходной сигнал и затем копия числа из задвижки передвигается в регистр счетчика, после чего процесс повторяется. Чем меньше число в задвижке, тем быстрее ритм. Таким образом, посылая различные числа в задвижку, мы можем управлять частотой генерации импульсов.
Все три канала всегда активны.
Канал 0 используется часами времени суток. Он устанавливается в BIOS таким образом, что выдает импульсы 18.2 раза в секунду. Каждый импульс инициирует прерывание таймера (INT 8) и именно это прерывание увеличивает показание счетчика. Выходная линия используется также для синхронизации некоторых дисковых операций. Поэтому, если вы изменили ее значение, то вам необходимо восстановить первоначальное значение перед обращением к диску.
Канал 1 управляет обновлением памяти на всех машинах, поэтому его лучше не трогать.
Канал 2 связан с громкоговорителем компьютера и он производит простые прямоугольные импульсы для генерации звука. Канал 2 может быть отключен от громкоговорителя и использован для синхронизации (например, в качестве генератора случайных чисел). Ворота закрываются установкой младшего бита порта с адресом 61h.
8-битный командный регистр управляет способом загрузки чисел в канал. Адрес порта для этого регистра равен 43h.
Биты значение
- 0 -запись числа в двоичной форме, иначе BCD формат.
3-1- Номер режима 1-5 (чаще используется 3)
5-4 - тип операции:
00-передать значение счетчика в задвижку.
01-читать/писать только старший байт.
10-читать/писать только младший байт.
11-ичтать/писать старший, затем младший байт.
7-6 - Номер программируемого канала.
(Формат BCD (двоично-кодированное представление десятичного числа). Переходит в ASCII путем сдвига половины байта в младший конец регистра и добавлением 48)
Короче говоря, для программирования микросхемы 8253 надо выполнить 3 основные шага:
Послать в командный регистр (43h) байт, представляющий цепочку битов, которые выбирают канал, статус чтения/записи, режим операции и форму представления чисел.
Для канала 2 надо разрешить сигнал от часов, установив 2 в 0 бит порта с адресом 61h (открыть ворота на динамик).
Порты 40h-42h - счетчики частоты (на каждый канал соответственно). Послать в них сначала младший байт, затем старший.
Приведем пример программы, генерирующий в цикле переливчатый звук:
uses dos;
var r:registers;i:integer;
begin
port[$61]:=$ff; {Открытие ворот на динамик}
for i:=100 to 500 do
begin
r.ax:=i*10; {задание частоты}
port[$42]:=r.al;{запись младшего байта частоты}
port[$42]:=r.ah;{запись старшего байта частоты}
r.ah:=$86;r.dx:=5000;
intr($15,r); {временная задержка}
end;
port[$61]:=0; {Закрытие ворот на динамик}
end.
Для получения случайного числа (генерации случайных чисел), достаточно читать данные из порта счетчика, например из счетчика системных часов. Данная программа печатает на экране случайные числа, которые считывает из 40h порта таймера.
begin
repeat
writeln(port[$40]);
readln
until false;
end.
Установка и чтение часов реального времени.
Доступ к этим регистрам можно получить, послав предварительно номер требуемого регистра в индексный порт с адресом 70h, а затем прочитав его значение через порт данных с адресом 71h.
Номера регистровФункции
00h- Секунды.
01h- Секундная тревога.
02h- Минуты.
03h- Минутная тревога.
04h- Часы.
05h- Часовая тревога.
06h- День недели.
07h- День месяца.
08h- Месяц.
09h- Год.
0Ah- Регистр статуса А.
0Bh- Регистр статуса B.
0Ch- Регистр статуса C.
0Dh- Регистр статуса D.
БитыЗначения 4 статусных регистров.
6 - 1-разрешено периодическое прерывание.
- 1-разрешено прерывание тревоги
- 1-разрешено прерывание конца модификации
- 1-часы от 24 до 12.
0- 1-разрешено запоминание времени суток.
Часы реального времени могут запускать любую процедуру, которую требуется выполнить в определенное время. Для этого используйте вектор прерывания 4Аh.
Прерывание INT 1Ah.
Вход: AH - 02h - чтение времени из часов реального времени.
Выход:CH - Часы.
CL - Минуты.
DH - Секунды.
Вход:AH - 03h - Установка времени реальных часов.
CH - Часы.
CL - Минуты.
DH - Секунды.
Вход:AH - 04h - Чтение даты.
Выход:CH - Век (19-20).
CL - Год (с 1980).
DH - Месяц.
DL - День месяца.
Вход:AH - 05h - Установка даты.
CH - Век (19-20).
CL - Год (с 1980).
DH - Месяц.
DL - День месяца.
Вход:AH - 06h - Установка тревоги.
CH - Часы.
CL - Минуты.
DH - Секунды.
(Вектор 4Ah должен указывать на процедуру обработки тревоги)
Вход:AH - 07h - Сброс тревоги.
IBM AT имеет прерывание INT 15h, которое позволяет осуществить задержку на указанное время. Для этого поместите 86h в AH, а число микросекунд в CX:DX, после чего выполните прерывание.
Данная программа показывает, как можно использовать сигнал «тревоги». Сначала вектор прерывания Int 4ah устанавливается на нашу процедуру «Clock». Затем устанавливаем «Будильник». Для этого вначале читаем системное время и прибавляем к нему 1 минуту.
uses dos,crt;
var r:registers;
procedure clock;interrupt;
var i:integer;
begin
for i:=1 to 5 do
begin
textbackground(4);clrscr;delay(1000);writeln('Пора!!!');
textbackground(1);clrscr;delay(1000);writeln('Пора!!!')
end;
keep(0);
end;
begin
setintvec($4a,addr(clock));
r.ah:=02;intr($1a,r);
r.cl:=r.cl+1;r.ah:=06;intr($1a,r);
readln
end.
{Данный программа выводит на экран системное время.}
uses dos;
var r:registers;
begin
r.ah:=02;intr($1a,r);
writeln(r.ch,':',r.cl,':',r.dh);
readln
end.
INT 15h прерывание позволяет осуществить задержку на указанное время. Для этого достаточно поместить в регистр AH=86h, а число микросекунд в CX,DX, после чего выполнить прерывание.
Данная программа имитирует процедуру DELAY.
uses dos;
procedure delay(x:integer);
var r:registers;
begin
r.ah:=$86;r.cx:=x;intr($15,r);
end;
begin
delay(30);writeln('Время вышло')
end.
Практическое занятие N 7
Тема: Часы реального времени.Цель работы: Научиться работать с часами реального времени.
Задание:
1) Напишите функцию, выполняющую все виды обслуживания часов реального времени, которые поддерживаются BIOS.
Функция должна:
а) читать показания часов;
б) устанавливать часы;
в) читать дату;
г) устанавливать дату;
д) устанавливать будильник;
е) сбрасывать будильник.
2) Напишите функцию, определяющую время года. Используйте при этом часы реального времени.
3) Напишите функцию, задержки программных операций на 5 секунд. Чтобы обеспечить задержку данной продолжительности, программа должна подсчитать требуемое число импульсов счетчиков времени суток. Это значение добавляется к считанному текущему значению счетчика. Затем программа постоянно считывает значение счетчика и сравнивает его с запомненным. Когда достигается равенство, то требуемая задержка прошла и можно продолжать выполнение программы.
4) Напишите функцию, запускающую некоторую программу в данный момент времени.
Практическое занятие N 8
Тема: Системный таймер.Цель работы: Научиться работать с Системным таймером.Задание:
1) Напишите функции, формирования десятисекундной задержки с помощью таймера.
2) Напишите функцию, генерирующую на громкоговорителе тона заданной частоты и заданной длительности.
3) Напишите функцию генерации случайных чисел. Рекомендуем использовать канал 2 в режиме 3.
Программирование диска
Структура диска
Микросхема контроллера НГМД 765 фирмы NEC управляет мотором и головками накопителя на дискетах и обрабатывает потоки данных. Один контроллер может обслужить до 4 НГМД. За исключением случаев, связанных с защитой от копирования программировать микросхему не приходится.
Для того, чтобы можно было свободно обращаться к диску (произвольный доступ), первоначально диск форматируют, т.е. разбивают на дорожки и сектора. Каждая дорожка и сектор получают свой номер. Это позволяет в любой момент времени обратиться к любой дорожки, к любому сектору. При форматировании обычно используют некоторые типы секторов с обозначениями:
Тип сектора0 - 128 байт размер сектора.
1 - 256 Байт
2 - 512 байт
3 - 1024 байта.
Для уменьшения количества адресуемых единиц памяти на диске за единицу принят кластер - минимальная единица размера диска. Обычно кластер включает в себя несколько секторов. Для IBM PC размеры кластеров и размера FATтаблицы приведены в таблице:
Тип диска |
Секторов на кластер |
Размер FAT(секторов) |
|
160 Кбайт |
1 |
1 |
|
180 Кбайт |
1 |
1 |
|
320 Кбайт |
2 |
2 |
|
360 Кбайт |
2 |
2 |
|
1.2 Мбайт |
1 |
7 |
|
винчестер |
|||
10 Мбайт |
8 |
8 |
|
20 Мбайт |
4 |
40 |
Функция 36h прерывания INT 21h сообщает, сколько имеется свободного пространства на диске:
На входе: AH=36h
DL - содержит номер диска
На выходе:BX - Число доступных кластеров
AX - Число секторов в кластере
CX - Количество байт в секторе.
DOS делит диск на системную область и область данных. Системная область подразделяется на 3 составные части: блок начальной загрузки, таблица размещения файлов (FAT) и корневой каталог.
Блок начальной - всего несколько сот байт, содержит программу, осуществляющую начало загрузки DOS (Занимает один 512 байтный сектор)
Таблица размещения файлов (FAT) содержит схему размещения кластеров. Рассмотрим на примере структуру размещения файла на диске. Файл записывается в свободные кластера диска (причем файл может быть записан кусками в разные области диска). Для того чтобы можно было собрать файл в одно целое, необходимо запомнить цепочку кластеров. Эта цепочка и хранится в FAT таблице. Вместе с именем файла хранится номер только первого кластера. Остальная цепочка восстанавливается из FAT таблицы.
Размещено на http://www.allbest.ru/
Свободные кластеры в таблице обозначаются в виде 000h. Любое другое число говорит, что кластер занят. Номера кластеров связывают различные кластеры одного файла. Для защиты информации на диске обычно находится две копии FAT таблицы. Каждому кластеру в FAT таблице соответствует одна запись. Первоначально каждой записи в FAT таблице отводилось 12 битовое число, которое позволяло закодировать 4 078 кластеров. Такие FAT таблицы обычно имеют Floppy disk 3.5' . В связи с появлением жестких дисков большой емкости для увеличения количества адресуемых кластеров, приняты новые форматы FAT - где каждой записи в FAT соответствует 16 бит ( FAT16 ) и 32 бита ( FAT32 ). Объем записи в FAT16 позволяет использовать 65 518 кластеров. Нумерация кластеров начинается с 2. 1 - кластер содержит код формата FAT таблицы. Если запись в FAT = 0 следовательно данный кластер не используется. Конечный кластер обозначается в FAT12 FFFh (для FAT16 - FFFFh). Дефектные части диска , которые не должны использоваться, обозначаются FF7h (или FFF7h). Другие резервные коды от FF0h до FFFh зарезервированы для тех потребностей, которые могут возникнуть в будущем.
FAT начинается с 1 логического сектора. Ее можно получить, прочитав по INT 25h с DX=1.
Функция DOS 1Сh представляет информацию о таблице размещения файлов. Поместите в DL номер накопителя, где 0 - накопитель по умолчанию, 1 - А и т.д. При возврате DX содержит число кластеров, а CX - число байт в секторе. DS:BX указывает на байт, содержащий первый байт FAT.
Корневой каталог: Для каждого файла в каталоге записывается восьми байтовое имя файла, трех байтовое расширение, размер файла, дата и время создания файла, а так - же номер начального кластера и атрибуты файла. Каждая запись в каталоге занимает 32 байта. Один сектор умещает записи для 16 файлов. 20 - мегабайтовый диск модели AT занимает 32 сектора.
Размещено на http://www.allbest.ru/
Как корневой каталог, так и подкаталоги используют 32 байта для хранения информации об одном файле. В первом байте имени файла может находиться информация E5h, которая говорит о том, что пространство занимаемое этим файлом может быть использовано другими файлами. (При удалении файла фактически файл с диска не удаляется, а в первый байт записывается E5h, что говорит DOS, что файл стерт)
Атрибуты файла устанавливаются в 11-м байте элемента каталога. Значения имеют только младшие 6 битов. Остальные должны быть равны 0.
БитыЗначения
0 = 1Файл объявлен только для чтения,
1 = 1Скрытый файл,
2 = 1Файл является системным,
3 = 1 Метка тома,
4 = 1Файл является подкаталогом,
5 = 1Файл был изменен со времени последней архивации.
Прерывание BIOS
Для работы с дисками BIOS предоставляет прерывание - INT 13h, которое обеспечивает обширные возможности по обслуживанию дисков. Давайте перечислим некоторые из основных функций:
00h - Сбросить контроллер диска (вызывает рекалибровку
контроллера)
01h - Получить статус диска (код ошибки последней операции)
02h - Читать сектор.
03h - Писать сектор.
04h - Верификация - проверка секторов на ошибки.
05h - Форматировать дорожку.
06h - форматировать дорожку жесткого диска.
07h - Форматировать жесткий диск.
Функции >8 только для жестких дисков.
08h -Получить параметры жесткого диска.
09h - Инициализировать параметры диска.
0Ah -Читать сектор с кодом коррекции.
0Bh -Записать сектор с кодом коррекции.
0Ch -Позиционирование головки на нужный цилиндр.
0Eh -Сбросить контроллер диска.
0Fh - Записать буфер сектора.
10h -Получить состояние дисковода.
11h - Осуществить рекалибровку дисковода жесткого диска.
12h -Проверить память контроллера жесткого диска.
13h - Проверить дисковод жесткого диска.
14h - Проверить контроллер жесткого диска.
15h -Получить тип и размеры диска.
16h -Проверить флаг дискеты.
17h -Установить тип дискеты.
18h -Установить среду для форматирования дискеты.
19h -Парковка головок жесткого диска.
1Аh -Форматировать жесткий диск с контроллером типа ESDI
Большинство из перечисленных функций INT 13h возвращают в регистр AH код ошибки. При этом Carry-флаг=1. Приведем перечень основных ошибок, распознаваемых контроллером дисковода:
00h -Нет ошибки.
01h -Неправильная команда.
02h -Не найдена адресная метка.
03h -Попытка записи на диск, защищенный от записи.
04h -Не найден сектор.
05h -Ошибка при сбросе контроллера жесткого диска.
06h -Произошла замена дискеты (изменилось положение запора)
07h -Неправильные параметры дисковода жесткого диска.
08h -Переполнение канала прямого доступа к памяти (КПДП)
09h -Выход за границу 64Кбайта при работе с КПДП.
0Аh -Обнаружен плохой сектор.
0Вh -Обнаружена плохая дорожка.
0Сh -Неправильный номер дорожки.
0Dh -Неправильный номер сектора при форматировании.
0Еh -Обнаружена адресная метка управляющих данных
0Fh -Ошибка КПДП.
10h -Обнаружена ошибка в данных.
11h -Данные скорректированы схемами контроллера.
20h -Сбой контроллера.
40h -Сбой при поиске дорожки.
80h -Программа не успевает обрабатывать данные.
AАh -Не готов дисковод.
ВВh -Неизвестная ошибка.
ССh -Сбой при записи.
Е0h -Ошибка регистра состояния.
FFh - Ошибка операции чтения.
Наиболее интересными из приведенных функций являются функции записи и чтения информации в отдельный сектор. Поговорим о них подробнее.
Функция 02h - прерывания INT13h позволяет прочитать произвольный сектор с диска.
Вход:AH - 02h - читать сектор.
DL - Номер диска (0-диск А:, 1- В: …)
DH - Номер головки чтения/записи.
CH - Номер дорожки (цилиндра) (0-n)
CL - Номер сектора (1-n)
AL - Число секторов (в сумме не больше, чем один цилиндр)
ES:BX - Адрес буфера вызывающей программы.
Выход:Carry-флаг = 1 при ошибке
AH - Код ошибки.
ES:BX - Буфер содержит прочитанные данные.
(Большинство из приведенных выше функций на входе и выходе имеют те же параметры)
Практически данные возможности можно применить для непосредственного чтения данных с диска, когда другой способ невозможен или по тем или иным причинам не желателен. Например: были случаи, когда на диске портилась нулевая дорожка. В этом случае DOS не распознает диск и ничего с ним не может сделать. Для того, чтобы спасти с этого диска хоть что-то, можно прочитать диск в текстовый файл и затем в текстовом редакторе (Например в Wordе) просмотреть его и записать в отдельный файл хотя бы фрагменты текстовых файлов…
Пример: Данная программа считывает содержимое флоппи - диска в отдельный текстовый файл, параллельно выдавая сообщения о плохих секторах и дорожках.
uses dos,crt;
var a:array [1..512] of byte;i,j,k,z:longint;
r:registers; f:text;
begin clrscr; assign(f,'c:\disk.txt');rewrite(f);
for i:=0 to 79 do
for j:=0 to 1 do
begin
for k:=1 to 18 do
with r do
begin
ah:=2;dl:=0;
dh:=j;ch:=i;
cl:=k;al:=1;
es:=seg(a);bx:=ofs(a);intr($13,r);
for z:=1 to 512 do write(f,a[z]);
If ah=$0a then writeln('Обнаружен плохой сектор',j:3,i:3,k:3);
if ah=$b then writeln('Обнаружена плохая дорожка',j:3,i:3);
end;
end;
close(f);
end.
Иногда интересно записать на диск информацию в отдельный сектор. Мы можем прочитать содержимое сектора (Например: область FAT таблицы), модифицировать содержимое и записать обратно на диск. Данную возможность можно так - же использовать для защиты от нелегального копирования. Например: можно в определенный сектор записать пароль. Правда, это сделать гораздо сложнее, чем сказать. При записи в сектор необходимо позаботиться о том, чтобы там не было ценной информации. После того, как пароль будет записан, необходимо заблокировать данный сектор от изменения другими программами. Это можно сделать, отметив в FAT -таблице данный кластер, как сбойный. Но и это может не спасти, так как программа ScanDisk или NortonDiskDoctor обнаружит подделку и пометит этот кластер, как нормальный, пригодный к работе. И, тем не менее, приведем программу, которая записывает в 6 сектор на 5 дорожке «Пароль»:
uses dos,crt;
const a:array [1..2] of string=('Ильницкий В.Г.','КГУ');
var r:registers;
begin clrscr;
with r do
begin
ah:=3;{записать сектор}
dl:=0;dh:=0; {Диск, сторона}
ch:=5;cl:=6; {Дорожка,сектор}
al:=1; {Количество секторов}
es:=seg(a);bx:=ofs(a); {Адрес буфера, содержащего пароль}
intr($13,r);
If ah<>0 then begin
writeln('Произошел сбой, проверьте диск и защиту на диске
и попробуйте запустить программу еще раз...');
halt end;
writeln('Пароль успешно установлен, а теперь');
write('давайте прочтем его ... ');
a[1]:='';a[2]:=''; {Очистка буфера для проверки}
ah:=2;{ Читать сектор }
dl:=0;dh:=0; {Диск, сторона}
ch:=5;cl:=6; {Дорожка,сектор}
al:=1; {Количество секторов}
es:=seg(a);bx:=ofs(a); {Адрес буфера, содержащего пароль}
intr($13,r);
writeln(a[1],a[2])
end;
end.
Для форматирования сектора с помощью INT 13h необходимо, чтобы буфер обмена информацией содержал дескрипторы секторов. На каждый сектор отводится 4 байта информации. Буфер должен иметь следующие данные: Цилиндр (дорожка), головка (сторона), номер сектора, размер (02 - размер сектора 512 байт).
Например: Для форматирования первых 3 секторов на 10 дорожке флоппи диска, буфер должен иметь следующие данные: Цилиндр (дорожка), головка (сторона), номер сектора, размер (02 - размер сектора 512 байт).
10, 0, 01, 02
10, 0, 02, 02
10, 0, 03, 02
uses dos,crt;
const a:array [1..12] of byte=(10,0,1,2,10,0,2,2,10,0,3,2);
var r:registers;
begin clrscr;
with r do
begin
ah:=5;{записать сектор}
dl:=0;dh:=0; {Диск, сторона}
ch:=10;cl:=1; {Дорожка,сектор}
al:=3; {Количество секторов}
es:=seg(a);bx:=ofs(a); {Адрес буфера, содержащего
дескрипторы секторов }
intr($13,r);
If ah<>0 then begin
writeln('Произошел сбой, проверьте диск и защиту
на диске и попробуйте запустить программу еще раз...');
halt end;
end;
end.
Прерывание DOS
...Подобные документы
Система счисления как способ записи (изображения) чисел. История появления и развития различных систем счисления: двоичная, восьмеричная, десятичная и шестнадцатеричная. Основные принципы и правила алгоритма перевода из одной системы счисления в другую.
курсовая работа [343,1 K], добавлен 11.11.2014Классификация ЭВМ: по принципу действия, этапам создания, назначению, размерам и функциональным возможностям. Основные виды электронно-вычислительных машин: суперЭВМ, большие ЭВМ, малые ЭВМ, МикроЭВМ, серверы.
реферат [22,8 K], добавлен 15.03.2004Порождение целых чисел в позиционных системах счисления. Почему мы пользуемся десятичной системой, а компьютеры - двоичной (восьмеричной и шестнадцатеричной)? Перевод чисел из одной системы в другую. Математические действия в различных системах счисления.
конспект произведения [971,1 K], добавлен 31.05.2009Исследование истории развития систем счисления. Изучение математического аспекта теории информатики. Характеристика информационных систем счисления. Основные операции над двоичными числами. Разработка программного обеспечения для проведения тестирования.
курсовая работа [995,4 K], добавлен 24.05.2015Определение понятия и видов систем счисления - символического метода записи чисел, представления чисел с помощью письменных знаков. Двоичные, смешанные системы счисления. Перевод из одной системы счисления в другую и простейшие арифметические операции.
курсовая работа [232,6 K], добавлен 16.01.2012Электронно-вычислительная машина (ЭВМ) как средство обработки информации. Аппаратные и программные средства ЭВМ. Системы счисления и представления информации. Элементы структурного программирования. Построение блок-схем алгоритмов решения задач.
презентация [152,5 K], добавлен 26.07.2013История систем счисления, позиционные и непозиционные системы счисления. Двоичное кодирование в компьютере. Перевод чисел из одной системы счисления в другую. Запись цифр в римской нумерации. Славянская нумерация, сохранившаяся в богослужебных книгах.
презентация [516,8 K], добавлен 23.10.2015Понятие и классификация систем счисления. Перевод чисел из одной системы счисления в другую. Перевод правильных и неправильных дробей. Выбор системы счисления для применения в ЭВМ. Навыки обращения с двоичными числами. Точность представления чисел в ЭВМ.
реферат [62,0 K], добавлен 13.01.2011Сопоставление наиболее важных систем счисления. Перевод целых десятичных чисел в недесятичную систему и обратно. Особенности преобразования дробей. Правила выполнения арифметических действий над двоичными, восьмеричными и шестнадцатеричными числами.
контрольная работа [824,4 K], добавлен 17.11.2010Кодирование символьной и числовой информации. Основные системы счисления. Двоичная система счисления. Устройства вывода информации. Правила выполнения арифметических операций. Логические основы построения, функциональные узлы ЭВМ. Синтез логических схем.
презентация [1,2 M], добавлен 08.11.2016Целые числа в позиционных системах счисления. Недостатки двоичной системы. Разработка алгоритмов, структур данных. Программная реализация алгоритмов перевода в различные системы счисления на языке программирования С. Тестирование программного обеспечения.
курсовая работа [593,3 K], добавлен 03.01.2015Система счисления как способ записи информации с помощью заданного набора цифр. История развития различных систем счисления. Позиционные и непозиционные системы. Вавилонская, иероглифическая, римская система счисления. Система счисления майя и ацтеков.
презентация [3,2 M], добавлен 05.05.2012Непозиционные системы счисления как один из этапов общечеловеческого развития счета. Египетская система счисления как непозиционная система счисления, которая употреблялась в Древнем Египте вплоть до начала X века н.э. Греческая система счисления.
реферат [252,9 K], добавлен 19.05.2019Современные достижения компьютерных технологий. Основные принципы создания и отличительные признаки печатных учебников. Создание электронного учебного пособия по теме "Системы счисления и логическая алгебра" в среде программирования Visual Basic 6.0.
курсовая работа [1,3 M], добавлен 24.04.2014Структуры вычислительных машин и систем. Фон-неймановская архитектура, перспективные направления исследований. Аналоговые вычислительные машины: наличие и функциональные возможности программного обеспечения. Совокупность свойств систем для пользователя.
курсовая работа [797,5 K], добавлен 05.11.2011Обработка информации и вычислений в вычислительной машине. Непозиционные и позиционные системы счисления. Примеры перевода десятичного целого и дробного числа в двоичную систему счисления. Десятично-шестнадцатеричное и обратное преобразование чисел.
контрольная работа [41,2 K], добавлен 21.08.2010Предмет, постановка и особенности задач дискретного программирования. Задачи с неделимостями и с разрывными целевыми функциями. Экстремальные комбинаторные задачи. Примеры решений задач дискретного программирования методом ветвей и границ, методом Гомори.
курсовая работа [211,3 K], добавлен 22.05.2013Исследование принципа работы основных логических элементов цифровых устройств. Описания вычислительных машин непрерывного и дискретного действия. Инверсия конъюнкции, дизъюнкции и равнозначности. Разработка программы, реализующей логические операции.
практическая работа [230,8 K], добавлен 25.03.2015Появление первых вычислительных машин и возникновение "стихийного" программирования. Структурный подход к декомпозиции сложных систем. Развитие модульного и объектно-ориентированного программирования. Особенности компонентного подхода и CASE-технологий.
презентация [1,5 M], добавлен 14.10.2013Команды вычислительной машины, которые интерпретируются микропроцессором или микропрограммами. Правила для записи чисел цифровыми знаками. Способы кодирования информации. Практическое применение машинных кодов, систем счисления, кодировки информации.
курсовая работа [1,6 M], добавлен 15.03.2015