"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу автора 16H память на системной плате (старший байт)
17H общая память (младший байт) 18H общая память (старший байт) 30H память сверх 1 мегабайта (младший байт) 31H память сверх 1 мегабайта (старший байт) Высокий уровень. В данной книге имеется множество примеров доступа к этим пор- там. Ниже приводится программа на Бейсике, устанавливающая число дисковых накопителей, присоединенных к IBM PC. Прежде чем прочи- тать два старших бита порта A, бит 7 порта B должен быть установ- лен в 1. Существенно, что Вы должны вернуть значение этого бита назад в 0 перед дальнейшей работой, иначе клавиатура будет запер- та и для восстановления работоспособности машины Вам придется выключить ее. Бейсик не позволяет двоичное представление чисел, что затрудняет работу с цепочками битов. Простая подпрограмма может заменить любое целое вплоть до 255 (максимальное значение, которое может принимать номер порта) на восьмисимвольную двоичную строку. После этого строковая функция MID$ позволяет вырезать нужные биты для анализа. Основы битовых операций в Бейсике описа- ны в приложении Б. 100 A = INP(&H61) 'получаем значение из порта B 110 A = A OR 128 'устанавливаем бит 7 130 B = INP(&H60) 'получаем значение из порта A 140 A = A AND 128 'сбрасываем бит 7 150 OUT &H61,A 'восстанавливаем значение порта B 160 GOSUB 1000 'преобразуем в двоичную строку 170 NUMDISK$ = RIGHT$(B$,1) 'получаем нулевой бит 180 IF D$ = 1 THEN NUMDISK = 0: GOTO 230 'нет дисков 190 C$ = LEFT$(B$,2) 'берем два старших бита строки 200 TALLEY = 0 'переменная для числа дисков 210 IF RIGHT$(C$,1) = "1" THEN TALLEY = 2 'берем старший бит 220 IF LEFT$(C$,1) = "1" THEN TALLEY = TALLEY + 1 'и младший 230 TALLEY = TALLEY + 1 'счет начинается с 1, а не с 0 'теперь имеем число накопителей 1000 '''Подпрограмма преобразования байта в двоичную строку 1010 B$ = "" 'заводим строку 1020 FOR N = 7 TO 0 STEP -1 'проверка очередной степени 2 1030 Z = B - 2^N 1040 IF Z >= 0 THEN B = Z: B$ = B$+"1" ELSE B$ = B$+"0" 1050 NEXT 'повторяем для каждого бита 1060 RETURN 'все закончено Низкий уровень. Ассемблерная программа получает число имеющихся дисковых нако- пителей тем же способом, что и в вышеприведенном примере, но |
|
|