Сделать стартовой
Добавить в Избранное

Russian Romhacking

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 2«12
Форум ромхакеров » Всё о ромхакинге » Ромхакинг » Инструкции процессора Motorola 68000 (с пояснениями)
Инструкции процессора Motorola 68000
SmokeДата: Понедельник, 17.08.2009, 23:35 | Сообщение # 16
Лейтенант
Группа: Модераторы
Сообщений: 76
Статус: Offline
Логические инструкции

------------------
Эти инструкции производят логические операции на битах. Результат может быть либо истинным (1) либо ложным (0)

Code
AND, ANDI  Логическое "И"
OR, ORI    Логическое "ИЛИ"
EOR, EORI  Экстра "ИЛИ"
NOT        Логическое "НЕ"

1)Логическое "И" AND
Производит логическую операцию "И" на операнде побитово.
Рассмотрим ближе эту операцию:
AND:
0 И 0 = 0x0 = 0
0 И 1 = 0x1 = 0
1 И 0 = 1x0 = 0
1 И 1 = 1x1 = 1

Сразу перейдем к примеру. Пусть дана инструкция: and.w #4, d0 (d0 = 0000000A). Разложим операнды на биты
и логически перемножим:

Code
         0100 = $4
AND 1010 = $A
-------------------
           0000 = $0

Возможны 2 случая:
1)Первый операнд -- effective address(<ea>), второй -- регистр данных;
2)Первый операнд -- регистр данныхб второй -- effective address(<ea>);

Синтаксис: AND <ea>,Dn
AND Dn,<ea>

Варианты адресования(<ea>): 1) Dn, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l,
x(PC), x(PC,xr.s), #x
2) (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l

Тип данных: Byte, word, longword

Пример:

Code
       Инструкция       До               После
         -----------------------------------------------
         |and.w d1, d2   | d1=00000055  | d1=00000055  |
         |                     | d2=00000078    | d2=00000050  |
         -----------------------------------------------

2)Логическое "И" ANDI
Производит логическую операцию "И" на операнде побитово. Работает также как и AND, только здесь в качестве
первого операнда всегда используется целое число.

Синтаксис: ANDI #<data>,<ea>

Варианты адресования(<ea>): Dn, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l, SR, CCR

Тип данных: Byte, word, longword

Пример:

Code
       Инструкция          До               После
         --------------------------------------------------
         |andi.w #$55, d0   | d0=00000078  | d0=00000050  |
         --------------------------------------------------

3)Логическое "ИЛИ" OR
Производит логическую операцию "ИЛИ" на операнде побитово.
Рассмотрим ближе эту операцию:
OR:
0 И 0 = 0+0 = 0
0 И 1 = 0+1 = 1
1 И 0 = 1+0 = 1
1 И 1 = 1+1 = 1

Пусть дана инструкция: or.w #4, d0 (d0 = 0000000A). Разложим операнды на биты
и логически сложим:

Code
       0100 = $4
OR  1010 = $A
-------------------
          1110 = $E

Возможны 2 случая:
1)Первый операнд -- effective address(<ea>), второй -- регистр данных;
2)Первый операнд -- регистр данныхб второй -- effective address(<ea>);

Синтаксис: OR <ea>,Dn
OR Dn,<ea>

Варианты адресования(<ea>): 1) Dn, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l,
x(PC), x(PC,xr.s), #x
2) (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l

Тип данных: Byte, word, longword

Пример:

Code
       Инструкция       До               После
         -----------------------------------------------
         |or.w d1, d2    | d1=00000055  | d1=00000055  |
         |                    | d2=00000070  | d2=00000075  |
         -----------------------------------------------

4)Логическое "ИЛИ" ORI
Производит логическую операцию "ИЛИ" на операнде побитово. Работает также как и OR, только здесь в качестве
первого операнда всегда используется целое число.

Синтаксис: ORI #<data>,<ea>

Варианты адресования(<ea>): Dn, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l, SR, CCR

Тип данных: Byte, word, longword

Пример:

Code
       Инструкция          До               После
        ------------------------------------------------
        |or.w #$55, d0   | d0=00000070  | d0=00000075  |
        ------------------------------------------------

5)Экстра "ИЛИ" EOR
Производит логическую операцию "ИЛИ" на операнде побитово. Отличается от простого OR тем, что в случае
логического сложения 1+1 получается не 1, а 0. Остальное то же самое.
EOR:
0 И 0 = 0+0 = 0
0 И 1 = 0+1 = 1
1 И 0 = 1+0 = 1
1 И 1 = 1+1 = 0

Пусть дана инструкция: eor.w #4, d0 (d0 = 0000000A). Разложим операнды на биты
и логически сложим:

Code
       0100 = $4
EOR 1110 = $E
------------------
         1010 = $A

Синтаксис: EOR Dn,<ea>

Варианты адресования(<ea>): Dn, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l

Тип данных: Byte, word, longword

Пример:

Code
       Инструкция       До               После
        -----------------------------------------------
        |eor.w d1, d2   | d1=00000004  | d1=00000004  |
        |                     | d2=0000000E  | d2=0000000A  |
        -----------------------------------------------

6)Экстра "ИЛИ" EORI
Производит логическую операцию "ИЛИ" на операнде побитово. Работает также как и EOR, только здесь в качестве
первого операнда всегда используется целое число.

Синтаксис: EORI #<data>,<ea>

Варианты адресования(<ea>): Dn, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l, SR, CCR

Тип данных: Byte, word, longword

Пример:

Code
       Инструкция          До               После
        -------------------------------------------------
        |eori.w #$4, d0   | d0=0000000E  | d0=0000000A  |
        -------------------------------------------------

7)Логическое "НЕ" NOT
Производит логическую операцию "НЕ" на операнде побитово.
Рассмотрим ближе эту операцию:
NOT:
NOT 1 = 0
NOT 0 = 1
Пусть дана инструкция: not.w d0 (d0 = 0000000A). Рассмотрим ее работу на битах.
NOT 1010 = %0101 = $5

Синтаксис: NOT <ea>

Варианты адресования(<ea>): Dn, (An), (An)+, -(An), x(An), x(An,xr.s), label.w, label.l

Тип данных: Byte, word, longword

Пример:

Code
       Инструкция     До          После
        ------------------------------------------
        |not.w d0  | d0=0000000A  | d0=00000005  |
        ------------------------------------------


Сообщение отредактировал Smoke - Понедельник, 17.08.2009, 23:37
 
zephyrДата: Суббота, 22.05.2010, 12:59 | Сообщение # 17
Рядовой
Группа: Проверенные
Сообщений: 18
Статус: Offline
Что-то давно нет новых уроков sad
Почему бы не сделать вводный урок.
С описанием регистров, общей структурой программы на асме под
компилятор SNASM68K и программой "Хелло ворлд!"!?

coder

Сообщение отредактировал zephyr - Суббота, 22.05.2010, 13:11
 
SmokeДата: Суббота, 22.05.2010, 22:46 | Сообщение # 18
Лейтенант
Группа: Модераторы
Сообщений: 76
Статус: Offline
В принципе почти все рассмотрел, остались только не очень часто используемые инструкции, но закончить надо. А с разбором структуры простенькой программы есть такая мысль, но из-за наличия больших объемов лени и нехватки времени она была отложена в долгий ящик. Как-нибудь постараюсь заняться вплотную smile
 
Ti_Дата: Пятница, 04.06.2010, 14:53 | Сообщение # 19
Сержант
Группа: Пользователи
Сообщений: 39
Статус: Offline
Quote (Smoke)
Инструкция часто используется для записи регистров в SP и последующего оттуда копирования обратно по регистрам.

у тебя маловато написано про стак не каждый поймет, мне вот Шелл объяснял как он работает, как пихать-забирать где можно, нельзя и т.д.
ещё пример не самый удачный, зачем нам сейвить число 12 которое мы знаем? другое дело когда всегда разное и надо сохранять.
Quote (Smoke)
MOVEM (MOVE Multiply)
Вариантов может быть множество. Вот некоторые:
movem d0-d5, -(sp)

это movem.l или movem.w ? сейв целиком регистра или половинку, если посмотреть игры сейвят там где возможно, сейвят word, чтобы меньше "тормозила". как и команды moveq , addq. для чего они и сделаны. надо бы это указать.

кстати у меня sega assembler v.3 movem не понимает. (либо ндо ему по-другому как-то писать, не как в ida)

Добавлено (04.06.2010, 14:42)
---------------------------------------------

Quote (zephyr)
Переходы обычно идут после сравнения двух операндов. Допустим идет сравнение:
cmp.w D0, D1 И после него сразу один из переходов:

нужно бы рассказать что меняется SR, а переходы уже на основе его делаются.

Добавлено (04.06.2010, 14:47)
---------------------------------------------

Quote (Smoke)
В принципе почти все рассмотрел, остались только не очень часто используемые инструкции, но закончить надо

btst, bchg не такие уж редкие, надо бы и их написать. Надеюсь как время будет допишешь!
редкие это rte, stop, illegal smile

Добавлено (04.06.2010, 14:53)
---------------------------------------------

Quote (zephyr)
программой "Хелло ворлд!"!?

а что за программа такая? это уже не пример будет. тут же понадобиться описывать всю программу инициализации железа сеги т.д, регистры vdp, и буквы эти откуда брать? номера спрайтов, сами буквы котороые нужно нарисовать засунуть в rom.
лучше укажите в качестве примера куски кода оригинальных игр, взломанных вами., с полным описанием. мы же не игру создаем целиком, а только взламываем (ромхакинг) и абсолютно всё знать не обязательно.

Сообщение отредактировал Ti_ - Пятница, 04.06.2010, 14:57
 
SmokeДата: Пятница, 04.06.2010, 23:21 | Сообщение # 20
Лейтенант
Группа: Модераторы
Сообщений: 76
Статус: Offline
Ti_, спасибо, что указал на недочеты, я доработаю. А хелло ворлд это пример, где будет допустим выводиться графика на экран в виде спрайтов и планов, может проигрываться музыка. Все с комментами. Цель -- дать читающему понятия как работает ром, как работает VDP, чтобы он мог свою графику писать. Ну и суперски это ему поможет для написания своего собственного кода в дальнейшем.
 
Форум ромхакеров » Всё о ромхакинге » Ромхакинг » Инструкции процессора Motorola 68000 (с пояснениями)
Страница 2 из 2«12
Поиск: