Меню сайта

Урок 147. Прямой доступ у памяти

Плата адаптера дисковода устроена фирмойIBM так, что она
— — — использует возможность прямого доступа впамять системы (ПДП).
— — — Прямой доступ в память позволяет устройствуввода-вывода передавать
— — — данные непосредственно в память или изнее. При этом микропроцессор
— — — не «касается» данных. Принтер,например, требует передачи каждого
— — — печатаемого символа самиммикропроцессором. В случае же обмена с
— — — дискетой микропроцессор был бы тяжелойобузой для достаточно
— — — быстрой передачи данных. Программамикропроцессора для передачи
— — — данных дисковода была бы очень похожа напрограмму Фиг. 8.15, где
— — — символы посылались в принтер. То естьпрограмма должна была бы
— — — читать бит RQM, в цикле, чтобы проверитьналичие очередного байта
— — — данных. Тем не менее, если микропроцессорне ответит дисководу
— — — достаточно быстро, то данные будутпотеряны.

— — — — — В случае передачи данных с помощью ПДПмикропроцессор должен
— — — только инициировать операцию. Всеостальное выполняет контроллер
— — — ПДП 8237 фирмы Intel, расположенный насистемной плате. В случае
— — — чтения с дискеты программа инициализируетПДП для обслуживания
— — — передачи данных. Затем программа посылаеткоманду в контроллер
— — — дисковода, чтобы он выполнил чтение. Вовремя выполнения программа
— — — не должна передавать данные, так как этуработу выполняет
— — — контроллер ПДП. Когда операциязавершается, программа выполняет
— — — фазу обработки результата, как и раньше.

— — — — — Давайте посмотрим, как нужно настраиватьПДП на операцию чтения
— — — с дискеты. На Фиг. 8.21 показанапрограмма, предназначенная для
— — — этой цели. ПДП имеет четыре канала.Дисковод подключен к каналу 2
— — — ПДП. Каналы 1 и 3 доступны через системныйканал ввода-вывода для
— — — других устройств ввода-вывода, а канал 0используется для очень
— — — важной аппаратной функции — поддерживаниярегенерации памяти. Если
— — — вы вмешаетесь в работу канала 0 ПДП,содержимое всей памяти
— — — системы, вероятнее всего, изменится.

— — — — — Каждый канал ПДП имеет два регистра:адресный регистр и регистр
— — — счетчика. Регистр адреса задает областьпамяти, куда передаются
— — — данные. В нашем случае операции чтения,значение в регистре адреса
— — — указывает начало буфера данных. Когдаконтроллер дисковода читает
— — — байт с дискеты, контроллер ПДП помещаетэтот байт в память по
— — — адресу, определяемому регистром адреса.После каждого байта
— — — контроллер ПДП увеличивает адресныйрегистр так, что он указывает
— — — на следующий байт буфера.

— — — — — На Фиг. 8.21 BUFFER — имя области данных.Программа определяет
— — — абсолютный адрес буфера BUFFER в системе.Для этого она прибавляет
— — — смещение BUFFER к сдвинутому (умноженномуна 16) значению регистра
— — — CS, который содержит значение сегментабуфера. Затем программа
— — — помещает младшие 16 бит адреса в регистрадреса ПДП канала 2.
— — — Старшие 4 бита адреса помещаются вспециальный регистр «страницы».
— — — В — действительности контроллер ПДП 8237работает только с
— — — 16-битовым адресом. В IBM PC этот регистрстраницы добавлен для
— — — того, чтобы программа могла читать данныев любое место памяти.
— — — Имеется три регистра страницы, по одномудля каналов 1, 2 и 3.
— — — Регистр страницы имеет размер всего 4бита, и поэтому старшие биты
— — — регистра AL не играют роли приформировании физического адреса
— — — буфера данных.

— — — — — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — — — — 1/1/8004:06:09
— — — — — — — — — — — -Фиг. 8.21 Настройка прямого доступа в память — — — — — — — — — — — -Page — — — — 1-1

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -PAGE ,132
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -TITLE — — — — — Фиг. 8.21 Настройка прямого доступа в память

— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — — — — — — STACK&
nbsp- — — — — SEGMENT STACK
— — — — — — — — — — — -0000 — — — — — 0040[ — — — — — — — — — — — — — — — — — — DW — — 64 DUP (?)
— — — — — — — — — — — — — — — — — — — — ????
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ]
— — — — — — — — — — — -0080 — — — — — — — — — — — — — — — — — — — — — — — STACK — — — — — ENDS

— — — — — — — — — — — -= 0000 — — — — — — — — — — — — — — — DMA — EQU — 0 — — — — — — — — — — Адрес порта DMA
— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — — — — — — CODE SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -ASSUME -CS:CODE
— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — — — — — — DMA_SET PROC — — — — FAR
— — — — — — — — — — — -0000 — — — — — 1E — — — — — — — — — — — — — — — — — — — — — PUSH DS — — — — — — — — — Адрес возврата
— — — — — — — — — — — -0001 — — — — — 2B C0 — — — — — — — — — — — — — — — — — — SUB — AX, AX
— — — — — — — — — — — -0003 — — — — — 50 — — — — — — — — — — — — — — — — — — — — — PUSH AX

— — — — — — — — — — — -0004 — — — — — B0 46 — — — — — — — — — — — — — — — — — — MOV — AL, 46H — — — — Установка DMA врежим чтения с дискеты
— — — — — — — — — — — -0006 — — — — — E6 0B — — — — — — — — — — — — — — — — — — OUT — DMA+11, AL — — в память
— — — — — — — — — — — -0008 — — — — — E6 0C — — — — — — — — — — — — — — — — — — OUT — DMA+12, AL
— — — — — — — — — — — -000A — — — — — 8C C8 — — — — — — — — — — — — — — — — — — MOV — AX, CS — — — — Текущий адрес сегмента
— — — — — — — — — — — -000C — — — — — B1 04 — — — — — — — — — — — — — — — — — — MOV — CL, 4
— — — — — — — — — — — -000E — — — — — D3 C0 — — — — — — — — — — — — — — — — — — ROL — AX, CL — — — — Умножение на 16
— — — — — — — — — — — -0010 — — — — — 8A E8 — — — — — — — — — — — — — — — — — — MOV — CH, AL — — — — Старшие 4 разряда в регистре CH
— — — — — — — — — — — -0012 — — — — — 24 F0 — — — — — — — — — — — — — — — — — — AND — AL, 0F0H — — — Очистка младшихразрядов
— — — — — — — — — — — -0014 — — — — — 05 0032 R — — — — — — — — — — — — — — ADD — AX, offset BUFFER — — — — — -Прибавление адреса буфера
— — — — — — — — — — — -0017 — — — — — 80 D5 00 — — — — — — — — — — — — — — — ADC — CH, 0
— — — — — — — — — — — -001A — — — — — E6 04 — — — — — — — — — — — — — — — — — — OUT — DMA+4, AL — — Вывод младшегобайта адреса
— — — — — — — — — — — -001C — — — — — 8A C4 — — — — — — — — — — — — — — — — — — MOV — AL, AH
— — — — — — — — — — — -001E — — — — — E6 04 — — — — — — — — — — — — — — — — — — OUT — DMA+4, AL — — Вывод старшегобайта адреса
— — — — — — — — — — — -0020 — — — — — 8A C5 — — — — — — — — — — — — — — — — — — MOV — AL, CH
— — — — — — — — — — — -0022 — — — — — E6 81 — — — — — — — — — — — — — — — — — — OUT — 081H, AL — — — Установка регистрастраницы

— — — — — — — — — — — -0024 — — — — — B8 01FF — — — — — — — — — — — — — — — -MOV — AX, 511 — — — — Счетчик на один сектор
— — — — — — — — — — — -0027 — — — — — E6 05 — — — — — — — — — — — — — — — — — — OUT — DMA+5, AL — — Младший байтсчетчика
— — — — — — — — — — — -0029 — — — — — 8A C4 — — — — — — — — — — — — — — — — — — MOV — AL, AH
— — — — — — — — — — — -002B — — — — — E6 05 — — — — — — — — — — — — — — — — — — OUT — DMA+5, AL — — Старший
байтсчетчика
— — — — — — — — — — — -002D — — — — — B0 02 — — — — — — — — — — — — — — — — — — MOV — AL, 2 — — — — — — — — — — — — Открытьдля прямого доступа канал 2
— — — — — — — — — — — -002F — — — — — E6 0A — — — — — — — — — — — — — — — — — — OUT — DMA+10, AL
— — — — — — — — — — — -0031 — — — — — CB — — — — — — — — — — — — — — — — — — — — — RET
— — — — — — — — — — — -0032 — — — — — — — — — — — — — — — — — — — — — — — DMA_SET ENDP
— — — — — — — — — — — -0032 — — — — — 0200[ — — — — — — — — — — — — BUFFER — DB 512 DUP (?) — — — — — — Буфер для чтения с диска
— — — — — — — — — — — — — — — — — — — — — ??
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ]
— — — — — — — — — — — -0232 — — — — — — — — — — — — — — — — — — — — — — — CODE ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -END

— — — — — — — — — — — -Фиг. 8.21 Настройка прямого доступа в память
— — — — — Программа также посылает в контроллер ПДПчисло передаваемых
— — — байт данных. Контроллер дисководаиспользует это значение,
— — — записанное в регистр счетчика канала 2,для завершения операции
— — — чтения данных. ПДП посылает устройствуспециальный управляющий
— — — сигнал, называемый завершением счета,когда оно записывает в память
— — — последний байт. Последняя команда,выдаваемая ПДП — разрешение
— — — работы канала 2. Теперь программа можетвойти в командную фазу
— — — контроллера дисковода.

— — — — — Адаптер дисковода соединяет множествокомпонентов программного
— — — и аппаратного обеспечение компьютера.Адаптер дисковода использует
— — — и ПДП, и прерывания для обслуживанияработы дисковода. Сам по себе
— — — контроллер дисковода — сложное,»интеллектуальное» устройство
— — — управления, требующее получения»программы» перед началом работы. В
— — — следующей главе при обсуждении управлениямеханизмом дисковода с
— — — помощью программы BIOS все это будетрассмотрено в комплексе.

Категория: Программирование на Ассемблере | Дата: 06.03.13

Меню раздела
Блок