Quote (Mefistotel)
Потом бы в будущем добавить примерчик процедур из какой-нибудь игры...
Как-нибудь тщательно разберу одну из своих подпрограмм в мк2 с пояснениями естественно Отредактировал первые посты, теперь сначала идут описания вариантов адресования на примере MOVE, в будущем будем просто на них ссылаться(чтобы не писать по несколько раз один и тот же пример)
Арифметические инструкции
Code
ADD, ADDA, ADDI, ADDQ Различные типы суммирования
CLR Обнуление операнда
CMP, CMPA, CMPI, CMPM Различные типы сравнения двух операндов
DIVS, DIVU Деление Signed и Unsigned
MULS, MULU Умножение Signed и Unsigned
SUB, SUBA, SUBI, SUBQ Различные типы вычитания
TST Сравнение операнда с нулем
1)Обычное суммирование ADD
Складывает между собой 2 операнда и записывает результат во втором
Синтаксис: 1)add.n <ea>, Dn
2)add.n Dn, <ea>
Варианты адресования: 1)<ea>: Dn, An, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l, x(PC), x(PC,xr.s), #x
2)<ea>: (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l
Тип данных: byte, word или longword
Пример:
Code
Инструкция До После
------------------------------------------------------------------
|ad d. w ($00FFF70E).l, d0 | d0=FFFF0002 | d0=FFFF0004 |
| | $00FFF70E=00020004| $00FFF70E=00020004|
------------------------------------------------------------------
Если берутся данные из RAM и тип данных word, то считываются левые 2 байта, если байт -- левый 1 байт
2)Суммирование с адресным регистром ADDA
Складывает операнд со значением в адресном регистре.
Синтаксис: ADDA <ea>, An
Варианты адресования <ea>: Dn, An, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l,
x(PC), x(PC,xr.s), #x
Тип данных: Word, longword
Пример:
Code
Инструкция До После
--------------------------------------------
|adda.w d0, a0 | a0=00FF0002 | a0=00FF0006 |
| | d0=10000004 | d0=10000004 |
--------------------------------------------
Добавлено (08.07.2009, 22:25)
---------------------------------------------
3)Быстрое суммирование ADDQ
Работает также как и add, за исключением того, что в качестве первого операнда ВСЕГДА используется число,
отсутствует тип данных и инструкция очень мала(2 байта)
Синтаксис: ADDQ #<data>,<ea>
<data> -- число от 1 до 8
Варианты адресования <ea>: Dn, An, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l
Пример:
Code
Инструкция До После
-------------------------------------------
|addq #$5, d0 | d0=00FF0002 | d0=00FF0007 |
| | | |
-------------------------------------------
4)Непосредственное суммирование ADDI
Прибавляет натуральное число к операнду
Синтаксис: ADDI #x,<ea>
Варианты адресования <ea>: Dn, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l
Тип данных: Byte, Word, longword
Пример:
Code
Инструкция До После
----------------------------------------------
|addi.w #$45, d0 | d0=00FF0002 | d0=00FF0047 |
| | | |
----------------------------------------------
5)Обнуление CLR
Обнуляет операнд
Синтаксис: CLR <ea>
Варианты адресования <ea>: Dn, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l
Тип данных: Byte, word, longword
Пример:
Code
Инструкция До После
---------------------------------------
|clr.w d0 | d0=00FF0002 | d0=00FF0000 |
| | | |
---------------------------------------
6)Сравнение CMP
Сравнивает регистр данных с операндом. Ни регистр, ни операнд после инструкции не изменяются. Часто
используется в связке с условными переходами типа Bcc(будут рассмотрены позже)
Синтаксис: CMP <ea>,Dn
Варианты адресования <ea>: Dn, An, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l,
x(PC), x(PC,xr.s), #x
Тип данных: Byte, word, longword
Пример:
cmp.w d0, d1 ; сравнение двух регистров
beq.s label ; переход, если регистры равны
...........
Добавлено (08.07.2009, 22:25)
---------------------------------------------
7)Сравнение с адресным регистром CMPA
Сравнивает адресный регистр с операндом. Ни регистр, ни операнд после инструкции не изменяются. Часто
используется в связке с условными переходами типа Bcc(будут рассмотрены позже)
Синтаксис: CMPA <ea>,An
Варианты адресования <ea>: Dn, An, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l,
x(PC), x(PC,xr.s), #x
Тип данных: Word, longword
Пример смотри в пункте 6 -- Сравнение
[b8)Сравнение с числом CMPI[/b]
Сравнивает операнд с натуральным числом. Ни регистр, ни операнд после инструкции не изменяются. Часто
используется в связке с условными переходами типа Bcc(будут рассмотрены позже)
Синтаксис: CMPI #<data>, <ea>
Варианты адресования <ea>: Dn, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l
Тип данных: Byte, word, longword
9)Деление(Signed) DIVS
Делит регистр данных на операнд. Регистр имеет тип longword, операнд всегда word. Результат сохраняется
в регистре данных следующим образом: целая часть записывается в правых 2-х байтах, остаток -- в левых.
Синтаксис: DIVS <ea>,Dn
Варианты адресования <ea>: Dn, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l, x(PC),
x(PC,xr.s), #x
Тип данных: word
[bi]Пример:[/i]
Code
Инструкция До После
----------------------------------------------
|divs #$10, d0 | d0=00000026 | d0=00060002 |
| | | |
----------------------------------------------
10)Деление(Unsigned) DIVU
Работает также как и DIVS, за исключением того, что регистр cчитается Unsigned.
11)Умножение(Signed) MULS
Умножает регистр данных с операндом(оба типа word). Результат размером 4 байта записывается в регистр данных
Синтаксис: MULS <ea>,Dn
Варианты адресования <ea>: Dn, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l, x(PC),
x(PC,xr.s), #x
Тип данных: Word
Пример:
Code
Инструкция До После
----------------------------------------------
|muls #$10, d0 | d0=00FF0026 | d0=00000260 |
| | | |
----------------------------------------------
12)Умножение(Unsigned) MULU
Работает также как и MULS, за исключением того, что регистр cчитается Unsigned.
13)Вычитание SUB, SUBA, SUBI, SUBQ имеют те же свойства, что и подобные инструкции сложения, за исключением того,
что здесь выполняется не сложение, а вычитание :Р Поэтому смотрим выше в инструкции сложения.
14)Тест TST
Сравнивает операнд с нулем. Часто используется в связке с условными переходами типа Bcc(будут рассмотрены позже)
Синтаксис: TST <ea>
Варианты адресования <ea>: Dn, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l
Тип данных: Byte, word, longword