Чтение значения счетчика времени
Примеры небольших подпрограмм на Ассемблере
· Чтение строки с клавиатуры
· Перевод чисел в двоичную форму (в виде строки)
· Чтение значения счетчика времени
· Определение типа процессора
· Установка видеорежимов 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