|
Ушел с форума
16374 / 7686 / 1080
Регистрация: 11.11.2010
Сообщений: 13,761
|
|||||||||||||||||||||||||||||||||||||||||||||||||
| 18.12.2013, 14:18 [ТС] | |||||||||||||||||||||||||||||||||||||||||||||||||
|
ГЛАВА 20 Напишем программу длиной всего 9 байт, которая (если у вас BIOS AWARD) будет сбрасывать пароль и настройки SETUP’а. Теперь сбросить пароль в BIOS’е также легко, как его поставить.РАБОТА С ПОРТАМИ ВВОДА/ВЫВОДА
Дальше команда OUT 70h,AL выводит в порт с номером 70h число из регистра AL. Порт — это как бы канал связи микропроцессора с внешним миром. Через порт микропроцессор получает сигналы от устройств ввода, либо посылает сигналы на устройства вывода. Теоретически микропроцессор управляет 65536 портами, начиная с нулевого порта. Для управления вводом-выводом непосредственно на уровне порта используются команды IN и OUT. Каждое устройство (винчестер, видео-, звуковая карта и т.д.) имеет несколько портов, через которые осуществляется управление. Порты 70h и 71h соответствуют CMOS’у. Чтобы программировать CMOS, надо сначала вывести в порт 70h то, что вы хотите изменить в CMOS’е (дата, время, настройки винчестера, пароль), а затем ввести в порт 71h новое значение (дату, время, параметры винчестера и так далее). Сначала выводим в порт 70h число 5Eh, которое означает, что мы будем изменять настройку пароля ON/OFF. Затем выводим в порт 71h ноль, что соответствует отключению пароля (чтобы пароль включить, надо вывести единицу). Кроме CMOS'а, напрямую через порты ввода/вывода можно управлять клавиатурой, системным динамиком, винчестером, флоппиком, видеоадаптером, таймерами, принтером, сканером, а также микропроцессорами для управления потоком данных. Микропроцессор IA32/64 имеет два различных физических адресных пространства: ПАМЯТЬ и ВВОД/ВЫВОД. Обычно, внешние устройства помещаются в пространстве ВВОДА/ВЫВОДА, хотя микропроцессор IA32/64 также поддерживает внешние устройства распределения памяти. Объем пространства ВВОД/ВЫВОД 64Кбайт и может быть разделен на 64К 8-разрядных портов, 32К 16-разрядных портов, 16К 32-разрядных портов или другую комбинацию устройств, которые в сумме не превышают 64 Кбайт. 64К-адресное пространство ВВОД/ВЫВОДА относится к физической памяти, а не к линейному адресу, поскольку команды ввода/вывода не проходят через устройства, выполняющие сегментацию или разбиение на страницы. Для работы памяти ВВОДА/ВЫВОДА задействована дополнительная адресная линия имеют нулевое расширение (то есть не расширяются) на верхних адресных линиях. Команды ввода/вывода вызывают цикл ожидания, так как работают гораздо медленнее микропроцессора. Адреса портов ВВОД/ВЫВОДА от 0000h до 00FFh зарезервированы для внутреннего использования фирмой Intel. Цифровые сопроцессоры также постоянно хранятся в данном пространстве ВВОДА/ВЫВОДА в ячейках: 8000000F8h-800000FCh. операционной системы Windows NT/2k/XP, порты являются критически важным разделяемым ресурсом, и механизмы защиты операционной системы не могут допустить их монополизацию каким-либо приложением. Если программе удастся получить уровень привилегий ядра (такой уровень имеют драйвера устройств), то в этом случае можно беспрепятственно использовать команды IN/OUT. Существуют специальные программы, позволяющие получить доступ к портам ввода-вывода из программы пользователя, исключая необходимость написания драйверов. Команда IN Синтаксис команды:(Ввод операнда из порта = “INPUT operand from port”) IN <аккумулятор>,<номер порта> Семантика команды: ввод значения из порта ввода-вывода. Алгоритм работы: передает байт, слово, двойное слово из порта ввода-вывода в один из регистров AL/AX/EAX. Возможные варианты команды: in eax/ax/al,dx in eax/ax/al,imm Применение: команда применяется для прямого управления оборудованием компьютера посредством портов. Номер порта задается вторым операндом в виде непосредственного значения или значения в регистре DX. Непосредственным значением можно задать порт с номером в диапазоне 0-255. При использовании порта с большим номером используется регистр DX. Размер данных определяется размерностью первого операнда и может быть байтом, словом, двойным словом. В качестве примера применения рассмотрим фрагмент обработчика прерывания от клавиатуры INT 9. Это прерывание вызывается всякий раз при нажатии любой клавиши на клавиатуре. Обработчик этого прерывания должен прочитать скан-код клавиши, подтвердить микропроцессору клавиатуры факт приема скан-кода, преобразовать этот код в соответствии с клавишами-переключателями и поместить преобразованный код в буфер клавиатуры, находящийся в области BIOS. Действия чтения и подтверждения приема скан-кода могут выглядеть, к примеру, так:
Команда OUT Синтаксис команды:(Вывод операнда в порт = “OUTPUT operand to port”) OUT <номер порта>,<аккумулятор> Семантика команды: вывод значения в порт ввода-вывода. Алгоритм работы: передать байт, слово, двойное слово из регистра AL/AX/EAX в порт, номер которого определяется первым операндом. Возможные варианты команды: out dx,eax/ax/al out imm,eax/ax/al Применение: команда применяется для прямого управления оборудованием компьютера посредством портов. Номер порта задается первым операндом в виде непосредственного значения или значения в регистре DX. Непосредственным значением можно задать порт с номером в диапазоне 0...255. Для указания порта с большим номером используется регистр DX. Размер данных определяется размерностью второго операнда и может быть байтом, словом или двойным словом.
Команды INSB/INSW/INSD Синтаксис команд:(Ввод строк байтов/слов/двойных слов из порта = “INPUT String Byte/Word/Double word operands”) INS <операнд>,<порт> INSB INSW INSD Семантика команды: ввод из порта в память последовательности байт, слов, двойных слов. Возможные варианты команды: ins(b/w/d) rep ins(b/w/d) Алгоритм работы:
в которую вводятся элементы из порта ввода-вывода. Реально это символическое имя используется лишь для получения типа элемента последовательности, а его адрес должен быть предварительно загружен в пару регистров ES:RDI/EDI/DI.
Команды OUTSB/OUTSW/OUTSD Синтаксис команд: OUTS порт,операнд(Вывод строки байтов/слов/двойных слов в порт = “OUTPUT Byte/Word/Double word String to port”) OUTSB OUTSW OUTSD Семантика команды: вывод в порт из памяти последовательности байт, слов, двойных слов. Возможные варианты команды: outs(b/w/d) rep outs(b/w/d) Алгоритм работы:
Размеры вводимых элементов зависят от применяемой команды. Команда OUTS может работать с элементами размером в байт, слово или двойное слово. В качестве операнда в команде указывается символическое имя ячейки памяти, из которой элемент выводится в порт ввода-вывода. Реально символическое имя используется лишь для получения типа элемента последовательности, а ее адрес должен быть предварительно загружен в пару регистров DS:RDI/ESI/SI. Для того чтобы эти команды можно было использовать для вывода в порт последовательности элементов, имеющих размерность байт, слово или двойное слово, необходимо использовать префикс REP. Он заставляет циклически выполняться команду вывода в порт до тех пор, пока содержимое регистра ECX/CX не станет равным нулю. Пример использования команд IN, OUT, OUTS При помощи команд IN и OUT можно управлять, например, встроенным динамиком. Динамик включается и выключается при выводе специального значения в порт управления динамиком с номером 61h, связанный с микросхемой программируемого контроллера периферийного интерфейса Intel 8255. Для включения динамика нужно прочитать байт из порта 61h, установить в единицу его два младших бита (бит 0 разрешает работу канала таймера, а бит 1 включает динамик), а затем записать полученное значение в тот же порт. Чтобы отключить динамик, нужно сбросить значение двух младших битов порта 61h.Все управление таймером осуществляется путем вывода байта в порт 43h. Назначение битов порта 43h приведены в таблице.
Таблица 20.5.1
Команды IN и OUT имеют длинный и короткий форматы. Первым операндом в команде IN, то есть операндом получателем, должен быть регистр AL/AX/EAX. Если второй операнд в команде IN – непосредственное значение числа, то команда имеет длину 2 байта и адрес занимает второй байт. Когда вторым операндом указан регистр DX, команда оказывается однобайтовой (Рис. 20.6.1). В отличии от адресации памяти содержимое DX не модифицируется никаким сегментным регистром. В длинном формате команд IN и OUT адрес порта должен находится в диапазоне от 0 до 255, а в коротком формате в диапазоне от 0 до 65535.
2
|
|||||||||||||||||||||||||||||||||||||||||||||||||
|
Новые блоги и статьи
|
|||
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|