- •4) Mov esi,6*2 ; 2 байта – размер элементов
- •Индексная адресация со смещением — режим адресации, при котором полный адрес формируется из двух компонентов:
- •Базовая индексная адресация со смещением — режим адресации, при котором полный адрес формируется максимум из трех компонентов:
- •Xor ecx,ecx ;обнуление есx
- •Структуры
- •Организовать обращение к элементам структуры.
- •Цепочечные команды или команды обработки строк символов
- •Организация обращения к элементам записи.
- •Работа с записями
- •1) Для выделения элемента записи необходимо:
- •2) Чтобы поместить измененный элемент на его место в запись необходимо:
- •3. В конце работы файл следует закрыть.
- •4. Признаком ошибки при выполнении функции dos является взведенный флаг с (переноса).
- •2. Создание файла с усечением существующего до нулевой длины.
- •LpFileName — указатель на asciiz-строку с именем (путем) открываемого или создаваемого файла;
- •DwDesiredAccess — тип доступа к файлу:
- •3) Создать и открыть новый файл
- •4) Чтение из файла или устройства
- •5) Переместить указатель чтения/записи
- •1) HFile – хэндл того файла, в котором перемещается указатель.
- •7) Запись в файл или устройство
- •8) Закрыть файл
- •9) Удаление файла
- •Функция 01h – ожидание ввода символа с эхопечатью
- •Функция 0ah – получение строки символов
- •1) Создать каталог
- •2) Удалить каталог
- •5) Определить текущий каталог
- •Перечень функций прерывания 21h, работающих с файлами, которые имеют длинные имена и соответствующие функции api Win32.
- •Перечислим функции api Win32, имеющие отношение к работе с файловой системой.
- •1) В Win32 получить время создания, время последнего доступа и время последней модификации файла можно с помощью функции GetFileTime.
- •3) В Win32 имеется функция GetFileInformationByHandle, с помощью которой можно получить все атрибуты файла:
- •Обзор прерываний bios
- •Int 10h, функция 0Dh. Чтение пиксела.
- •02H/03h - Чтение/запись секторов.
- •Прямое программирование видеобуфера в текстовом режиме
- •Текстовый режим. Доступ к памяти
- •Организация памяти в графическом режиме 12h
- •Вычисление адреса Пикселя по экранным координатам.
- •Рисование с помощью регистров Графического Контроллера
- •Установка цвета отдельных пикселей.
- •Прокрутка областей экрана, копирование областей экрана.
- •Чтение отдельных пикселей с экрана.
- •Рисование с помощью регистров Указателя Последовательности
- •Установка цвета ячейки пикселей.
Int 10h, функция 0Dh. Чтение пиксела.
Читает из видеобуфера цвет пиксела в заданной графической позиции.
При вызове:
AH=0Dh
ВН=страница
СХ=графический столбец
ВХ=графическая строка
При возврате:АL=цвет (номер цветового регистра)
0Eh - Запись символа на экран в стиле TTY.
После записи символа на экран курсор продвигается на следующую позицию, при этом обрабатываются такие управляющие символы, как BEL (подача звукового сигнала), возврат на одну позицию, перевод строки, возврат к началу строки.
0Fh - Прочитать текущий видеорежим.
Если необходимо изменить видеорежим, то можно сохранить старый видеорежим, получив его с помощью этой функции.
Кроме того, функция возвращает количество столбцов на экране и номер текущей активной дисплейной страницы.
13h - Запись строки.
Для машин класса AT и выше при наличии дисплейных адаптеров EGA или VGA эта функция позволяет вывести на экран произвольную строку символов заданной длины, с заданным атрибутом и в заданном месте экрана. Можно также задать номер дисплейной страницы.
Если вы не можете использовать эту функцию (Ваш компьютер - XT или дисплейный адаптер - CGA), единственный способ вывести на экран строку символов с помощью прерывания INT 10h - вызывать в цикле функции 09h, 0Ah или 0Eh для вывода строки по одному символу.
______________________________________________________________________________
Пример 2. Программа выводит на экран синусоиду в режиме 13h.
; Рисуем синусоиду в графическом режиме 13h
; также рисуем координатные оси
; синус определяем как sin(z)=((2*tan(z))/(1+tan(z)*tan(z)))
masm
model small
.stack 100h
.data
B Dd 0
Y dd ?
X dw ?
B1 dd 0
D1 dd 2.0
MASSHTAB dd 10.0
saveMode db ? ; Сохранить текущий видео режим
currentX dw 100 ; координата X
currentY dw 0 ; координата Y
color db 1 ; номер цвета
step dd 0.1
.code
start:
mov ax,@data
mov ds,ax
; Получить и сохраняем текущий видео режим
mov ah,0Fh
int 10h
mov saveMode,al
; Переключиться в графический режим
mov ah,0h
mov al,13h
int 10h
finit
FLD B1
mov cx,220; ; счетчик цикла
L1:
FPTAN
FLD ST(1)
FLD ST(0)
FMUL
FADD
FLD ST(0)
FLD ST(2)
FLD D1
FMUL
FLD ST(1)
FDIV
FLD MASSHTAB
FMUL
FLD ST(0)
FRNDINT
fist Y
mov ax,word ptr[Y]
mov bx,100
sub bx,ax
mov dx,bx ; в dx записываем точку Y
push cx
mov ah,0Ch ; рисование точки
mov al,color ; цвет точки
mov bh,0 ; видео страница
mov cx,currentX ; в cx записываем точку X
int 10h
inc currentX
inc color ; используйте для разноцветной линии
pop cx
finit
fld B
FLD step
fadd
fst B
loop L1
;Рисуем координатную ось OX
mov cx,320
L2:
mov dx,100 ; в dx записываем точку Y
push cx
mov ah,0Ch ; рисование точки
mov al,3 ; цвет точки
mov bh,0 ; видео страница
mov cx,currentX ; в cx записываем точку X
int 10h
inc currentX
pop cx
loop L2
;--------------------------------------------------------
;Рисуем координатную ось OY
mov cx,200
L3:
push cx
mov cx,100 ; в cx записываем точку X
mov ah,0Ch ; рисование точки
mov al,3 ; цвет точки
mov bh,0 ; видео страница
mov dx,currentY ; в dx записываем точку Y
int 10h
inc currentY
pop cx
loop L3
;--------------------------------------------------------
; Ожидаем нажатия клавиши
mov ah,0
int 16h
; Возврат в прежний видео режим
mov ah,0 ; установить видео режим
mov al,saveMode ; сохраненный видео режим
int 10h
exit: ;выход
mov ax,4c00h ;стандартное завершение программы
int 21h
end start
______________________________________________________________________________
Обслуживание клавиатуры.
Обработчик прерывания INT 16h выполняет несколько функций, связанных с обслуживанием клавиатуры.
Символы, введенные с клавиатуры, помещаются в специальный клавиатурный буфер. Функция ввода символа без ожидания нажатия на клавишу проверяет состояние буфера - есть в нем символы, или нет. Если в буфере есть символы, первый помещенный в буфер символ возвращается программе. Этот символ затем может быть считан функцией ввода с ожиданием нажатия - фактически ожидания при этом не будет.
Для очистки буфера клавиатуры также можно использовать пару описанных выше функций: сначала программа проверяет пуст ли буфер, и, если он не пуст, считывает символ. Считанный символ никуда не помещается (теряется). После считывания символа программа опять проверяет содержимое буфера и так до тех пор, пока клавиатурный буфер не окажется пустым.
Обслуживание дисковой подсистемы.
Прерывание INT 13h предназначено для обслуживания жестких и флоппи-дисков. Многочисленные функции прерывания INT 13h выполняют все операции по вводу/выводу на диски. Мы сделаем обзор только самых важных функций, остальные будут рассмотрены в книге 3, посвященной файловой системе.
00h - Сброс дисковой системы.
Эта функция выполняет установку в исходное состояние всей дисковой системы или выбранного дискового устройства. Используется обычно перед началом работы с устройством.
01h - Получить состояние дисковой системы.
Эта функция позволяет проверить результат выполнения предыдущей операции. Если операция завершилась аварийно, при помощи этой функции можно определить код ошибки.