- •Что надо знать, перед изучением ассемблера.
- •Какие системы счисления использует ассемблер
- •Понятие системы счисления
- •Двоичная
- •Восьмеричная
- •Шестнадцатеричная
- •Как и где программа хранит код и данные
- •Виды памяти
- •Способы адресации
- •Сегменты
- •Страницы
- •Регистры
- •Регистры общего назначения (РОН)
- •Регистры данных
- •Регистры указатели
- •Сегментные регистры
- •Служебные регистры
- •Как программа исполняется ЦПУ
- •Структура программы на Ассемблере MASM32
- •Комментарии
- •Сегменты
- •Переменные
- •Метки
- •Инструкции ассемблера
- •Основные инструкции ассемблера х86:
- •Используемая литература
КАК ПРОГРАММА ИСПОЛНЯЕТСЯ ЦПУ
Формат команды Конвейер команд
Instruction pointer (IP) Arithmetic and logic unit (ALU)
СТРУКТУРА ПРОГРАММЫ НА АССЕМБЛЕРЕ MASM32
КОММЕНТАРИИ
Комментарии в MASM32 начинаются с точки с запятой и идут продолжаются до конца строки
; Например, вот это комментарий
СЕГМЕНТЫ
Программа для MASM32 состоит из сегментов. Каждый сегмент определяет область памяти, предназначенную для хранения данных определённого вида. В основном, различают следующие роли сегментов памяти:
1)Сегменткода, в котором хранится код исполняемой программы.
2)Сегмент данных, в котором хранятся те переменные программы, которые объявлены статически.
3)Сегмент стека, в котором хранятся адреса возврата и параметры, при вызове подпрограмм, а также локальные переменные, которые должны быть уничтожены, после выхода из подпрограммы.
Общий шаблон объявления сегмента:
<ИМЯСЕГМЕНТА>SEGMENT[byte/word/dword/para/page]
;…тут будет что-то полезное
<ИМЯСЕГМЕНТА>ENDS
Роли же сегментов назначаются оператором assume (не является процессорной инструкцией), который ставит каждый сегмент в соответствие одному из сегментных регистров процессора:
assumecs: <ИМЯ СЕГМЕНТА>, ds: <ИМЯ СЕГМЕНТА>, es: <ИМЯ СЕГМЕНТА>, ss: <ИМЯ СЕГМЕНТА>
1)cs – Хранит адрес сегмента кода.
2)ds– Хранит адрес основного сегмента данных.
3)es– Хранит адрес вспомогательного сегмента данных.
4)ss– Хранит адрес сегмента стека.
ПЕРЕМЕННЫЕ
Переменные в MASM32 объявляются, как правило, в сегменте данных (хотя никто не может помешать Вам делать этого и в сегменте кода, но это извращение). При объявлении переменой, задаёт только размер экземпляра. При этом конкретный тип определяется используемой операцией. Например, одна и та же переменная размера byteможет использоваться, как в роли вектора из 8 булевых компонент (инструкции xor, or, and), так и в роли 8-битного целого числа (add, sub).
Общий шаблон объявления переменных:
<ИМЯ ПЕРЕМЕННОЙ><ТИП ДАННЫХ><ИНИЦИАЛИЗАЦИЯ>
Типы данныхв MASM32 бывают следующие:
Размер данных |
Синоним |
Размер, байт |
Типы данных (наиболее часто используемые с данным размером) |
db |
byte |
1 |
boolean, int8, символASCIIилиANSI. |