Чтение значения счетчика времени

Примеры небольших подпрограмм на Ассемблере

· Чтение строки с клавиатуры

· Перевод чисел в двоичную форму (в виде строки)

· Чтение значения счетчика времени

· Определение типа процессора

· Установка видеорежимов VGA

· Запись напрямую в видеопамять

· Рисование пиксела в различных режимах VGA

· Рисование в SVGA

· Линейные преобразования в системах с фиксированной точкой

· Функция синуса в 32-битной системе с фиксированной точкой

· Таблица расположения файлов FAT

· Выполнение дочерней программы

· Чтение параметров командной строки

· TSR: Завершаемся и остаемся в памяти

· Проверка готовности накопителя

KbdInput$ proc ;POW35

; Входные данные: смещение строки в AX

; Выходные данные: строка ASCIIZ, прочитанная с клавиатуры. Регистры не сохраняются.

mov DI,AX ;смещение строки

mov DX,AX ;смещение буфера

mov CX,255 ;максимальное количество читаемых символов

mov BX,0 ;файловый хэндл клавиатуры

mov AH,3Fh ;читаем из файла (фактически - с клавиатуры)

int 21h

jc Input$_error ;если ошибка

dec AX ;убираем символ RETURN

add DI,AX ;смещение байта, расположенного в конце строки

Input$_error:

mov [DI],BL ;завершаем строку, записывая 0 в конец строки

ret

KbdInput$ endp

Перевод чисел в двоичную форму (в виде строки)

Данная процедура конвертирует 16-битное слово в строку ASCIIZ, т.е. число 7 преобразовывается в строку 0000000000000111. Лидирующие нули включаются в строку. Строка ASCIIZ - это набор символов, завершающихся 0.

NmbrToBi$ proc ;POW36

;Входные данные: AX - смещение строки, BX - число, которое необходимо преобразовать

;Выходные данные: Строка ASCIIZ. Регистры не сохраняются.

mov DI,AX ;смещение строки

mov DX,8000h ;проверочное слово, 1 в позиции 15

mov CX,16 ;обрабатываем 16 бит

NumberTo_B0:

mov AL,48 ;символ '0'

test BX,DX ;бит равен 1?

jz NumberTo_B

inc AL ;символ '1'

NumberTo_B:

stosb ;записываем в строку '1' или '0'

shr DX,1 ;сдвигаем тестовый бит вправо

loop NumberTo_B0

mov [DI],DL ;завершаем строку 0

ret

NmbrToBi$ endp

Чтение значения счетчика времени

В памяти по адресу 40:6C расположено двойное слово, которое увеличивается на единицу приблизительно 18.2 раза в секунду. Системное время можно получить, считывая это слово. Младший байт может быть использован для многих "временных" задач, в т.ч. в качестве исходного значения для генератора псевдослучайных чисел (а в некторых случаях и заменить его).

GetTicks proc ;POW37

; Входные данные: нет

; Выходные данные: Младший байт счетчика времени в AX

; Регистры не сохраняются.

mov BX,ES ;Сохраняем адрес дополнительного сегмента

mov AX,40h ;сегмент данных BIOS

mov ES,AX

mov AX,ES:[6Ch] ;читаем счетчик

mov ES,BX ;восстанавливаем регистр ES

ret

GetTicks endp

Наши рекомендации