Добавил:
north memphis Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ассемблер Экзамен Теория.pdf
Скачиваний:
0
Добавлен:
29.01.2025
Размер:
182.25 Кб
Скачать

​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