- •Компилирование шестнадцатиразрядных программ с помощью fasm Оглавление
- •1. Запуск компилятора
- •2. Ввод кода программы
- •2.1. Программа "com"
- •2.2. Программа "exe"
- •3. Задание кодов данных
- •4. Системный сервис
- •5. Компилирование программ
- •6. Задания для самостоятельной работы
- •Приложение № 1. Некоторые функции системного прерывания 21h Организация ввода с клавиатуры
- •Организация вывода
- •Приложение №2. Система машинных команд мп 8086 Команды пересылки данных
- •Команды управления процессом вычисления
- •Команды для выполнения действий над байтами
- •Прочие команды
Приложение № 1. Некоторые функции системного прерывания 21h Организация ввода с клавиатуры
Функция 01h – ввод символа с эхом.
Вызов: AH=01h
Возврат: AL=байт входных данных.
07h – Ввод символа без эха и без обработки ^+C.
08h – Ввод символа без эха с обработкой ^+C.
Организация вывода
Для вывода на экран одного символа служит функция 02h.
Обращение:
AH=02h
DL=байт данных.
Для вывода последовательности символов служить функция 09h.
Вызов:
AH=09h
DS:DX=адрес выводимой строки.
Последний байт выводимой строки должен хранить код символа ‘$’.
Для формирования строк нужно включать управляющие коды 0Ah(10) и 0Dh(13).
Пример:
mes db ‘Пример многострогчного’,0ah,0dh
db ‘текста на экране’,’$’
Функция 40h.
Служит для вывода заданного количества байтов на требуемое устройство. Для идентификации устройств используются дескрипторы.
При выводе информации на экран служит дескриптор 1.
Вызов:
AH=40h
BX=дескриптор.
CX=количество выводимых байтов.
DS:DX=адрес выводимой строки.
При работе с многострочным текстом можно использовать счетчик текущего адреса для определения количества выводимых байтов.
Пример:
mes db ‘Пример многострочного’,0ah,0dh
db ‘текста на экране’
actlen=$-mes
Приложение №2. Система машинных команд мп 8086 Команды пересылки данных
MOV – запись числа в регистр или ячейку памяти.
MOV R1,R2;R1=R2
MOV R,A ;R=A
MOV [R],A ;Запись в ячейку памяти значения
MOV R,[R] ;Сохранения из памяти значения
PUSH R– запись числа в стек.
POP R – извлечение числа из стека.
R – регистр: AX,BX,CX,DX,AH,AL,BH,BL,CH,CL,DH,DL,SI,DI,SP. A – код.
При работе со стеком можно использовать только 16 разрядные данные в регистрах.
MOVSB – пересылка байтов в оперативной памяти, для работы команды настраиваются регистры процессора:
DS:SI – адрес источника байтов.
ES:DI – адрес приемника байтов.
CX=n – количество пересылаемых байтов.
Для пересылки всех байтов команда снабжается префиксом REP.
CLD – сброс флага направления при пересылке байтов – пересылка от первого байта до последнего.
Команды управления процессом вычисления
JMP label – безусловный переход.
LOOP label – циклическое выполнение команд. Первая команда помечается меткой label.
Количество повторений цикла заносится в регистр CX:
Пример.
mov CX,70
go:
;Команды
loop go
СMPSB – сравнение байтов строки.
Установка регистров:
DS:SI – адрес первой строки.
ES:DI – адрес второй строки.
CX=n – количество пересылаемых байтов.
Команда вызывается с повторителями REPE — повторять пока «равно», REPNE — повторять пока неравно.
CLD – сброс флага направления.
SCASB – сканирование строки байтов.
Установка регистров:
AL – тестируемый байт.
ES:DI – строка, где ведется поиск.
CX=n – количество тестируемых байтов.
Повторители см. выше.
CMP – сравнение двух аргументов и установка флагов процессора.
CMP R,A
CMP R1,R2
JE – перейти, если равно.
JNE – перейти, если не равно.
JA – перейти, если выше.
JB – перейти если ниже.
JL – перейти если меньше.
JG – перейти если больше.
JLE – перейти меньше или равно.
JGE – перейти если больше или равно.
JC – переход, если бит флагов CF=1.
JNC – переход, если бит флагов CF=0.
Команды перехода и флаги процессора :
JZ (ZF=1)
JNZ (ZF=1)
JO (OF=1)
JN(OF=0)
JS (SF=1)
JNS(SF=0)
Пример. Проверка на число кода регистра.
cmp ax,90
je ok;