|
shedevr.org.ru Группа перевода приставочных игр "ШЕДЕВР"
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Вс Июл 09, 2006 8:29 pm Заголовок сообщения: |
|
|
Ghost писал(а): | Дебаггер (не "именно для M68K", а для всей сеги в целом - так даже лучше) есть в Gens. |
А я на что ссылку дал? |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Вс Июл 09, 2006 10:31 pm Заголовок сообщения: |
|
|
Кто-нибудь, объясните мне пожалуста, что такое регистр и с чем, его едят, а еще, как им пользоваться и сколько их, всего восемь, что-ли?
А что такое стек?
Хотя бы объясните, как понять эти строки, а дальше я попробую сам разобраться:
Код: |
000016E2 MOVE.B (A0)+,D3
000016E4 MOVEQ #$01,D4
000016E6 LSL.W D3,D4
000016E8 SUBQ.W #$1,D4
000016EA MOVE.B (A0)+,D0
000016EC BEQ $0000172C
|
Заранее спасибо. |
|
Вернуться к началу |
|
|
PEREVODчик
Зарегистрирован: 07.07.2006 Сообщения: 105 Откуда: Kirov
|
Добавлено: Пн Июл 10, 2006 8:41 am Заголовок сообщения: |
|
|
HoRRoR писал(а): | что такое регистр и с чем, его едят |
Они необходимы для управления, адресации памяти и для арифметических вычислений
A0-A7 регистры оперативной памяти;
D0-D7 регистры видео-памяти. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Июл 10, 2006 8:55 am Заголовок сообщения: |
|
|
PEREVODчик писал(а): | HoRRoR писал(а): | что такое регистр и с чем, его едят |
Они необходимы для управления, адресации памяти и для арифметических вычислений
A0-A7 регистры оперативной памяти;
D0-D7 регистры видео-памяти. |
Насколько я понимаю, их в каждом случае восемь, и каждый размером с байт, верно? |
|
Вернуться к началу |
|
|
PEREVODчик
Зарегистрирован: 07.07.2006 Сообщения: 105 Откуда: Kirov
|
Добавлено: Пн Июл 10, 2006 9:26 am Заголовок сообщения: |
|
|
PEREVODчик писал(а): | A0-A7 регистры оперативной памяти;
D0-D7 регистры видео-памяти. |
* в раздумье*"Так,я хоть сам-то понял,что сказал."
A0-A7-адресные регистры(adress register)
D0-D7-регистры данных(data register)
Их восемь и они 32-битные.
*Про себя*
"Надо бы мне пореже морозить такую чушь." |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Июл 10, 2006 9:34 am Заголовок сообщения: |
|
|
PEREVODчик писал(а): | PEREVODчик писал(а): | A0-A7 регистры оперативной памяти;
D0-D7 регистры видео-памяти. |
* в раздумье*"Так,я хоть сам-то понял,что сказал."
A0-A7-адресные регистры(adress register)
D0-D7-регистры данных(data register)
Их восемь и они 32-битные.
*Про себя*
"Надо бы мне пореже морозить такую чушь." |
С кем не бывает?
А что значит плюс в (A0)+ и # в #$01, и что за $01? |
|
Вернуться к началу |
|
|
PEREVODчик
Зарегистрирован: 07.07.2006 Сообщения: 105 Откуда: Kirov
|
Добавлено: Пн Июл 10, 2006 9:49 am Заголовок сообщения: |
|
|
HoRRoR писал(а): | А что значит плюс в (A0)+ |
Если не ошибаюсь, присвоить значение по адресу A0.
P.S. А ты по какой доке изучаешь асм? |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Июл 10, 2006 10:01 am Заголовок сообщения: |
|
|
PEREVODчик писал(а): | HoRRoR писал(а): | А что значит плюс в (A0)+ |
Если не ошибаюсь, присвоить значение по адресу A0. |
Вот я не пойму, в чем будет разница между "MOVE.B (A0)+,D3" и "MOVE.B A0,D3", а еще, в чем разница между перемещением слова и байта. Если регистр=4 байта, то при перемещении одного байта, куда он пойдет и как использовать оставшееся место? Еще бы понять, где находятся флаги и когда они меняются и как действует условный переход.
PEREVODчик писал(а): | P.S. А ты по какой доке изучаешь асм? |
По всем, что есть:
1. Книга "Микропроцессоры семейства 8086/8088"
2. Книга "Машинные коды"
3. Справочник "Справочник по ассемблеру"
4. Дока "Ассемблер и програмирование для IBM PC"
5. Справочник "MC680x0 Reference 1.1"
6. Еще примерно 3 книги и две доки, но к ним почти не обращался. |
|
Вернуться к началу |
|
|
PEREVODчик
Зарегистрирован: 07.07.2006 Сообщения: 105 Откуда: Kirov
|
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Июл 10, 2006 10:42 am Заголовок сообщения: |
|
|
Спасибо. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Июл 10, 2006 11:02 am Заголовок сообщения: |
|
|
Начал для себя переводить это руководство, может серьезно займусь его переводом - единственная вещь, где сначала объясняют, что есть что, а потом уже начинают грузить терминами. |
|
Вернуться к началу |
|
|
GrayLightTaliz
Зарегистрирован: 13.10.2005 Сообщения: 204 Откуда: Краснодар/Королёв
|
Добавлено: Пн Июл 10, 2006 12:06 pm Заголовок сообщения: |
|
|
Надеюсь, это как-то поможет (если где-то ошибся, пожалуйста поправляйте)..
000016E2 MOVE.B (A0)+,D3
=====================
копирует байт, находящийся по адресу A0 (т.е. сам адрес содержится в регистре A0), в младший байт регистра D3 (у регистра D3 изменится только младший байт). После чего, регистр A0 автоматически увеличивается на 1 (т.е. адрес смещается на 1). Знак плюс и обозначает то, что адрес будет увеличен ПОСЛЕ копирования байта. А размер увеличения соответствует размеру перемещаемых данных (в данном случае 1 байт).
000016E4 MOVEQ #$01,D4
====================
Регистр D4 принимает значение $01 (точнее $00000001), т.е. изменяется ВЕСЬ регистр D4. Знак решетки означает, что присваивается конкретное число. (Если бы решетки не было, то это значило бы, что присваивается число, находящееся по адресу $00000001, хотя при обращении к памяти обычно пишутся скобки).
000016E6 LSL.W D3,D4
==================
Логический сдвиг влево. Все биты в регистре D4 сдвигаются влево D3 раз. "Выдвинутые" влево биты теряются (ну один правда сохранится в флаге C), а вправа добавляются нули. Если не идет речи об отрицательных числах, то эта операция равносильна умножению D4 на 2^D3 (2 в степени D3). Т.е. если, к примеру, D4=01, D3=03, то после операции D4 = 08.
000016E8 SUBQ.W #$1,D4
====================
D4 уменьшается на $1.
000016EA MOVE.B (A0)+,D0
=====================
Аналогично тому как в первой операции, байт по адресу A0 (но не по тому же адесу, что был в первой операции, т.к. он был увеличен на 1), копируется в младший байт регистра D0. И снова потом A0 увеличивается на 1 байт.
000016EC BEQ $0000172C
=====================
Переход к выполнению программы по адресу $0000172C, если флаг Z=1, в противном случае ничего не происходит. А на флаг Z в данном случае повлияет предыдущая операция MOVE. (Тут я точно не уверен, Z=1 если либо D0 получится в итоге=0, либо если копируемый байт=0)
А вот ссылка, которую мне дал в свое время Amorpho[US]:
http://www.ticalc.org/pub/text/68k/68kpm.zip
Если изучаешь 68000 - обязательно должен иметь это.
Последний раз редактировалось: GrayLightTaliz (Пн Июл 10, 2006 12:17 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Июл 10, 2006 12:12 pm Заголовок сообщения: |
|
|
GrayLight писал(а): | Надеюсь, это как-то поможет (если где-то ошибся, пожалуйста поправляйте).. |
Конечно поможет!!!!!
Огромное спасибо! |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Июл 10, 2006 12:20 pm Заголовок сообщения: |
|
|
А если стоит .W, это значит, что операция проводится только с двумя первыми байтами? |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Пн Июл 10, 2006 1:14 pm Заголовок сообщения: |
|
|
HoRRoR писал(а): | По всем, что есть:
1. Книга "Микропроцессоры семейства 8086/8088"
2. Книга "Машинные коды"
3. Справочник "Справочник по ассемблеру"
4. Дока "Ассемблер и програмирование для IBM PC"
5. Справочник "MC680x0 Reference 1.1"
6. Еще примерно 3 книги и две доки, но к ним почти не обращался. |
Слишком разные материалы. Ты бы сначала разобрался с одним процессором - либо Интелом, либо Моторолой (M68000 проще), ато знания будут сумбурные.
GrayLight писал(а): | (Тут я точно не уверен, Z=1 если либо D0 получится в итоге=0, либо если копируемый байт=0) |
Если D0 получится в итоге=0, так как Z описывает результат подсчёта, а не значение операндов. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Июл 10, 2006 1:25 pm Заголовок сообщения: |
|
|
АнС писал(а): | HoRRoR писал(а): | По всем, что есть:
1. Книга "Микропроцессоры семейства 8086/8088"
2. Книга "Машинные коды"
3. Справочник "Справочник по ассемблеру"
4. Дока "Ассемблер и програмирование для IBM PC"
5. Справочник "MC680x0 Reference 1.1"
6. Еще примерно 3 книги и две доки, но к ним почти не обращался. |
Слишком разные материалы. Ты бы сначала разобрался с одним процессором - либо Интелом, либо Моторолой (M68000 проще), ато знания будут сумбурные.
|
Теперь список уменьшился до "68k asm tutorial" и MOTOROLA M68000 FAMILY Programmer’s Reference Manual". |
|
Вернуться к началу |
|
|
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Пн Июл 10, 2006 2:17 pm Заголовок сообщения: |
|
|
HoRRoR писал(а): | А если стоит .W, это значит, что операция проводится только с двумя первыми байтами? |
Возьмем например команду MOVE.B A0,D3
В регистре A0=00012E0F
B регистре D3=00024EEE
После неё стоик буква B. Это означает, что команда берёт один байт из регистра A0, то есть 0F перетаскивает его в D3, то есть после перетаскивания в D3 получается 00024E0F. Если же после команды стояла буква W, то значит надо брать слово из A0, то есть после выполнения в D3 получается 00022E0F. Если стоит буква L, значит берётся Двойное Слово, то есть после выполнения D3=A0. Всё просто.
Возьмем например команду MOVE.W (A0),D3
В регистре A0=00012E0F
B регистре D3=00024EEE
По адресу 00012E0F = AF 01 45 01
Для начала следует заметить, что в памяти все (ну бывают исключения) данные хранятся в обратном порядке байт, то есть AF014501 на самом деле будет выглядеть 014501AF. И ещё, если регистр или цифры выделен скобками (Например: (A2) или ($001221EA), это значит, что данные будут браться из памяти по адресу, а не из регистра (или если цифры, то не цифры), то есть A0<>(A0), $001221EA<>($001221EA)
Так, после команды стоит буква W, это значит, что будет браться слово из память по адресу A0, то есть AF 01 и перемещаться в регистр D3. Не забывайте про правило!!! То есть в регистре D3 будет 000201AF (а не 0002AF01!!!). Ну если стоит B, то просто перемешается байт. Если L, то Двойное слово.
Возьмем например команду MOVE.B ($00101A00),D3
B регистре D3=00024EEE
По адресу 00101A00 = 11 AA 10 00
Здесь всё аналогично. Только в качестве указателя не регистр, а само значение. В регистре D3 будет 00024E11
Возьмем например команду MOVE.W $1A00,D3
B регистре D3=00024EEE
По адресу 00101A00 = 11 AA 10 00
Эта команда перемешает Двойное слово $1A00 в регистр D3. Следует заметить, что здесь указатель размера указывает не совсем только на размер. Число $1A00 находится сразу после команды, то есть в HEX коде это будет выглядеть так (XX XX код команды).
XX XX 00 1A A4 10 04
Это значит если стояла буква L, то команда была такого вида MOVE.L $10A41A00,D3. Если B то просто MOVE.B $00,D3.
Это всё.
Да и стек (по английски PUSH) - это временное место в памяти для хранения Регистров, Цифр.
Вот в процессоре Pentium команда PSH EAX (EAX - это 32 битный регистр) записывала в стек регистр EAX, а команда POP EAX вставляла регистр обратно.
_____________________________________________________________
GrayLight писал(а): | 000016EC BEQ $0000172C
=====================
Переход к выполнению программы по адресу $0000172C, если флаг Z=1, в противном случае ничего не происходит. А на флаг Z в данном случае повлияет предыдущая операция MOVE. (Тут я точно не уверен, Z=1 если либо D0 получится в итоге=0, либо если копируемый байт=0) |
Эх... понаписали тут в этом ассемблере. Вот команда JMP. Разве непонятно, что она делает?! Это ж безусловный переход. А вот команда BEQ. Попробуй пойми. В intel есть команды условного перехода JZ - переход если флаг нуля равен 1, JNZ - переход если флаг нуля равен 0. Всё так понятно. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Июл 10, 2006 2:58 pm Заголовок сообщения: |
|
|
Да... Жалко, что тут нет смайлика, чешущего голову :)
Впрочем, большое спасибо за разъяснение.
Посмотри на код, я правильно делаю?
Код: |
000016E2 MOVE.B (A0)+,D3 ' BLOCK1
000016E4 MOVEQ #$01,D4 ' BLOCK2
000016E6 LSL.W D3,D4 ' BLOCK3
000016E8 SUBQ.W #$1,D4 ' BLOCK4
000016EA MOVE.B (A0)+,D0 ' BLOCK5
000016EC BEQ $0000172C ' BLOCK6
000016EE LSR.B #1,D0 ' BLOCK7
' Z, N, V, X, C - флаги, AX{0 To 7}, BX{0 To 7} - регистры, AX(1 To 4) - байты регистра.
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(4) as Byte
Dim A1(4) as Byte
Dim A2(4) as Byte
Dim A3(4) as Byte
Dim A4(4) as Byte
Dim A5(4) as Byte
Dim A6(4) as Byte
Dim A7(4) as Byte
Dim B0(4) as Byte
Dim B1(4) as Byte
Dim B2(4) as Byte
Dim B3(4) as Byte
Dim B4(4) as Byte
Dim B5(4) as Byte
Dim B6(4) as Byte
Dim B7(4) as Byte
Dim tmp(4) as Byte
Dim WRD(2) as String
BLOCK1: ' BYTE
Get #1, Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1, D3(4)
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))
V=0
C=0
If D3(4)=0 then Z=1 else Z=0
If D3(4)<0 then N=1 else N=0
BLOCK2: ' LONG
D4(4)=0
D4(3)=0
D4(2)=0
D4(1)=1
V=0
C=0
If D4(1)=0 then Z=1 else Z=0
If D4(1)<0 then N=1 else N=0
BLOCK3: ' WORD
FOR CNT=1 TO 2
WRD(CNT)=MID$(HEX$(D4(3)+D4(4)),CNT,1)
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"
ENDIF
NEXT CNT
NEWWORD=WRD(1) + WRD(2)
C=val(right$(NEWWORD, 1))
X=C
FOR CNT=1 TO D3
NEWWORD=MID$(NEWWORD,2,7) & "0"
NEXT CNT
FOR CNT=1 TO 4 STEP 4
NWORD(CNT)=MID$(NEWWORD,CNT, 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)="0001" THEN
BTE(CNT)="C"
ELSEIF NWRD(CNT)="1100" THEN
BTE(CNT)="D"
ELSEIF NWRD(CNT)="1101" THEN
BTE(CNT)="E"
ELSEIF NWRD(CNT)="1111" THEN
BTE(CNT)="F"
ENDIF
NEXT CNT
D4(4)=VAL("&H"+NWORD(1))
D4(3)=VAL("&H"+NWORD(2))
V=0
If VAL(HEX$(D4(4)+D4(3)))=0 then Z=1 else Z=0
If VAL(HEX$(D4(4)+D4(3)))<0 then N=1 else N=0
BLOCK4: ' WORD
If Val(Hex$(Val("&H" + Hex$(D4(4)) + Hex$(D4(3))))) > 1 Then C = 1 Else C = 0
D4(4) = Val(Left$(Hex$(Val("&H" + Hex$(D4(4)) + Hex$(D4(3))) - 1), 2))
D4(3) = Val(Right$(Hex$(Val("&H" + Hex$(D4(4)) + Hex$(D4(3))) - 1), 2))
If VAL(HEX$(D4(4)+D4(3)))=0 then Z=1 else Z=0
X=C
If VAL(HEX$(D4(4)+D4(3)))<0 then N=1 else N=0
BLOCK5: ' BYTE
Get #1, Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1, D0(4)
A0(1)=val("&H"+Mid$(Hex$(Val("&H"+Hex$(A0(4))+Hex$(A0(3))+Hex$(A0(2))+Hex$(A0(1)))+1),7,2))
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))
V=0
C=0
If D4(1)=0 then Z=1 else Z=0
If D4(1)<0 then N=1 else N=0
BLOCK6:
IF Z=1 THEN GOTO $172C |
Большинство операторов и функций VB я не знаю, поэтому использую известные.
Блин, я окончательно во всем запутался.
Последний раз редактировалось: HoRRoR (Пн Июл 10, 2006 3:39 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Пн Июл 10, 2006 3:30 pm Заголовок сообщения: |
|
|
А-а-а... что ты хотел написать в этом коде?
Я ещё не говорю про неправильно написанные команды.
________
А-а-а нет. Всё правильно.
Последний раз редактировалось: IfoR (Пн Июл 10, 2006 3:31 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Июл 10, 2006 3:36 pm Заголовок сообщения: |
|
|
Ura_Orlov писал(а): | А-а-а... что ты хотел написать в этом коде?
Я ещё не говорю про неправильно написанные команды. |
Я хотел перевести это на VB, а насчет неправильных команд - я их сейчас и по-русски могу начать писать - в голове полный хаос. Мозг с утра столько информации обработал, а если ты насчет ElseIf, то я так привык, все-равно VB исправит .
Тем более я писал этот код с чрезвычайно ограниченными знаниями по обоим языкам.
[edit]
А нет, в данном случае ElseIf написан правильно
Последний раз редактировалось: HoRRoR (Пн Июл 10, 2006 3:45 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Пн Июл 10, 2006 3:45 pm Заголовок сообщения: |
|
|
Код: | 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)) |
Не понимаю зачем нужен этот код. |
|
Вернуться к началу |
|
|
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Пн Июл 10, 2006 3:47 pm Заголовок сообщения: |
|
|
HoRRoR писал(а): | Ura_Orlov писал(а): | А-а-а... что ты хотел написать в этом коде?
Я ещё не говорю про неправильно написанные команды. |
Я хотел перевести это на VB, а насчет неправильных команд - я их сейчас и по-русски могу начать писать - в голове полный хаос. Мозг с утра столько информации обработал, а если ты насчет ElseIf, то я так привык, все-равно VB исправит .
Тем более я писал этот код с чрезвычайно ограниченными знаниями по обоим языкам.
[edit]
А нет, в данном случае ElseIf написан правильно |
Ну, я же написал, что всё правильно. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Июл 10, 2006 3:47 pm Заголовок сообщения: |
|
|
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)) |
Не понимаю зачем нужен этот код. |
А как еще присвоить четырем элементам массива по одному байту из значения?
[edit]
Я перевожу значение в hex, затем разрезаю его на четыре части(правда надо бы еще добавить Right$("0000000"+...,<8>*), чтобы по любому было восемь знаков), потом каждую часть по отдельности перевожу в обычную систему счисления и записываю в соответствующий элемент массива.
[edit]
* Вместо "8"+")" смайлик выдавало
Последний раз редактировалось: HoRRoR (Пн Июл 10, 2006 3:56 pm), всего редактировалось 3 раз(а) |
|
Вернуться к началу |
|
|
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Пн Июл 10, 2006 3:49 pm Заголовок сообщения: |
|
|
Код: | If D4(1)<0 then N=1 else N=0 |
Этот код некорректен. Регистр не пожет быть вида -$00000001, он может быть &FFFFFFFE. |
|
Вернуться к началу |
|
|
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Пн Июл 10, 2006 3:52 pm Заголовок сообщения: |
|
|
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)) |
Не понимаю зачем нужен этот код. |
А как еще присвоить четырем элементам массива по одному байту из значения? |
Ты имеешь в виду + рядом с командой? Тогда я сейчас напишу код покороче. |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|