
edi – Этот регистр в цепочечных операциях содержит текущий адрес в цепочке-приемнике (результирующая строка).
7. Регистр rax
64 битный регистр, состоящий из 32 битного еах, который в свою очередь состоит из 16 битного ах, который состоит из 8 битных ah, al.
Сегментные регистры
Сегментные регистры предназначены для того, чтобы указать на сегменты, к которым программа имеет доступ в конкретный момент времени.
Фактически в этих регистрах содержатся адреса ячеек памяти, с которых начинаются соответствующие сегменты.
Все регистры являются 16 битными.
cs – содержит адрес сегмента кода, к которому в данный момент имеет доступ микропроцессор. ds – содержит адрес сегмента данных текущей программы.
ss – содержит адрес сегмента стека.
Если программе недостаточно одного сегмента данных, то она имеет возможность использовать еще три дополнительных сегмента данных.
Адреса дополнительных сегментов данных должны содержаться в регистрах es, gs, fs (extension data segment registers).
es - дополнительный сегментный регистр данных или экстракодов (Extra Segment).
Начиная с микропроцессора 80386, появились два дополнительных регистра fs,gs (следующие
буквы в латинском алфавите после e).
При использовании дополнительных сегментов данных их адреса требуется указывать с
помощью специальных префиксов переопределения сегментов в команде (например, fs:).
Регистр флагов
Регистр, содержимое которого нельзя менять, не имеет прямого доступа. FLAGS(x86 16bit)
EFLAGS(IA-32)
RFLAGS(x86-64)
Инструкция mov
Инструкция – атомарная(неделимая) сущность(алгоритм) , позволяющий оптимизировать работу процессора.
mov op1, op2
op1 = op2
op1: reg, mem op2:reg, mem, const
При этом из mem в mem нельзя пересылать данные Пример:
● mov eax, 1 (переместить “1” в “еах”)
● mov bl, al (переместить значение al в значение bl)
● mov [eax], byte 1 (записать значение “1” размером байт в ОП по адресу, хранящемуся в
“eax”)
● mov byte [eax], 1 (записать значение “1” размером байт в ОП по адресу, хранящемуся в
“eax”)
● mov al, 777 (код не скомпилируется так, как 777 в двоичной занимает 10 бит, а регистр является 8 битным)
● mov [eax], ecx (при записи регистров не надо указывать значение)
!!! mov [a], 1 (поместить “1” в “а”)
mov eax, a (поместить в “eax” адрес переменной “а”)!!!
Форма записи чисел в FASM
● mov eax, F0h (h-постфикс) ● mov eax, 0xF0
● mov eax, $F0
Можно записывать значение в бинарной и восьмеричной форме: ● mov eax, 1010b (b – бинарно)
● mov eax, 123o (o – восьмерично)
Объявление переменных в секции
section ‘.data’ data readable writeable
В общем виде: {Имя переменной} {Директива(размер) переменной} {значение} Пример: a db 0
Директивы переменных
● db – 8bit или строка символов ASCII ● dw – 16bit
● du – 16bit или unicode-кодированная строка
● dd – 32bit
● df (dp) – 48bit ● dq – 64bit
● dt – 80bit