
- •Компилирование шестнадцатиразрядных программ с помощью fasm
- •2. Ввод кода программы
- •2.1. Программа "com"
- •2.2. Программа "exe"
- •3. Задание кодов данных
- •4. Системный сервис
- •5. Компилирование программ
- •6. Компилирование и исполнение программ в 64 разрядной версии Windows
- •7. Задания для самостоятельной работы
- •Приложение № 1. Некоторые функции системного прерывания 21h Организация ввода с клавиатуры
- •Организация вывода
- •Приложение №2. Система машинных команд мп 8086 в приложении приводится базовый набор команд процессора. Команды пересылки данных
- •Команды управления процессом вычисления
- •Команды для выполнения действий над байтами
- •Прочие команды
4. Системный сервис
Для организации ввода или вывода следует обратиться к системному сервису ОС, используя прерывание 21h. Обращение к прерыванию требует указания в регистре процессора AH номера функции, обычно он указывается в шестнадцатеричном формате, а в других регистрах указываются коды, необходимые для работы функции. Состав этих регистров и коды зависят от конкретной функции.
Общая схема вызова системной функции:
mov AH, номер_функции
;mov – загрузка исходных данных
;в регистры процессора
int 21h ;Вызов прерывания
;Использование результатов
Для завершения работы программы служит функция 4Ch.
Вызов:
AH=4СH
AL=код завершения.
Нормальный код завершения 0.
Для ввода в программу символа без отображения его на экране служит функция 08h. Код введенного символа будет записан в регистр AL.
Чтобы вывести на экран последовательность байтов – строку используется функция 09h.
Вызов:
AH=09h
DS:DX=адрес выводимой строки.
Последний байт выводимой строки должен хранить код символа ‘$’. Для формирования строк нужно включать управляющие коды 0Ah(10) и 0Dh(13).
Пример:
mes db ‘Пример многострочного’,0ah,0dh
db ‘текста на экране’,’$’
Функции ввода – вывода приведены в приложении №1.
5. Компилирование программ
Компиляция в машинный код выполняется с помощью пункта меню Run.
Команда Run (F9) – получение машинного кода и исполнение программы. Команда Compile(^+F9) – получение файла с машинным кодом. В случае удачной компиляции выводится окно, показанное на рисунке 4.1.
Рис.5.1. Результат компиляции
На рисунке видно, что компилятор создал программу в два прохода. Размер машинного кода составляет значение 69 байтов. В случае ошибки выводится окно с кратким ее описанием и указывается команда, где произошла ошибка. Сама команда в тексте программы выделяется подсвечиванием строки. Окно ошибки показано на рисунке 5.2.
Рис.5.2. Ошибка в команде
В зависимости от типа машинного кода результат помещается в файлы с расширениями myprg.com для «COM» программ и myprg.exe для «EXE» программ.
6. Компилирование и исполнение программ в 64 разрядной версии Windows
Компилятор FASM может создавать шестнадцати разрядный код в 64 разрядной версии Windows. Однако такой код в данной операционной системе не выполняется. Для исполнения кода нужна соответствующая подсистема. В качестве такой подсистемы может быть использован эмулятор DOSBox. Данный эмулятор распространяется бесплатно на основе лицензии GNU GPL.
После
установки эмулятора на компьютер
пользователя нужно выполнить запуск
программы с помощью пиктограммы
.
Рассмотрим процесс компиляции, используя эмулятор версии 0.74 от 2010 года. После активизации программы на экран выводится два окна, так как это показано на рисунке.
Рис.6.1. Запуск эмулятора
Для продолжения работы в строке приглашения нужно ввести команду для монтирования каталога (папки) где будут размещаться откомпилированные программы. Общий формат команды примет вид:
mount имя_диска: путь_к_каталогу
Здесь имя_диска это латинская буква, к которой будет привязан каталог с файлами 16ти разрядных программ. Параметр путь_к_каталогу представляет собой путь на диске компьютера к каталогу с файлами программ.
Например. Пусть откомпилированные файлы программ располагаются в каталоге D:\ASM_EXEC компьютера. Тогда команда монтирования примет вид:
mount s: d:\asm_exec
В качестве буквы выбрана буква s , можно выбрать любую латинскую букву.
Результат выполнения команды показан на рисунке 6.2.
Рис.6.2. Монтирование каталога
При работе с эмулятором в строке приглашения могут быть использованы следующие команды:
буква_диска: - переход на монтированный носитель;
cls – очистка окна эмулятора;
dir – вывод содержания монтированного диска;
del имя_файла – уничтожение файла.
И ряд других.
Воспользуемся командой перехода на носитель и командой dir. Результат исполнения команд показан на рисунке 6.3.
Рис.6.3. Просмотр содержимого каталога
Как видно из рисунка в монтированном каталоге находится один исполняемый файл HELLO.EXE. Для запуска этой программы нужно в строке приглашение ввести имя файла программы и нажать клавишу Enter. Результат выполнения программы показан на рисунке 6.4.
Рис.6.4. Выполнение программы в эмуляторе
Для завершения работы с эмулятором следует подать команду EXIT или просто закрыть его окно.