Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр_на_ассембл_для_WINLOWS.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
907.78 Кб
Скачать

Команды обработки последовательности кодов

REP

Префикс повторения, следующая за ним операция повторяется, пока содержимое ЕСХ не станет равным нулю

REPE, REPZ

Дополнительное условие повторения – выполнять , пока ZF=1

REPNE, REPNZ

Дополнительное условие повторения – выполнять, пока ZF=0

MOVS dest,src

Команда передает код из цепочки, адресуемой через DS:[ESI] по адресам, указанным в ES:[EDI]

LODS src

Команда загрузки цепочки в аккумулятор

STOS dest

Обратная LODS

SCAS dest

Команда сканирования цепочки

CMPS dest,src

Команда сравнения цепочек

Команды для работы со стеком

PUSH r/m

Поместить в стек слово или двойное слово.

PUSH const

Поместить в стек непосредственный 8-,16-,32-разрядный операнд

PUSHA

Поместить в стек содержимое регистров EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP

POP r/m

Извлечь из стека слово или двойное слово

POPA

Извлечь из стека данные в регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP

PUSHF

Поместить в стек содержимое регистра флагов

POPF

Извлечь из стека данные в регистр флагов

В связи с тем, что передача параметров функциям API осуществляется через стек, необходимо обратить внимание на команды работы со стеком, количество которых существенно изменилось относительно системы команд процессора 8086. Для записи в стек служат команды PUSH. Их можно использовать с операндами, находящимися в памяти, в регистрах, а также с непосредственными операндами. Переменные в памяти могут являться словами, двойными словами, регистры могут быть как 16-разрядными, так и 32-разрядными, непосредственные операнды – 8-разрядными, 16-разрядными и 32-разрядными. В стеке данные занимают вне зависимости от внешнего представления двойное слово. В тексте программы эти команды можно представить следующим образом:

PUSH m16

PUSH m32

PUSH r16

PUSH r32

PUSH imm8

PUSH imm16

PUSH imm32

PUSH CS

PUSH SS

PUSH DS

PUSH ES

PUSH FS

PUSH GS

Команды извлечения данных из стека в тексте программы имеют вид:

POP m16

POP m32

POP r16

POP r32

POP DS

POP ES

POP SS

POP FS

POP GS

m16, m32 – адрес слова и двойного слова соответственно, r16, r32 – имена шестнадцатиразрядных и тридцатидвухразрядных регистров, imm8, imm16, imm32 – 8-разрядные, 16-разрядные, 32-разрядные числа.

2. Описание языка ассемблера

2.1. Алфавит языка ассемблера

Алфавит ассемблера включает в себя следующие символы:

  • заглавные и строчные буквы латинского алфавита ABCD1FGHIJKLMNOPQRSTUVWXYZ;

  • арабские цифры;

  • пробел, горизонтальную табуляцию, возврат каретки;

  • специальные символы ? @ _$ : . [] () {} < > + - / * & % ! ' ~ " | = # ^ ; * \

2.2. Лексемы

Строка программы на языке ассемблера состоит из комбинации лексем, разделенных пробелом, табуляцией и/или специальным символом, называемым ограничителем.

Лексема - минимальная законченная конструкция языка, принадлежащая определенному классу и получившая после трансляции определенное значение. Лексемы делятся на идентификаторы (имена) и константы. Так, например, константы образуют класс лексем, значением которых является набор битов, отображающих соответствующее число или коды символов.