Программирование

Программирование на ассемблере

Ниже представлены кое-какие мои студенческие наработки на языке ассемблера. В те годы мне нравилось возиться с TASM, пытаться общаться с аппаратурой на уровне портов ввода-вывода. Возможно, что-то из приведённого ниже окажется кому-то полезным. Со временем я размещу здесь код по переходу в защищённый режим и драйвер клавиатуры для оного, когда дойдут руки привести его в божеский вид, а пока только это.

Макросы общего назначения

Во многих файлах, приведённых ниже, используются вспомогательные макросы, описанные в файле commonib.inc. Кроме того, в своих программах я старался стандартизировать использование имён переменных, констант, процедур и макросов, зашифровывая в нескольких буквах назначение идентификатора, его тип и принадлежность тому или иному файлу. (С венгерской нотацией я тогда ещё не был знаком.) Не могу сказать, что везде придерживался этих соглашений, но во многих местах это вам поможет разобраться.

Здесь описание макросов, а также правила, по которым формируются имена в приведённых ниже программах.

А здесь сам файл макросов commonib.inc.

Программирование контроллера прерываний 8259A

Здесь приведено описание контроллера прерываний 8259A и высокоуровневых макросов по его программированию. Описание работы контроллера практически полностью заимствовано из книги [1]. Мной составлены только макросы для программирования контроллера и обработки прерываний.

Здесь находится сам файл макросов irq.def.

Описание системных портов

Вот описание системных портов AT-класса, а также высокоуровневых макросов по работе с ними. Через порты обеспечивается работа с различными системными устройствами клавиатурной, таймером и CMOS. Запрещаются и разрешаются немаскируемые прерывания, а также (на процессорах 486 и выше) обеспечивается задержка времени при обмене данными с портами ввода-вывода.

Это файл макросов sysports.def для работы с системными портами.

Программирование клавиатуры на уровне портов ввода-вывода

Здесь приведено описание контроллера клавиатуры и AT-клавиатуры, а также высокоуровневых макросов по работе с ней. Описание технической стороны работы клавиатуры практически полностью заимствовано из книги [1].

Сам файл макросов kbd.def, находится здесь.

Структуры данных

Макросы для работы со списками

Это макросы для ленивых, кому не хочется писать код, а просто настроить процедуры

Регистры не сохраняются практически ни где, сделано это в целях максимальной оптимизации кода

Не выполняется дефрагментация, т. к. очень из-за того, что списки могут ссылаться друг на груга довольно произвольно, учесть все ссылки довольно сложно.

Описание макросов для работы с кучей

Программирование на паскале (литературное программирование)

Приведённые ниже программы по сути являются примерами использования литературного программирования для решения практических задач. Исходные тексты находятся в файлах с расширением web. Чтобы их откомпилировать, вам понадобятся сами средства литератруного программирования, которые можно найти по адресу tex/literate.htm, а также компилятор языка паскаль, который можно скачать по адресу www.freepascal.com.

Преобразователь html в php

Программа htm2php преобразует html-текст в строки, пригодные для вставки в программу php. Это может быть полезно для вставки всевозможных счётчиков вроде liveinternet, yandex.метрика и т. п., блоков рекламы, а также других текстов, которые вам нужно разместить на всех страницах вашего сайта. Подобного рода вставку проще всего делать с помощью php-скриптов, особенно это чувствуется, когда хочется что-то поменять сразу на всех страницах сайта.

Это консольная программа. Текст html, который вам нужно преобразовать, должен быть сохранён в простом текстовом файле с восьмибитной кодировкой. В командной строке набираете htm2php и через пробел имя файла. Итог своей работы htm2php записывает в текущем каталоге в файле, имя которого то же, что и у входного, но к нему добавляется расширение «.php». Для htm2php кодировка не важна, однако при использовании unicode двухбайтовые коды символов могут содержать в отдельных своих байтах значения, совпадающие с кодами кавычек и других знаков, требующих особою обработку.

Программа может использоваться для пакетной обработки файлов.Она возвращает значение в переменной окружения операционной системы %errorlevel%. Если не было ошибок, то операционной системе возвращается код завершения 0. Если была ошибка, то код завршения 1.

Здесь можно посмотреть исходный текст htm2php, а также скачать rar-архив с исходным web-файлом и откомпилированным исполняемым файлом. Почти полностью программирование осуществлялось на русском языке.

Литература и ссылки

Ассемблер

В основном, мои интересы к низкоуровневому программированию ограничивались процессорами 80386-го семейства и IBM-совместимых ЭВМ, (других у меня под руками просто ни когда не было, ZX Spectrum — не в счёт). Наиболее ценным источником сведений об устройстве ПК для меня послужила книга

[1]  Руководство по архитектуре IBM PС AT / Ж.К. Голенкова, А.В. Заболоцкий, М.Л. Мархасин и др.; Под общ. ред. М.Л. Мархасина. — Минск: ООО «Консул», 1992. — 949 c.: ил.

некоторые разделы которой, как мне кажется, могут оказаться полезными и сегодня. В ней описаны различные чипсеты вплоть до машин, построенных на базе 486-х процессоров.

Ещё одна неплохая книга

[2]  Программирование на аппаратном уровне: специальный справочник. 2-е изд./В. Кулаков. — СПб.: Питер, 2003. — 848 с.: ил.

В ней довольно подробно рассматриваются практические вопросы программирования более современной аппаратуры, в том числе PCI- и USB-устройств. Но в отличие от [1] аппаратный уровень (регистры устройств) рассматривается не очень подробно, о некоторых вещах не говорится ни слова (например, о наличии третьего режима работы клавиатуры).

По более современным процессорам можно рекомендовать книгу

[3] Гук М., Юров В. Процессоры Pentium III, Athlon и другие — СПб: Издательство «Питер», 2000. — 480 с.: ил.








Число посетителей


Яндекс.Метрика

Число посетителей