- •Компилирование шестнадцатиразрядных программ с помощью fasm Оглавление
- •1. Запуск компилятора
- •2. Ввод кода программы
- •2.1. Программа "com"
- •2.2. Программа "exe"
- •3. Задание кодов данных
- •4. Системный сервис
- •5. Компилирование программ
- •6. Задания для самостоятельной работы
- •Приложение № 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 байтов. В случае ошибки выводится окно с кратким ее описанием и указывается команда, где произошла ошибка. Сама команда в тексте программы выделяется подсвечиванием строки. Окно ошибки показано на рисунке 4.2.
Рис.5.2. Ошибка в команде
В зависимости от типа машинного кода результат помещается в файлы с расширениями myprg.com для «COM» программ и myprg.exe для «EXE» программ.
6. Задания для самостоятельной работы
Требуется разработать программу в EXE или COM формате.
Вариант № 1. Написать программу для замены первого и последнего символа строки из 10 байтов на символ ‘#’. Вывести на экран исходную строку и преобразованную. Формат программы «COM».
Вариант № 2. Написать программу для обмена местами первого и последнего байта строки из 10 символов. Вывести исходную строку и преобразованную. Формат программы «ЕХЕ».
Вариант № 3. Написать программу для сравнения двух строки из 10 байтов. Известно, что строки различаются одним байтом. Вывести на экран значение байта. Формат программы «COM».
Вариант № 4. Написать программу, которая проверяет нахождение в строке байтов символа «А». Вывести контрольные сообщения. Формат программы «ЕХЕ».
Вариант № 5. Задать две строки. Переслать содержимое второй строки в первую. Вывести строки до перезаписи и после. Формат программы «COM».
Вариант № 6. Написать программу для замены символов строки на произвольный символ. Использовать косвенную адресацию. Вывести исходную строку и преобразованную. Формат программы «EXE».
Вариант № 7. Написать программу для замены первой половины символов строки на произвольный символ. Использовать косвенную адресацию со смещением. Вывести исходную строку и преобразованную. Формат программы «COM».
Вариант № 8. Написать программу для замены символов строки на произвольный символ. Использовать индексную адресацию. Вывести исходную строку и преобразованную. Формат программы «ЕХЕ».
Вариант № 9. Написать программу для замены второй половины строки на произвольный символ. Использовать индексную адресацию со смещением. Вывести исходную строку и преобразованную. Формат программы «COM».
Вариант № 10. Известно, что две строки одинаковой длины имеют общий байт. Написать программу, которая выводит значение этого байта на экран. Формат программы «ЕХЕ».
Вариант № 11. Задать строку из 10 байтов. Заменить каждый второй байт символом ‘*’. Вывести исходную строку и преобразованную. Формат программы «COM».
Вариант №12. Задать строку, число байтов четно. Выделить из строки первую часть и вторую. Полученные строки вывести на экран. Формат программы «ЕХЕ».
Вариант № 13. Задать строку. Вывести на экран значение первого и предпоследнего байтов. Формат программы «COM».
Вариант № 14. Задать строку. Число символов четно. В строку поместить код ‘*’. Разделить строку на две по разделителю. Вывести строки на экран. Формат программы «ЕХЕ».
Вариант № 15. Дана строка из 7 символов. Выделить из строки каждый второй байт. Значение байтов выводить на экран. Формат программы «COM».
Приложения