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

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

C/C++ в Cygwin

Эта короткая заметка — о том, как начать программировать на языках C и C++ в среде Cygwin. Об установке Cygwin читайте тут. Установка средств разработки Чтобы начать программировать, вам понадобятся компиляторы соответствующих языков и отладчик; пригодится также утилита make. Поэтому запустите программу установки Cygwin (setup.exe) и в диалоге Select Packages выберите следующие пакеты из категории Devel: gcc-core: GNU Compiler Collection (C, OpenMP) gcc-g++: GNU Compiler Collection (C++) gdb: The GNU debugger make: The GNU version of the ‘make’ utility Установите Читать дальше …

Публикация сайта в Интернете

В предыдущих заметках я рассказывал о том, как создать блог на домашнем ПК на движке WordPress. После того, как я определился с темой для сайта, необходимыми плагинами и написал несколько постов, я собираюсь разместить сайт в Интернете. Для этого мне надо Зарегистрировать доменное имя Разместить сайт на веб-хостинге О том, как это делается я прочитал в книге Андрей Грачев — Создаем свой сайт на WordPress быстро, легко и бесплатно. Работа с CMS WordPress 3 — 2011 — Глава 2. Выбор Читать дальше …

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

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

.NET/C# для начинающих (Часть 2 — Что такое .NET)

В предыдущей заметке я рассказывал, как написать на языке C# консольную программу HelloWorld и графическую программу на основе библиотеки WPF. Я сразу начал с программирования, так как мне не хотелось начинать рассказ о платформе .NET с голой теории… которую я и изложу очень кратко в настоящей заметке. Основным источником вдохновения для меня служила книга Jeffrey Richter — CLR via C# — 2012. Что такое .NET? Это платформа для разработки приложений, которая состоит из двух частей: виртуальная машина (Common Language Runtime Читать дальше …

.NET/C# для начинающих (Часть 1 — HelloWorld)

В этой заметке я расскажу, как построить две очень простые программы на платформе .NET. Первая программа будет консольная (Console User Interface — CUI), вторая — графическая (Graphical User Interface — GUI) на базе библиотеки Windows Presentation Foundation (WPF). Разговор о том, что вообще такое платформа .NET, отложим до следующей заметки. Средства разработки Вы можете установить графическую среду разработки Visual Studio, но я предпочитаю начинать изучение с по возможности самых низкоуровневых средств разработки, которые запускаются из командной строки, так как они, Читать дальше …

Изучаем архитектуру 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++) ничего не знают. Поэтому — ассемблер. В следующей серии заметок Читать дальше …