- •1. Представление данных в компьютере: двоичная, шестнадцатиричная системы исчисления, числа со знаком.
- •2.Организация памяти. Модели памяти.
- •3. Регистровая структура процессоров Intel ix86: регистры общего назначения, сегментные регистры, регистр флагов.
- •4. Директивы определения данных
- •5. Способы адресации: регистровая, непосредственная, прямая, косвенная.
- •6. Текстовый и графический режимы видеопамяти. Адресное пространство. Вывод символов и пикселей на экран. Примеры.
- •7. Структура стека. Команды для работы со стеком. Синтаксис. Примеры.
- •8. Прерывания.
- •9. Функции dos: ввод с клавиатуры, печати строки, завершение инициализации.
- •10. Команды двоичной арифметики
- •11. Команды десятичной арифметики языка assembler. Синтаксис. Примеры.
- •12. Логические команды языка ассемблер. Синтаксис. Примеры.
- •13. Команды пересылки данных. Синтаксис. Примеры. Оператор ptr.
- •14. Сдвиговые операторы. Синтаксис.
- •15. Безусловный переход
- •16. Команды сравнения и передачи управления.
- •17. Организация циклов. Синтаксис. Примеры.
- •18. Строковые команды. Синтаксис.
- •19. Расширение mmx
- •20. Структура резидентных программ. Загрузка и выгрузка резидентной программы.
- •21. Драйверы устройств dos. Формат и загрузка драйвера устройства.
- •Символьные устройства осущ-ют послед. Ввод/вывод. Такими устройствами являются console, последовательный порт, часы и принтер.
- •22. Программирование на уровне портов ввода/вывода. Системный таймер.
- •23.Команды ввода-вывода
- •24. Переферийные устройства. Структура fdd, hdd, cd-rom.
23.Команды ввода-вывода
Все устройства ЭВМ принято делить на внутренние и внешние. Внутренние устройства - это центральный процессор (ЦП) и оперативная память, а внешние -все остальные устройства (внешняя память, клавиатура, дисплей, принтер и т. д.). В широком смысле, под вводом-выводом понимается обмен информацией между ЦП и любым внешним устройством. При этом "отсчет" ведется от ЦП: ввод - это передача данных в ЦП из внешнего устройства, а вывод - передача данных из ЦП во внешнее устройство.
В ПК передача информации между ЦП и внешними устройствами, как правило, осуществляется через порты. Порт - это некоторый регистр размером в байт или слово, причем этот регистр находится вне ЦП и не имеет никакого отношения к обычным регистрам типа AX, SI и т. п. Вообще-то все порты являются байтовыми, но два соседних порта рассматриваются как порт размером в слово. Порты нумеруются, их номера - от 0 до 0FFFFh. Таким образом, потенциально может быть 65536 портов, однако реально их значительно меньше (несколько десятков). С каждым внешним устройством связан свой порт или несколько портов, их номера заранее известны.
Как ЦП, так и внешнее устройство может записывать информацию в порт и может считывать из него. Со стороны ЦП (а точнее, той программы, которую он выполняет) эти операции осуществляются с помощью следующих машинных команд:
Чтение из порта (ввод): IN AL,n или IN AX,n
Запись в порт (вывод): OUT n,AL или OUT n,AX
По команде IN в регистр AL(AX) переносится содержимое порта с номером n, а команда OUT реализует обратное действие: в порт с номером n записывается содержимое регистра AL(AX).
Номер порта (n) в этих командах может быть задан двояко - либо явным числом от 0 до 255, либо регистром DX, значение которого и трактуется как номер порта. Например:
IN AL,97h ;AL:= порт 97h
MOV DX,836
OUT DX,AX ;порт 836:=AX
Первый вариант операнда n используется, когда номер порта небольшой и известен заранее, а второй вариант - когда номер порта может быть любым или когда он становится известным только во время счета программы.
Сценарий ввода-вывода через порты существенно зависит от специфики того внешнего устройства, с которым ведется обмен, но достаточно типичным является следующий сценарий.
Часто ЦП связан с внешним устройством двумя портами: через один передаются данные - это порт данных, а через другой пересылается всякого рода управляющая информация - это порт управления. Когда ЦП (а точнее, программа, которую он выполняет) хочет начать обмен с каким-то внешним устройством, то он записывает в порт управления этого устройства определенную комбинацию битов, которая трактуется как призыв к установлению связи. Если устройство функционирует и не занято, то в ответ оно записывает в этот порт другую комбинацию битов, сигнализирующую о том, что оно готово к обмену. ЦП же, выждав определенное время, считывает информацию из порта и, если там оказался сигнал о том, связь установлена, начинает собственно обмен.
Пусть ЦП хочет что-то вывести. Тогда он записывает в порт управления комбинацию символов, трактуемую как команда "выводи", а в порт данных - выводимую величину (например, код символа). Внешнее же устройство, считав из портов эту информацию, записывает в порт управления сигнал "занято" и начинает собственно вывод (например, печатает символ на бумаге). В это время ЦП либо переходит в состояние ожидания, опрашивая (считывая) в цикле порт управления, либо занимается другой работой - до тех пор, пока в порте управления не сменится сигнал "занято". Когда внешнее устройство закончит вывод, то оно записывает в этот порт сигнал об успешном завершении своей работы или сигнал об ошибке (например, порвалась бумага в принтере). Далее ЦП продолжает свою работу (например, осуществляет следующую операцию обмена) или как-то реагирует на сбой в работе устройства.
Осуществлять подобным образом ввод-вывод в каждой программе - занятие трудоемкое. Оно требует знания многих технических деталей - номеров портов, управляющих сигналов и сигналов ответа, порядка опроса портов и т. п., причем эта информация различна для разных внешних устройств. А, кроме того, в каждой новой программе приходится заново описывать все действия, связанные с вводом-выводом, что, конечно, накладно. В то же время в большинстве программ используются, в общем-то, одни и те же операции ввода-вывода. Учитывая все это, поступают так: один раз описываются часто используемые операции ввода-вывода, которые скрывают всю "кухню" работы с портами, и эти операции включают в состав операционной системы (ОС), постоянно находящейся в ОП, чтобы ими могла пользоваться любая программа, выполняемая на ЭВМ. Такой способ существенно упрощает жизнь программистов, поэтому обычно используют только эти операции и не пользуются портами напрямик. С портами работают лишь тогда, когда надо реализовать какой-нибудь необычный, экзотический ввод-вывод.