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
Сообщение отредактировал Smoke - Пятница, 31.07.2009, 21:55 |