Список форумов shedevr.org.ru shedevr.org.ru
Группа перевода приставочных игр "ШЕДЕВР"
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Сжатая графика Pac-man 2(SEGA)
На страницу Пред.  1, 2, 3, 4, 5  След.
 
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг
Предыдущая тема :: Следующая тема  
Автор Сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Июл 10, 2006 3:55 pm    Заголовок сообщения: Ответить с цитатой

Ura_Orlov писал(а):
HoRRoR писал(а):
Ura_Orlov писал(а):
Код:
A0(1)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),7,2))' Такой вот у меня процесс присваивания A значения A+1 :)
A0(2)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),5,2))
A0(3)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),3,2))
A0(4)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),1,2))


Не понимаю зачем нужен этот код.

А как еще присвоить четырем элементам массива по одному байту из значения?


Ты имеешь в виду + рядом с командой? Тогда я сейчас напишу код покороче.

Если ты про (A)+, то он самый.

[edit]

Ura_Orlov писал(а):
Код:
If D4(1)<0 then N=1 else N=0


Этот код некорректен. Регистр не пожет быть вида -$00000001, он может быть &FFFFFFFE.

Мозги остынут - исправлю.

[edit]

Блин, сплошные "[edit]", совсем голова работать перестала Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пн Июл 10, 2006 4:50 pm    Заголовок сообщения: Ответить с цитатой

Вот блок 0 и 1.

Код:
BLOCK0:
Open file1 For Binary As 1
Dim V As Integer
Dim N As Integer
Dim X As Integer
Dim C As Integer
Dim Z As Integer
Dim A0 As Long
Dim A1 As Long
Dim A2 As Long
Dim A3 As Long
Dim A4 As Long
Dim A5 As Long
Dim A6 As Long
Dim A7 As Long
Dim D0 As Long
Dim D1 As Long
Dim D2 As Long
Dim D3 As Long
Dim D4 As Long
Dim D5 As Long
Dim D6 As Long
Dim D7 As Long
Dim dop As Byte

BLOCK1:
Get #1, A0, dop
D3 = Val("&H" & Mid(Hex(D3), 1, 6) & Hex(dop))
A0 = A0 + 1
V = 0
C = 0
If D3 = 0 Then Z = 0
If D3 >= &H80000000 Then N = 0


Всё просто.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Июл 10, 2006 4:58 pm    Заголовок сообщения: Ответить с цитатой

Ura_Orlov писал(а):
Вот блок 0 и 1.

Код:
BLOCK0:
Open file1 For Binary As 1
Dim V As Ineger
Dim N As Ineger
Dim X As Ineger
Dim C As Ineger
Dim Z As Ineger
Dim A0 As Long
Dim A1 As Long
Dim A2 As Long
Dim A3 As Long
Dim A4 As Long
Dim A5 As Long
Dim A6 As Long
Dim A7 As Long
Dim D0 As Long
Dim D1 As Long
Dim D2 As Long
Dim D3 As Long
Dim D4 As Long
Dim D5 As Long
Dim D6 As Long
Dim D7 As Long
Dim dop As Byte

BLOCK1:
Get #1, A0, dop
D3 = Val("&H" & Mid(Hex(D3), 1, 6) & Hex(dop))
A0 = A0 + 1
V = 0
C = 0
If D3 = 0 Then Z = 0
If D3 >= &H80000000 Then N = 0


Всё просто.

Т.е. лучше хранить значения в переменной типа long, а когда надо пользоваться Mid$, Hex$ и Val?
Сейчас начну переписывать код.

Кстати, hex-значения можно писать через Hex() не используя Val? Shocked
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пн Июл 10, 2006 5:01 pm    Заголовок сообщения: Ответить с цитатой

HoRRoR писал(а):
Т.е. лучше хранить значения в переменной типа long, а когда надо пользоваться и Val?
Сейчас начну переписывать код.

Да. Кстати межно писать просто mid, hex

HoRRoR писал(а):
Кстати, hex-значения можно писать через Hex() не используя Val? Shocked

Где ты это увидел?
_________________________
Команда MOVEQ просто пишет Двойное Слово в регистр?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пн Июл 10, 2006 5:10 pm    Заголовок сообщения: Ответить с цитатой

Ну с блоком 2 всё просто.
Код:
BLOCK2:
D4 = &H1
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Июл 10, 2006 5:13 pm    Заголовок сообщения: Ответить с цитатой

Ura_Orlov писал(а):
Команда MOVEQ просто пишет Двойное Слово в регистр?

Цитата:
The instruction MOVEQ (MOVE Quick) is used to put small immediate data in
a dataregister. The instruction is two bytes long and can handle constanst
in the range -128 and +127 (decimal). All 32 bits in the register are affected
If you used MOVE.L the instruction would take 6 bytes.

DATALENGTH: Longword

FLAGS: X - U
N - S
Z - S
C - 0
V - 0

SYNTAX: MOVEQ #<data>,Dn

Many assemblers automatically change a MOVE to a MOVEQ if possible.


Ura_Orlov писал(а):
HoRRoR писал(а):
Кстати, hex-значения можно писать через Hex() не используя Val?
Где ты это увидел?

Ой, ляпнул не то. Я имел ввиду, hex значение можно хранить не в виде string?

Кстати, чтобы просто перемещать данные из одного регистра в другой, не нужно их "обращать", верно?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Июл 10, 2006 5:20 pm    Заголовок сообщения: Ответить с цитатой

Ura_Orlov писал(а):
Ну с блоком 2 всё просто.
Код:
BLOCK2:
D4 = &H1

А разве не D4 = &H10000000?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пн Июл 10, 2006 5:29 pm    Заголовок сообщения: Ответить с цитатой

HoRRoR писал(а):
Цитата:
The instruction MOVEQ (MOVE Quick) is used to put small immediate data in
a dataregister. The instruction is two bytes long and can handle constanst
in the range -128 and +127 (decimal). All 32 bits in the register are affected
If you used MOVE.L the instruction would take 6 bytes.

DATALENGTH: Longword

FLAGS: X - U
N - S
Z - S
C - 0
V - 0

SYNTAX: MOVEQ #<data>,Dn

Many assemblers automatically change a MOVE to a MOVEQ if possible.

Мне это ни о чём не говорит. (с английским плохо)

HoRRoR писал(а):
Ura_Orlov писал(а):
HoRRoR писал(а):
Кстати, hex-значения можно писать через Hex() не используя Val?
Где ты это увидел?

Ой, ляпнул не то. Я имел ввиду, hex значение можно хранить не в виде string?

Да. Вобще все значения в BASIC-е хранятся в десятиричном формате.

HoRRoR писал(а):
Кстати, чтобы просто перемещать данные из одного регистра в другой, не нужно их "обращать", верно?

Во что ''обращать''?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пн Июл 10, 2006 5:31 pm    Заголовок сообщения: Ответить с цитатой

HoRRoR писал(а):
Ura_Orlov писал(а):
Ну с блоком 2 всё просто.
Код:
BLOCK2:
D4 = &H1

А разве не D4 = &H10000000?

Почему?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Июл 10, 2006 5:33 pm    Заголовок сообщения: Ответить с цитатой

Ura_Orlov писал(а):
HoRRoR писал(а):
Ura_Orlov писал(а):
Ну с блоком 2 всё просто.
Код:
BLOCK2:
D4 = &H1

А разве не D4 = &H10000000?

Почему?

Так ведь в регистрах вроде бы в обратном порядке байты хранятся.

[edit]

Ошибся, хотел написать D4=&H01000000
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пн Июл 10, 2006 5:34 pm    Заголовок сообщения: Ответить с цитатой

Код будет обновляться.

Код:
Open file1 For Binary As 1
Dim V As Integer
Dim N As Integer
Dim X As Integer
Dim C As Integer
Dim Z As Integer
Dim A0 As Long
Dim A1 As Long
Dim A2 As Long
Dim A3 As Long
Dim A4 As Long
Dim A5 As Long
Dim A6 As Long
Dim A7 As Long
Dim D0 As Long
Dim D1 As Long
Dim D2 As Long
Dim D3 As Long
Dim D4 As Long
Dim D5 As Long
Dim D6 As Long
Dim D7 As Long
Dim dop As Byte
Dim dop2

BLOCK1:
Get #1, A0, dop
D3 = Val("&H" & Mid(Hex(D3), 1, 6) & Hex(dop))
A0 = A0 + 1
V = 0
C = 0
If D3 = 0 Then Z = 0
If D3 >= &H80000000 Then N = 0

BLOCK2:
D4 = &H1

BLOCK4:
dop2 = D4
dop2 = dop2 - &H1
If dop2 < 0 Then dop2 = &HFFFFFFFF - Abs(dop2)
D4 = dop2


BLOCK5:
Get #1, A0, dop
D0 = Val("&H" & Mid(Hex(D0), 1, 6) & Hex(dop))
A0 = A0 + 1
V = 0
C = 0
If D3 = 0 Then Z = 0
If D3 >= &H80000000 Then N = 0


Последний раз редактировалось: IfoR (Пн Июл 10, 2006 5:44 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пн Июл 10, 2006 5:36 pm    Заголовок сообщения: Ответить с цитатой

HoRRoR писал(а):
Ura_Orlov писал(а):
HoRRoR писал(а):
Ura_Orlov писал(а):
Ну с блоком 2 всё просто.
Код:
BLOCK2:
D4 = &H1

А разве не D4 = &H10000000?

Почему?

Так ведь в регистрах вроде бы в обратном порядке байты хранятся.

[edit]

Ошибся, хотел написать D4=&H01000000


Хм... В обратном порядке хранятся в памяти.
Да. Точно. Только в памяти.


Последний раз редактировалось: IfoR (Пн Июл 10, 2006 5:40 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Июл 10, 2006 5:37 pm    Заголовок сообщения: Ответить с цитатой

Ura_Orlov писал(а):
Хм... В обратном порядке хранятся в памяти. Но возможно. Забыл.

Сам все время путаюсь Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Пн Июл 10, 2006 5:42 pm    Заголовок сообщения: Ответить с цитатой

Ужос какой-то! Переводят асм на бейсик! Я начинаю сходить с ума Smile Вы бы команды получше изучили, да попрактиковались в дебуггере - так легче осваивается... И не возникало бы предложений вроде:
Цитата:
Тут я точно не уверен, Z=1 если либо D0 получится в итоге=0, либо если копируемый байт=0

Команды MOVE изменяют флаги ПОСЛЕ выполнения, т.е. для изменения Z копируемый байт должен быть нулевым, хотя в этом случае байт D0 также станет нулевым, но он не обязан быть таким ДО команды MOVE.

Цитата:
Возьмем например команду MOVE.B A0,D3

Такой команды нет, т.к. для адресных регистров запрещено побайтное обращение, только .w и .l.

Цитата:
Команда MOVEQ просто пишет Двойное Слово в регистр?

Хекс-код команды состоит из двух байт: 7YXX, где Y - 2*номер регистра, XX - байт, который копируется в младший байт регистра. В остальные 3 байта (биты 8-31) копируется 7-й бит (т.е. знаковый), это называется sign-extension.
MOVEQ #1,D0; D0=00000001, т.к. байт 01=00000001b имеет 7-й бит 0
MOVEQ #$87,D0; D0=FFFFFF87, т.к. байт 87=10000111b имеет 7-й бит 1
_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пн Июл 10, 2006 5:46 pm    Заголовок сообщения: Ответить с цитатой

Я так и думал, что сейчас кто нибуть вылезет.

Последний раз редактировалось: IfoR (Пн Июл 10, 2006 5:46 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пн Июл 10, 2006 5:49 pm    Заголовок сообщения: Ответить с цитатой

Ghost писал(а):
Вы бы команды получше изучили, да попрактиковались в дебуггере - так легче осваивается...

А ты думаеш, чем мы тут занимаемся?[/quote]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Июл 10, 2006 5:50 pm    Заголовок сообщения: Ответить с цитатой

Ghost писал(а):
Ужос какой-то! Переводят асм на бейсик!

А как по твоему написать анпакер графики получше?
Ghost писал(а):
Вы бы команды получше изучили

Ты правда думаешь, что за эти два неполных дня я успел выучить асм, и советуешь подучить команды? Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пн Июл 10, 2006 6:06 pm    Заголовок сообщения: Ответить с цитатой

Ghost
Только, что посмотрел твой аватру и сразу её узнал. Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Nick



Зарегистрирован: 19.11.2005
Сообщения: 445

СообщениеДобавлено: Пн Июл 10, 2006 6:32 pm    Заголовок сообщения: Ответить с цитатой

Ura_Orlov писал(а):
Ghost
Только, что посмотрел твой аватру и сразу её узнал. Very Happy

Я тожеSmile
_________________
"With great power comes great responsibility..."
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Июл 10, 2006 6:41 pm    Заголовок сообщения: Ответить с цитатой

Вот исправленный работающий Block3, пока с установкой только V, C и X.
Код:

BLOCK3: ' WORD
Dim D3 As Long
Dim D4 As Long
D3 = inp2
D4 = inp
'MsgBox D4
Dim CNT As Integer
Dim WRD(1 To 4) As String
Dim bte(1 To 4) As String
Dim NWRD(1 To 4) As String
For CNT = 1 To 4
    WRD(CNT) = Mid$(Right$("0000000" + Hex$(D4), 4), CNT, 1)
    'MsgBox WRD(CNT)
    If WRD(CNT) = "0" Then
        bte(CNT) = "0000"
    ElseIf WRD(CNT) = "1" Then
        bte(CNT) = "0001"
    ElseIf WRD(CNT) = "2" Then
        bte(CNT) = "0010"
    ElseIf WRD(CNT) = "3" Then
        bte(CNT) = "0011"
    ElseIf WRD(CNT) = "4" Then
        bte(CNT) = "0100"
    ElseIf WRD(CNT) = "5" Then
        bte(CNT) = "0101"
    ElseIf WRD(CNT) = "6" Then
        bte(CNT) = "0110"
    ElseIf WRD(CNT) = "7" Then
        bte(CNT) = "0111"
    ElseIf WRD(CNT) = "8" Then
        bte(CNT) = "1000"
    ElseIf WRD(CNT) = "9" Then
        bte(CNT) = "1001"
    ElseIf WRD(CNT) = "A" Then
        bte(CNT) = "1010"
    ElseIf WRD(CNT) = "B" Then
        bte(CNT) = "1011"
    ElseIf WRD(CNT) = "C" Then
        bte(CNT) = "1100"
    ElseIf WRD(CNT) = "D" Then
        bte(CNT) = "1101"
    ElseIf WRD(CNT) = "E" Then
        bte(CNT) = "1110"
    ElseIf WRD(CNT) = "F" Then
        bte(CNT) = "1111"
    End If
    'MsgBox bte(CNT)
Next CNT
NEWWORD = bte(1) + bte(2) + bte(3) + bte(4)
'MsgBox NEWWORD
C = Val(Right$(NEWWORD, 1))
X = C
For CNT = 1 To D3
    NEWWORD = Mid$(NEWWORD, 2, 15) & "0"
Next CNT
CNT2 = 1
'MsgBox NEWWORD
For CNT = 1 To 4
    NWRD(CNT) = Mid$(NEWWORD, CNT2, 4)
    If NWRD(CNT) = "0000" Then
        bte(CNT) = "0"
    ElseIf NWRD(CNT) = "0001" Then
        bte(CNT) = "1"
    ElseIf NWRD(CNT) = "0010" Then
        bte(CNT) = "2"
    ElseIf NWRD(CNT) = "0011" Then
        bte(CNT) = "3"
    ElseIf NWRD(CNT) = "0100" Then
        bte(CNT) = "4"
    ElseIf NWRD(CNT) = "0101" Then
        bte(CNT) = "5"
    ElseIf NWRD(CNT) = "0110" Then
        bte(CNT) = "6"
    ElseIf NWRD(CNT) = "0111" Then
        bte(CNT) = "7"
    ElseIf NWRD(CNT) = "1000" Then
        bte(CNT) = "8"
    ElseIf NWRD(CNT) = "1001" Then
        bte(CNT) = "9"
    ElseIf NWRD(CNT) = "1010" Then
        bte(CNT) = "A"
    ElseIf NWRD(CNT) = "1011" Then
        bte(CNT) = "B"
    ElseIf NWRD(CNT) = "1100" Then
        bte(CNT) = "C"
    ElseIf NWRD(CNT) = "1101" Then
        bte(CNT) = "D"
    ElseIf NWRD(CNT) = "1110" Then
        bte(CNT) = "E"
    ElseIf NWRD(CNT) = "1111" Then
        bte(CNT) = "F"
    End If
    'MsgBox bte(CNT)
    CNT2 = CNT2 + 4
Next CNT
D4 = Val("&H" + Left$(Hex$(D4), 4) + bte(1) + bte(2) + bte(3) + bte(4))
'MsgBox Hex(D4)
V = 0


Prince Nick писал(а):
Ura_Orlov писал(а):
Ghost
Только, что посмотрел твой аватру и сразу её узнал. Very Happy

Я тожеSmile

Вы о чем?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Пн Июл 10, 2006 7:31 pm    Заголовок сообщения: Ответить с цитатой

Ghost писал(а):
Цитата:
Тут я точно не уверен, Z=1 если либо D0 получится в итоге=0, либо если копируемый байт=0

Команды MOVE изменяют флаги ПОСЛЕ выполнения, т.е. для изменения Z копируемый байт должен быть нулевым, хотя в этом случае байт D0 также станет нулевым, но он не обязан быть таким ДО команды MOVE.


Запутал ты этой фразой и меня. Smile Z описывает следствие, а не причину. Неважно, каким был копируемый байт, но если в результате операции D0 стал нулём, то Z=1.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
GrayLightTaliz



Зарегистрирован: 13.10.2005
Сообщения: 204
Откуда: Краснодар/Королёв

СообщениеДобавлено: Пн Июл 10, 2006 7:58 pm    Заголовок сообщения: Ответить с цитатой

Вот, продебагил на Gens'е код, который должен все пояснить:

move.l #$88888888,d0 ( d0=88888888, Z=0 )
move.b #$AA,d0 ( d0=888888AA, Z=0 )
move.b #$00,d0 ( d0=88888800, Z=1 (хоть d0 не =0) )
move.l #$000000BB,d0 ( d0=000000BB, Z=0 )
move.b #$AA,d0 ( d0=000000AA, Z=0 )
move.b #$00,d0 ( d0=00000000, Z=1 )

значит все-таки согласно перемещаемым данным выставляется Z.

Просто в M68000 Reference были противоречивые данные в описании операции MOVE (я выделю важные слова):
С одной стороны: Description: Moves the data at the source to the destination location and sets the condition
codes according to the data.

С другой стороны там же, ниже: Z — Set if the result is zero; cleared otherwise. <- Здесь уже неправда..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Пн Июл 10, 2006 9:07 pm    Заголовок сообщения: Ответить с цитатой

2 Ura_Orlov: свою аватару я сам узнаю Wink А что с подписью? Laughing
2 Анс и GrayLight: в мануале написано правильно... и да, я объяснил несколько путанно. ...Вот эта фраза: "Z — Set if the result is zero; cleared otherwise." "Противоречие" возникает из-за неправильного её понимания. Результатом любой подобной команды (move, lsr, or, add и т.д.) считается соответствующая часть операнда (.b, .w, .l), старшая часть не учитывается. В данном примере (move.b ??,d0) я сказал, что "для изменения Z копируемый байт должен быть нулевым, хотя в этом случае байт D0 также станет нулевым" (не надо было писать "хотя"), что значит, что результат операции - младший байт D0 - будет нулевым, я просто указал причину, а не следствие.

Ura_Orlov писал(а):
Я так и думал, что сейчас кто нибуть вылезет.

Посмотри дату моей регистрации и число сообщений. Как видишь, я нечасто вылезаю, так что можно меня потерпеть? Wink
_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Amorpho[US]
БесФорменный


Зарегистрирован: 16.12.2003
Сообщения: 161
Откуда: Воронеж

СообщениеДобавлено: Пн Июл 10, 2006 9:36 pm    Заголовок сообщения: Ответить с цитатой

Аватарка - красный крест? Smile Или это только я ее не вижу?
_________________
Я вернулся!!! ...ну почти. Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Пн Июл 10, 2006 9:52 pm    Заголовок сообщения: Ответить с цитатой

GrayLight писал(а):
Вот, продебагил на Gens'е код, который должен все пояснить:

move.l #$88888888,d0 ( d0=88888888, Z=0 )
move.b #$AA,d0 ( d0=888888AA, Z=0 )
move.b #$00,d0 ( d0=88888800, Z=1 (хоть d0 не =0) )
move.l #$000000BB,d0 ( d0=000000BB, Z=0 )
move.b #$AA,d0 ( d0=000000AA, Z=0 )
move.b #$00,d0 ( d0=00000000, Z=1 )

значит все-таки согласно перемещаемым данным выставляется Z.

Просто в M68000 Reference были противоречивые данные в описании операции MOVE (я выделю важные слова):
С одной стороны: Description: Moves the data at the source to the destination location and sets the condition
codes according to the data.

С другой стороны там же, ниже: Z — Set if the result is zero; cleared otherwise. <- Здесь уже неправда..


Нет, там всё правда. Почитай теорию по машинному коду, на практике иногда можно не учесть существенные мелочи. MOVE.B выставляет Z по содержимому младшего байта D0, фактически, в данный момент этот регистр становится 8-битным.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3, 4, 5  След.
Страница 3 из 5

 
Перейти:  
Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group