Работа с клавиатурой AT и PS/2

В заметке об обработке прерываний мы столкнулись с контроллером клавиатуры. Работа с контроллером клавиатуры заслуживает отдельной заметки. Вот она. Литература Сразу представлю список источников: Adam Chapweske — The AT-PS/2 Keyboard Interface — 2001. Ying-Wen Bai and Hsiu-Chen Chen — Design of Implementation of a Compatible Keyboard Controller for Keyboards and Mice — 2006. Всеволод Несвижский — Программирование аппаратных средств в Windows — БХВ-Петербург, 2004. Глава 3 — Клавиатура, раздел 3.3. Использование портов. А. И. Поворознюк — Архитектура компьютеров. Архитектура микропроцессорного Читать дальше …

Изучаем архитектуру Intel x86-64 при помощи ассемблера (Часть 5 — Прерывания)

После того как в предыдущей заметке мы написали загрузчик, мы не ограничены в размере кода нашей программы. Вернемся теперь снова к логике повествования книги Руслана Аблязова — Программирование на ассемблере на платформе х86-64 — 2011. В сегодняшней заметке реализуем обработку прерываний в защищенном режиме, которая рассмотрена в разделе книги 2.2. Прерывания в защищенном режиме. Что такое прерывание Прерывания — это механизм, при помощи которого программа (вероятнее всего — операционная система), которую выполняет процессор, может реагировать на различные события. События бывают Читать дальше …

Изучаем архитектуру Intel x86-64 при помощи ассемблера (Часть 4 — Загрузчик)

В предыдущей заметке мы успешно перешли в защищенный режим процессора Intel x86. Прежде чем нам двинуться дальше в изучении защищенного режима, нам надо решить одну проблему. Загрузочный сектор, который загружается в оперативную память при старте компьютера и в котором находится наша программа, имеет размер всего 512 байт. Скоро нам перестанет хватать этого размера. Поэтому мы должны научиться загружать в оперативную память секторы с дискеты, на которой находится наша программа. Программа, которая умеет это делать, называется bootloader. Вот его мы и Читать дальше …

Изучаем архитектуру Intel x86-64 при помощи ассемблера (Часть 3 — Переход в защищенный режим)

В предыдущих заметках мы запускали программу HelloWorld на голом железе. Непосредственно после старта процессор x86 находится в т. н. реальном режиме работы процессора (real mode). Этот режим имеет следующие особенности: Режим 16-разрядный, т. е. длина машинного слова в нем равна 16 битам. 20-разрядный физический адрес памяти, что позволяет адресовать не более 1 мегабайта оперативной памяти. Сегментная адресация памяти: физический адрес = линейный адрес = segreg * 16 + offset, где физический адрес — это то число, которое выдается процессором на Читать дальше …

Консольная программа для Windows на языке ассемблера

В предыдущих заметках я начал писать программы, которые стартуют на ПК без операционной системы, будучи загруженными с дискеты. Программы эти я компилировал ассемблером flat assembler (FASM). В настоящей заметке мне захотелось сделать небольшое отступление и написать о том, как при помощи FASM можно писать программы пользовательского режима для Windows. Знание того, как это делается позволяет изучать программирование на ассемблере как таковое, не заморачиваясь написанием своей собственной операционной системы. Я преподаю студентам программирование на ассемблере Intel x86 с использованием компилятора Microsoft Читать дальше …

Изучаем архитектуру Intel x86-64 при помощи ассемблера (Часть 2 — Настройка проекта osdevlearning)

В предыдущей заметке я рассказывал о том, как написать на ассемблере программу HelloWorld, которая будет запускаться на голом железе (без операционной системы), как скомпилировать ее и записать образ загрузочной дискеты, и как заставить виртуальную машину загружаться с этой дискеты. Я собираюсь и дальше писать подобные программы. Каждая последующая программа будет делать что-то новое по сравнению с предыдущими. Но для начала я собираюсь немного систематизировать процесс разработки этих программ. Я создал удаленный репозиторий под названием osdevlearning. О том, как создать репозиторий, Читать дальше …

Изучаем архитектуру Intel x86-64 при помощи ассемблера (Часть 1 — Hello World на голом железе)

Я давно хотел научиться писать операционную систему или хотя бы попробовать эту задачу на зуб. Почему ОС начинают писать на языке ассемблера? Дело в том, что работа ОС обеспечивается определенными особенностями архитектуры процессора. Это, например, наличие нескольких уровней привилегий (режим ядра, режим пользователя), поддержка виртуальной памяти, поддержка многозадачности. Работа с этими особенностями архитектуры процессора подразумевает использование таких машинных команд и регистров процессора, о которых компиляторы высокоуровневых языков программирования (например C/C++) ничего не знают. Поэтому — ассемблер. В следующей серии заметок Читать дальше …