- •Системное программирование на макроассемблере masm32
- •«Системное программирование» (часть 1)
- •Вступление
- •1Организация среды исполнения для масм
- •1.1Цель работы
- •1.2 Теоретические сведения
- •If errorlevel 0 команда2
- •If errorlevel 0 goto метка
- •1.3Выполнение работы
- •1.4Состав отчета по работе
- •1.5Контрольные вопросы
- •2.2.2Состав пакета масм
- •2.2.3Центр масм – редактор Quick Editor
- •2.3Выполнение работы
- •2.4Состав отчета по работе
- •2.5Контрольные вопросы
- •3Высокоуровневый интерфейс языка масм
- •3.1Цель работы
- •3.2 Теоретические сведения
- •3.2.1Процедуры и макросы в ассемблере
- •3.2.2Синтаксис высокого уровня масм
- •3.2.3Макрос invoke
- •3.3Выполнение работы
- •4.2.2Потоки вывода и ввода
- •4.2.3Вывод и ввод в консольных приложениях
- •4.3Выполнение работы
- •4.4Состав отчета по работе
- •4.5Контрольные вопросы
- •5Ввод и вывод в ассемблерных приложениях с графическим интерфейсом
- •5.1Цель работы
- •5.2Теоретические сведения
- •5.3Выполнение работы
- •6.3.1Фрейм кода (области 1-5)
- •6.3.2Фрейм дампа памяти (области 9,10 и 11)
- •6.3.3Фрейм регистров процессора (области 6, 7 и 8)
- •6.3.4Фрейм стека (области 12, 13 и 14)
- •6.4Выполнение работы
- •6.5Состав отчета по работе
- •6.6Контрольные вопросы
- •Приложение а Префиксы «венгерской» нотации типов данных WinApi
- •Рекомендованная литература
3.2 Теоретические сведения
Представление машинной программы возможно на разных уровнях, приспособленных для различного использования (табл.3.1):
Таблица 3.1 – Уровни представления компьютерных программ
Условное название |
Физическое представление |
Логический уровень |
Кем (чем) используется |
Высокий уровень |
Структурированные тексты и таблицы |
Язык высокого уровня (ЯВУ) |
Разработчики, студенты, преподаватели |
Низкий уровень |
Строки текстовой записи мнемоник машинных команд |
Ассемблер |
Разработчики, исследователи, хакеры |
Машинный уровень |
Числа – машинные команды в оперативной памяти |
Исполняемый код |
Операционная система и процессор |
Программирование на ассемблере в начале его развития производилось на низком уровне (писались очень длинные столбцы мнемоник машинных команд), потом написанный текст обрабатывался компилятором и компоновщиком и получалось представление машинного уровня – исполняемый машинный код.
Отладка и развитие полученных таким образом программ сразу наталкиваются на значительные трудности и неудобства. Это связано с тем, что программирование на уровне машинных команд (пусть даже записываемых понятными мнемониками) очень трудоёмко в силу его чрезмерной детальности – любые действия приходится описывать очень большим числом очень мелких инструкций. Именно этот факт в сочетании с очень быстрым ростом объема и сложности разработок стимулировал развитие языков высокого уровня (ЯВУ).
Впрочем, довольно быстро выяснилось, что компиляторы ЯВУ производят код, неоптимальный либо по быстродействию, либо по объему, причем это для ЯВУ является, по-видимому, неустранимым фактором. Причины лежат в самой архитектуре ЯВУ, которые манипулируют сущностями высокого уровня абстракции. Отображение этих абстракций на машинный код в процессе компиляции и компоновки является энтропийным процессом, связанным с неизбежной потерей части информации, а это, в общем, и порождает все проблемы.
Выходом является переработка критических участков программ по технологии низкоуровневого программирования, но в возможностью описывать логику действий не на сверхдетальном уровне машинных команд, а с помощью конструкций. напоминающих языки высокого уровня.
С.Хатчисон в \MASM32\help\masm32.chm пишет следующее.
«Существует миф, что истинные ассемблерные программы низкого уровня написаны исключительно на мнемоническом уровне, а все прочие - для людей, которые не понимают, что такое низкоуровневое программирование. Проблема же состоит в том, что адепты такой точки зрения сами, как правило, никогда не пишут объемных программ, поэтому высказанное не имеет большого значения.
Для людей, которые имеют желание писать, как они считают, РЕАЛЬНЫМ кодом низкого уровня, редактор MASM32 предоставит возможность писать непосредственно шестнадцатеричный машинный код и сохранять его на диске в виде двоичного файла. Для остальных, кто захочет писать быстро и надежно код минимального размера и сделать это в течение одной жизни, MASM предоставит синтаксис высокого уровня, который будет точно соответствовать коду, написанному старым трудным путем, но зато без ошибок, сбоев и необходимости отлавливать таинственные и неустранимые ошибки» .
Возможность ассемблерного программирования с соблюдением этих условий обеспечивает программная технология макропрограммирования, которую в той или иной степени применяют все ассемблеры. Бегло ознакомимся с тем, как это делается в МАСМ.