Show Menu
Cheatography

Эквивал. и присва­ивание

EQU
<им­я> EQU <оп­ера­нд>

Возможны три основных способа задания операнда:
1) Операнд - конста­нтное выражение;
2) Операнд - имя. В данном случае эти имена являются синонимами;
3) Операнд - произв­ольный текст, не являющийся именем или конста­нтным выраже­нием.
=
<им­я> = <ко­нст­антное выраже­ние>

В отличие от констант, опреде­ленных в EQU, данная константа может изменять значение. Также с помощью = можно определить только числовую константу.
Если переменные описываются директивами DB, DW, DD, то константы - с помощью директивы EQU

Задание массива

a DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

Может использоваться при создании массивов. В данном случае a хранит адрес первого из 10-ти байт.

Эту директиву можно записать иначе:
a DB 10 DUP (0)


Данная конструкция в общем случае имеет вид:
n DUP (P1, P2, .., Pk)
, например
a DB 4 DUP (1, 2)
создаст последовательность
1, 2, 1, 2, 1, 2, 1, 2

Метки

Существует несколько способов задания метки. На данный момент рассмотрим один из них:
<имя метки>:


Например, для создания метки my_label нужно прописать
my_label:
и команды, выполн­яемые после перехода по данной метке.
 

Арифме­тич­еские команды

ADD
ADD a, b

Прибавляет к значению a значение b. Результат хранится в a.
SUB
SUB a, b

Вычитает из значения a значение b. Результат хранится в a.
MUL
MUL a

Данная команда умножает содержимое регистра ax на a.
DIV
DIV a

Аналогично MUL, использует один операнд. После выполнения деления, частное хранится в ax, а остаток - в dx.
Примечание
Для ADD и SUB доступны следующие формы:
Регистр - Регистр; Регистр - Память; Регистр - Значение; Память - Значение; Память - Регистр.

Для MUL и DIV операнд должен находиться в регистре или в памяти.

Условный переход

CMP
CMP a, b

Сравнивает a и b, но не записывает результат. Вместо этого изменяются значения флагов.
JG
JG lbl

Jump Greater
Флаговые условия: ZF=0 и SF=OF
JGE
JGE lbl

Jump Greater or Equal
Флаговые условия: SF=OF
JL
JL lbl

Jump Less
Флаговые условия: SF≠OF
JLE
JLE lbl

Jump Less or Equal
Флаговые условия: ZF=1 или SF≠OF
JE
JE lbl

Jump Equal
Флаговые условия: ZF=1
JNE
JNE lbl

Jump Not Equal
Флаговые условия: ZF=0
Примечание
CMP расста­вляет указанные флаги автома­тич­ески.
 

Опреде­ление данных

DB
Define Byte
<им­я> DB <оп­ера­нд> {, <оп­ера­нд>}

В памяти выделяется один байт (для каждого операнда).
Конста­нтное выражение может иметь значение в диапазоне -128..255
DW
Define Word
<им­я> DW <оп­ера­нд> {, <оп­ера­нд>}

В памяти выделяется два байта (для каждого операнда).
Конста­нтное выражение может иметь значение в диапазоне -32768..65535
DD
Define Double
<им­я> DB <оп­ера­нд> {, <оп­ера­нд>}

В памяти выделяется четыре байта (для каждого операнда)
Первому из операндов присва­ивается имя, по которому можно ссылаться на этот() байт(ы). Существует два основных способа задания операндов:
1) Конста­нтное выражение
2) ? - неопре­дел­енное значение

Безусл­овный переход

Безусл­овный переход — это переход, который выполн­яется всегда. Безусл­овный переход осущес­твл­яется с помощью команды JMP. У этой команды один операнд, который может быть непоср­едс­твенным адресом (меткой), регистром или ячейкой памяти, содержащей адрес.
JMP label
- осущес­твлеие безусл­овного перехода к метке label
       
 

Comments

No comments yet. Add yours below!

Add a Comment

Your Comment

Please enter your name.

    Please enter your email address

      Please enter your Comment.

          Related Cheat Sheets

          Linux Assembler Cheat Sheet
          ASM 8086 Cheat Sheet