- •Компилирование шестнадцатиразрядных программ с помощью fasm
- •2. Ввод кода программы
- •2.1. Программа "com"
- •2.2. Программа "exe"
- •3. Задание кодов данных
- •4. Системный сервис
- •5. Компилирование программ
- •6. Компилирование и исполнение программ в 64 разрядной версии Windows
- •7. Задания для самостоятельной работы
- •Приложение № 1. Некоторые функции системного прерывания 21h Организация ввода с клавиатуры
- •Организация вывода
- •Приложение №2. Система машинных команд мп 8086 в приложении приводится базовый набор команд процессора. Команды пересылки данных
- •Команды управления процессом вычисления
- •Команды для выполнения действий над байтами
- •Прочие команды
Приложение №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:
Пример. Организация цикла на 70 итераций:
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; Да, равно !
Команды для выполнения действий над байтами
INC R – увеличение аргумента на единицу.
DEC R– уменьшение аргумента на единицу.
AND – побитовое умножение «И».
AND R1,R2
AND R,A
XOR – логическое исключающее «ИЛИ».
OR – побитовое сложение «ИЛИ».
Прочие команды
INT N - вызов вектора прерывания по его номеру N.
XCHG R1,R2 – обмен значений регистров.
STD – установка флага направления DF=1.