Методические указания по лабораторным работам по курсу «Аппаратные средства компьютерных систем», страница 32

;--- Получение значения счетчика и установка задержки

       MOV   AH,0    ;Номер функции чтения "счетчика тиков"

       INT   1AH

       ADD   DX,91   ;Добавляем требуемое число отсчетов

       MOV   BX,DX   ;Запоминаем требуемое значение в BX

;--- Проверка значения счетчика времени суток BIOS

next:  INT   1AH     ;Получаем новое значение счетчика

       CMP   DX,BX   ;Сравниваем с требуемым

       JNGE  next    ;Если не равен, то повторяем снова

quit:

Рисунок 4.6

Прерывание 1Ah может быть использовано для генерации случайных чисел. Так как значения ячеек счетчика времени постоянно изменяются, то они могут интерпретироваться как псевдослучайные числа.

Для генерации случайного числа в интервале от 0 до N надо прочитать текущее значение счетчика (или одной из его ячеек) и разделить его на N. Тем самым получится остаток в интервале от 0 до N-1. На рисунке 4.7 показан пример получения случайного числа в диапазоне от 0 до 60. Следует обратить внимание, что во избежание переполнения обнуляются три старших бита младшего байта счетчика времени, иначе деление вызывало бы переполнение всякий раз, когда содержимое этого байта превышало бы число 15555, т.е. 61*255.

limit  DB    61

       MOV   AH,0     ;Считать показания таймера

       INT   1AH

       MOV   AX,DX    ;Переместить младшую часть счетчика

       AND   AX,1FFFH ;и удалить из него старшие 3 бита

       MOV   DL,limit ;Разделить младшую часть счетчика

       DIV   DL       ;на limit

Рисунок 4.7

4.3  Описание лабораторной установки

Персональный компьютер, совместимый с  IBM PC AT, работающий под управлением ОС MS-DOS.

Инструментальные программные средства пакета Turbo Assembler фирмы Borland: компилятор tasm.exe, компоновщик tlink.exe, отладчик td.exe.


4.4  Порядок выполнения работы

Порядок выполнения работы соответствует приведенному в разделе «Общие положения».

При разработке программы под стек следует отводить не менее 64 слов. Для вывода на экран чисел рекомендуется использовать процедуру BinASCII, которая преобразует двоичное 16-разрядное число в ASCII-коды и выдает их на экран. Преобразуемое число передается в процедуру через регистр AX. После завершения работы процедуры значения всех регистров сохраняются. При этом не следует забывать о вставке оператора EXTRN BinASCII:FAR в основной процедуре.