Автор Тема: Ребенок изучает asm [SMD]  (Прочитано 4429 раз)

Томахомэ и 2 Гостей просматривают эту тему.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Ребенок изучает asm [SMD]
« : 05 Июнь 2023, 09:15:11 »
значится ребенок это я... товарищ Томахомэ дал замечательную ссылку с примерами и объяснениями: https://mrjester.hapisan.com/04_MC68/Index.html
на буржуйском правда... и не все понятно. вот полистал там всяко разно и пытаюсь все как-то в единую систему в голове привести. вот собственно вопрос про move.

сначала простое: movea.l
насколько я понимаю у него может быть только один набор параметров:
movea.l #$00000002, a0то есть пишем значение $2 в регистр a0. точнее не значение, а адрес памяти. то есть никакого другого варианта сочетания параметров тут быть не может?

сами параметры пока собрались следующие:
d0, a0, (a0), $02(a0), (a0)+, -(a0), $02, #$02 неисключено что какие-то варианты я конечно пропустил...

хотелось бы вывести возможные сочетания параметров. типа если для movea.l может быть первым параметром #$00000002, а вторым а0(а0 до а7), то тогда это может выглядеть примерно так:

то есть для первого параметра может быть вид только такой: #$00000002, а второй соответственно а0.

для move вариантов сочетаний больше:

вот пока какие варианты мне попадались:
move.w d0, d1
копирование из регистра d0 в регистр d1 на длину .w - 2 байта
d0 = 8765 4321
d1 = 1234 5678
после этого копирования:
d1 = 1234 4321

move.w d0, $0000104E
копирование 2 байт (так как .w) из регистра d0 в адрес памяти $0000104E

move.w $00001062, d0
копирование из памяти по адресу $00001062 2 байт (потому что .w) в регистр d0
move.w $00001061, d0
нельзя читать из памяти по нечетному адресу более 1 байта (.w или .l). приведет к ошибке. только если .b - 1 байт

move.l $00000800, $00000822
копирование 4 байт (потому что .l) из памяти $00000800 в память $00000822

move.b #$44, (a0)
(a0) будучи в скобках это не регистр, а указатель (адрес) на память. пишем значение $44 по адресу из a0

move.b #$9B, $04(a0)
читаем адрес из а0, прибавляем к этому адресу $04, пишем по этому новому полученному адресу значение $9B

move.b #$B5, (a0)+
пишем значение $B5 по адресу из a0. увеличиваем адрес в а0 на единичку. видимо если будет move.w - прибавляем не 1, а 2. move.l - прибавляем 4.

move.b #$2E, -(a0)
читаем адрес из а0, вычитаем единичку из этого адреса, пишем в полученный новый адрес значение $2E
то есть я предполагаю что варианты со скобами (а0) могут быть только в качестве второго параметра. а голая а0 наоборот не может быть вторым параметром, а только первым.

какие варианты конструкций параметров и их сочетания для move я мог пропустить?
« Последнее редактирование: 05 Июнь 2023, 16:01:10 от SeregaZ »

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5077
    • Просмотр профиля
Ребенок изучает asm
« Ответ #1 : 05 Июнь 2023, 11:17:36 »
https://web.njit.edu/~rosensta/classes/architecture/252software/code.pdf страница 56, перечислены Addressing Mode. Как там и замечено, в ассемблерах, если у move указать регистр адреса как конечный, то будет movea.

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1169
    • ВКонтакте
    • Steam
    • Просмотр профиля
Ребенок изучает asm
« Ответ #2 : 05 Июнь 2023, 13:02:54 »
Добавь в заголовок платформу - [SMD] Ребёнок изучает asm
Сказал бы, что тема не в том разделе, но ты явно изучаешь ведь для создания программ для ромхакинга, да? :)

какие варианты конструкций параметров и их сочетания для move я мог пропустить?
Глянь тут:
https://info.sonicretro.org/SCHG:68000_ASM-to-Hex_Code_Reference

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #3 : 05 Июнь 2023, 16:18:32 »
только только начинала вырисовываться схема... а тут началось.
move.b #$64, ($FFFFFFE0).wчего это оно в скобках, а еще и .w ? вроде ж move.b - то есть про один байт. а там .w...

потом выяснилось что варианты в скобках могут быть первым параметром тоже...
move.b (a3), d1
потом ваще какая-то вакханалия начала творится:
move.b $14(a2,d6.w), ($FFFFE446).w
потом появляется pc
move.b $5E(pc,d0.w), d2
потом оказалось что movea.l не единственный возможный вариант, но еще и movea.w

потом movep.w, movep.l, moveq (ну хоть тут один вариант)

и контрольным в голову:
movep.l 0(a0), d3накой ноль перед скобками? вроде ж надо прибавлять к а0 то число, что перед скобками... но там 0. какой с мысл в этой конструкции? чушь какая-то :)

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1169
    • ВКонтакте
    • Steam
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #4 : 05 Июнь 2023, 22:54:18 »
Вот ещё глянь, специально поискал для тебя в своих сохранках: https://vladikcomper.scanf.su/sonic_guides_view.htm?2
Наиболее разжёванный вариант, вроде как.

M68k замудрёнее x86 как по мне. Пару лет назад я ничего этого не знал и начал писать свой дизассемблер x86.
После месяца мучений начал понимать, что тут что-то не так, и префиксы у него слишком сложные, чтобы брать их нахрапом. Потом уже засел за дизассемблер m68k с мыслью, что проц старенькой приставки уж точно должен даться легко :lol:
Оказалось, новичкам не всегда везёт, а мне не повезло аж дважды - дважды наткнуться на сложнейшие CISC. Но зато очень повезло потом узнать про существование Capstone Engine - оно настолько облегчило мои страдания, что я потом долго присылал им донаты, пока России не перекрыли международные переводы.
Так что если что - даже не вздумай браться за дизассемблер m68k, Capstone Engine очень просто подключить и использовать.


Добавлено позже:
Вот что может помочь разобраться - онлайн ассемблер. Покажет все валидные параметры при вводе.
move.b #$64, ($FFFFFFE0).w действительно не принимает, хочет без .w, но это зависит от ассемблера, похоже.

Добавлено позже:
накой ноль перед скобками?
Скорее всего, это просто пример, чтобы не нагружать понимание лишними битами там справа.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #5 : 06 Июнь 2023, 08:57:50 »
этот онлайн ассемблер класс... но он точно работает?

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #6 : 06 Июнь 2023, 11:41:38 »
A7 - это стек поинтер

Добавлено позже:
Есть ещё симулятор easy68k.
Я на нём компилирую код.

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1169
    • ВКонтакте
    • Steam
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #7 : 06 Июнь 2023, 12:22:02 »
SeregaZ, как уже написал Марат, это указатель вершины стёка (sp - stack pointer). Его автоматически ставит на самый конец памяти этот онлайн компилятор (или процессор?), но можно поставить и вручную. В других системах он обычно выделяется отдельно, но тут в m68k он маскируется под обычный адресный регистр. Придётся запомнить.
movea.l #$000010ff, a7 будет аналогичен movea.l #$000010ff, sp - можно писать и так, и так.
Кстати, лучше сразу установи стёк с movea.l #$000010ff, sp, чтобы он указывал не на конец памяти где-то за экраном справа, а на конец памяти, который сейчас виден на экране.


Добавлено позже:
easy68k
Интерфейс не страшноват ли для новичка? И он показывает валидные параметры при вводе и наведении, или только подсвечивает ошибки?

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #8 : 06 Июнь 2023, 13:02:06 »
И он показывает валидные параметры при вводе и наведении, или только подсвечивает ошибки?
Не думаю. Подсветка какая-то была.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #9 : 06 Июнь 2023, 13:03:45 »
ясно что ничего не ясно... это пока ладно. листаю https://info.sonicretro.org/SCHG:68000_ASM-to-Hex_Code_Reference
и там есть такой момент:
move.b (a2,d0.w), d1и как его осознать то? :) как бы понятно что move это копирование чего-то куда-то. скопировать a2 куда-то я еще понимаю. скопировать (а2) куда-то я еще понимаю. но здесь что происходит (a2,d0.w)?

второе:
move.b $5E(pc,d3.w), ($FFFFE446).w 0001 0001 1111 1011 11FB 305E E446что за pc? и второе, главное - в этой таблице указан результат 11FB 305E E446 - НО! если втулить в ASM68K.EXE эту конструкцию он родит на единицу меньше.
11FB 305C E446
где ашипка? у того парня на сайте, в компиляторе ASM68K.EXE или моих кривых руках?

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #10 : 06 Июнь 2023, 15:07:41 »
ясно что ничего не ясно... это пока ладно. листаю https://info.sonicretro.org/SCHG:68000_ASM-to-Hex_Code_Reference
и там есть такой момент:
move.b (a2,d0.w), d1и как его осознать то? :) как бы понятно что move это копирование чего-то куда-то. скопировать a2 куда-то я еще понимаю. скопировать (а2) куда-то я еще понимаю. но здесь что происходит (a2,d0)
Это индексная адресация.
Надо сложить содержимое регистров А2+D0.
Причем у d0 надо брать только два младших байта на что указывает .w.
Это будет адрес откуда надо прочитать один байт и поместить его в d1.


Добавлено позже:
второе:
move.b $5E(pc,d3.w), ($FFFFE446).w 0001 0001 1111 1011 11FB 305E E446что за pc?
pc - это program counter.
Здесь относительная адресация.
Означает взять адрес по-которому происходит исполнение + 2 байта(размер команды) + $5E + D3.w. Полученное значение будет адрес по которому нужно прочитать один байт в память по адресу $ffe446

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #11 : 06 Июнь 2023, 16:36:57 »
Цитата
нужно прочитать один байт в память по адресу $ffe446
точно $ffe446 ? не $ffffe446 или не $e446 ?

просто меня смущает во первых: ($FFFFE446).w - w за скобками. во вторых компилируется это как:
11FB 305C E446то есть только E446, а не 00FF E446 или FFFF E446

не говоря уже про то расхождение:
11FB 305E E446 - у него на сайте
11FB 305C E446 - то что рожает ASM68k.EXE

хотя видимо эта разница 5Е - 5С как раз и есть те 2 байта размера команды:
Цитата
адрес по-которому происходит исполнение + 2 байта(размер команды) + $5E + D3.w
то есть на сайте у него все-таки ошибка?

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #12 : 06 Июнь 2023, 16:48:23 »
точно $ffe446 ? не $ffffe446 или не $e446 ?
Да без разницы, всё равно запись будет в ОЗУ по адресу ffe446. Видимо, в самой команде уже указано, что запись идёт в ОЗУ. Поэтому компилируется более короткий код без ff.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #13 : 07 Июнь 2023, 07:42:32 »
продолжаю упарываться:
1. первое
movea.w #$6000, a4
move.w #$6000, a4

move.l (a1)+, a2
movea.l (a1)+, a2
компилируется одинаковый результат что move что movea. я так понимаю нет никакой разницы? чисто визуально добавлена movea, а так вполне можно всегда писать move ?

2. второе
дальше там movep
movep.w 0(a0), d3
movep.l 0(a0), d3
что оно делает?

3. третье
moveq (причем без вариантов типов переменной .w или .l или .b видимо существует только что-то одно)
moveq #$80, d1где видимо ошибка у него на сайте - 7280, так как компилятор ругается и вместо 7280 рожает 7261. видимо #$7F это максимально возможное значение.
что оно делает?

на этих вопросах видимо с move всё.

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #14 : 07 Июнь 2023, 08:48:02 »
moveq (причем без вариантов типов переменной .w или .l или .b видимо существует только что-то одно)
MoveQ - Move quick - передача с расширением знака.
Например Moveq #$80,D0
Теперь в D0 = $FFFFFF80;

Moveq #$7F, D0 - > D0 = $0000007F;
Т.е. самый старший знаковый бит в байте копируется во все старшие биты.
Это нужно, чтобы отрицательное число всегда оставалось отрицательным, а положительное - положительным.
А quick, видимо, потому операнд дата занимает всего один байт.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Re: Ребенок изучает asm [SMD]
« Ответ #15 : 07 Июнь 2023, 15:52:11 »
опять у него ашипка  >:(
pea d2 0100 1000 0100 0010 4842
swap d0 0100 1000 0100 0000 4840
смотрю думаю фигня какая-то. как может быть практически одинаковый код... сунул в ASM68K.asm - аааа заругался :) я же знал что такого быть по идее не должно :) pea d2 улетает в черную дыру. нет такой буквы в алфавите.

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8104
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #16 : 08 Июнь 2023, 19:00:33 »
Засев за изучения ассемблера Моторолы после Хитачи Сатурна и Мипса ПС1, меня сразу стала напрягать перемудрённая конструкция инструкций первого. Куча разных названий однотипных инструкций, перемешанный со значениями код инструкций, постоянно меняющийся размер инструкций, ограничения по использованию типов регистров и т.д. Хорошо хоть порядок байт не перевёрнутый, а то был бы "полный восторг".

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1169
    • ВКонтакте
    • Steam
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #17 : 08 Июнь 2023, 20:53:57 »
А что сложного в преобразовании машинного кода в инструкции, если есть документация под рукой?
:)
+ещё и несколько разных синтаксисов, что вон злит SeregaZ.
В x86-64 всё то же самое, но ещё и порядок байт перевёрнутый :lol:

в CISC процессорах, с паровозом legacy-костылей 40-летней давности, типа x86 мозгами поехать можно

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Re: Ребенок изучает asm [SMD]
« Ответ #18 : 09 Июнь 2023, 06:31:35 »
ну... пока только сами конструкции разбираю. с вопросами что именно они делают - пока повременю. с того сайта большую половину уже внёс. почти везде понятно как разбирать эти команды. хотя думаю было бы не плохо внести на тот сайт исправления как с ошибками, так и недостающими вариациями вводимых параметров. а еще докучи новую колонку добавить с кратким описанием простыми словами что там происходит.


Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1169
    • ВКонтакте
    • Steam
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #19 : 10 Июнь 2023, 12:53:51 »
Рекомендую тебе поделить все инструкции на три группы - перемещение (move), операции над данными (add, div, or...), изменения хода исполнения инструкций (jmp, rte...).

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #20 : 11 Июнь 2023, 04:38:49 »
Вот опкоды в хексе.
Тут две странички с сортировкой:
1) по битам
2) по названию команды

На счет отличий MOVE от MOVEA:
  • Размер данных: MOVE автоматически определяет размер данных, основываясь на размерности операндов, тогда как MOVEA работает только с адресами и не учитывает размер самих данных.
  • Расширение адресов: Когда MOVEA копирует 16-битный адрес в 32-битный регистр, она расширяет адрес, добавляя ведущие нули, чтобы заполнить оставшиеся биты. MOVE не выполняет автоматического расширения адреса.

Расширение адреса крутая штука, потому что адрес можно записать как 2 байта вместо 4, но адрес должен быть в диапозоне с $FFFF8000 до $FFFFFFFF
Тогда адрес можно записать как ($FFFFC400).w и в роме команда будет содержать 2 байта адреса $C400 вместо $FFFFC400

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #21 : 11 Июнь 2023, 22:47:48 »
На счет отличий MOVE от MOVEA:
  • Размер данных: MOVE автоматически определяет размер данных, основываясь на размерности операндов, тогда как MOVEA работает только с адресами и не учитывает размер самих данных.
  • Расширение адресов: Когда MOVEA копирует 16-битный адрес в 32-битный регистр, она расширяет адрес, добавляя ведущие нули, чтобы заполнить оставшиеся биты. MOVE не выполняет автоматического расширения адреса.
Все 16-битные операции с An регистрами знако-расширяемые до 32 сами по себе, включая "cmpa.w", а не только move.
Но только с .w  , так как с .l расширять уже некуда, а .b  не бывает с Ax регистрами.  Но отличие в том, что movea не меняет никакие флаги статуса (xnzvc).

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9386
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #22 : 12 Июнь 2023, 00:26:32 »
Засев за изучения ассемблера Моторолы после Хитачи Сатурна и Мипса ПС1, меня сразу стала напрягать перемудрённая конструкция инструкций первого. Куча разных названий однотипных инструкций, перемешанный со значениями код инструкций, постоянно меняющийся размер инструкций, ограничения по использованию типов регистров и т.д. Хорошо хоть порядок байт не перевёрнутый, а то был бы "полный восторг".
это потому что SuperH и MIPS это наборы инструкций типа RISC, а МС680х0 это классический CISC
можешь еще глянуть на систему команд более старых хитачей, семейство "Hitachi H8", там тоже CISC с плюс-минус схожими наворотами как у моторол 68К

Кстати, лучше сразу установи стёк с movea.l #$000010ff, sp, чтобы он указывал не на конец памяти где-то за экраном справа, а на конец памяти, который сейчас виден на экране.
так как ты пишешь делать низя, в указателе стека должно быть чётный адрес, на старте обычно в него пишется [последний адрес ОЗУ]+1
а если сделать по твоему, по идее, при первой же попытке прыжка в подпрограмму проц улетит в исключение, от попытки записи 32бит значения по нечетному адресу
« Последнее редактирование: 12 Июнь 2023, 00:35:17 от MetalliC »

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1169
    • ВКонтакте
    • Steam
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #23 : 12 Июнь 2023, 14:04:54 »
MetalliC, спасибо, действительно. Изучаю m68k вместе с автором темы и надеялся на подстраховку того онлайн ассемблера. А он действительно глючный, похоже.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #24 : 12 Июнь 2023, 14:33:04 »
я кароче ослепну скоро... уже глаз дергается :)

сидел такой возмущался почему move без знаков (.w, .l, .b) мне все портит с not, neg и lea... плевался плевался, но вроде все сделал и стало разбирать... вроде бы. потом дошла очередь до rol, ror, roxl, roxr, asr, lsl, lsr... и причем некоторые еще без знаков. да твою ж мать... решил отвлечаться - сделал разукраску битов, и только после неё что-то вроде начало прояснятся:

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1169
    • ВКонтакте
    • Steam
    • Просмотр профиля
Re: Ребенок изучает asm [SMD]
« Ответ #25 : 12 Июнь 2023, 21:46:36 »
Не пробовал искать в сети что-то подобное? Вдруг ты повторяешь уже созданное?
Ты собрался вводить биты вручную, чтобы не прибегать к помощи ассемблера? :)
Я собирался делать что-то подобное для x86, но всё же сначала поищу готовые варианты. У тебя получается что-то любопытное :thumbup:

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2536
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #26 : 13 Июнь 2023, 12:51:55 »
ориентируюсь на сайт, что мне здесь в теме посоветовали: https://info.sonicretro.org/SCHG:68000_ASM-to-Hex_Code_Reference
но там местами ошибки, неточности, и бывает не хватает команд и вариантов параметров к ним.

Добавлено позже:
addq.l #4, a7
addq.l #4, sp
опять одинаковый код на выходе - $588F. зачем этот sp придумали?


Добавлено позже:
азазазаз пришло время практики :)

понятно что перепрыгивать кусочки данных, как Ида делает - мое творение не умеет, но ежели там код идет сплошняком, как оставшиеся у меня кусочки функций от мк3, когда там пытался переместить данные после гемс банков вверх, чтобы новые банки писать уже после всех важных данных и до конца рома, не стесняясь в размерах. так вот втулил первый кусочек и почти как в Иде :)



на втором кусочке правда спотыкнулось... jsr ему видите ли не понравилось... пойду смотреть.

Добавлено позже:
тааааак... Ида глючная? (естесно моя программа не может быть глючная :))))

1. скармливаем ASM68K.exe код
jsr $1E(pc)2. рожается файл с содержимым:
4E BA 00 1C3. втуливаем этот файл Иде и она его понимает как:
jsr     $1Eэм... а куда оно потеряло (pc) ?
4. моя приблуда родит как:
jsr $001C(pc)это то понятно, что мне пока не понятно почему этот самый pc дает минус 2 к числу, стоящему перед... но пока не в этом вопрос, а в том почему Ида брыкается?

соответственно в коде мк3 есть момент:
4E BA FF D0то есть 4E BA должно по идее разобрать как jsr $*(pc)
но Ида этот момент показывает как:
jsr     $FFFFE2я так понимаю она уже изначально просчитывает этот нюанс с pc и вычитает заранее, показывая готовый результат. так сказать упрощает визуально код. ноооо это не точно :)

кто может прокомментировать сию ситуацию?

Добавлено позже:
Ида 6.8, 64 битная, с установленными какими-то там дополнительными файлами для 68000, взятые отсюда с форума сто писят лет назад.

Добавлено позже:
*забился в угол и плачет, случайно найдя еще одну неизвестную доселе команду: movem.l d1/a1,-(sp)
« Последнее редактирование: 13 Июнь 2023, 15:10:34 от SeregaZ »

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #27 : 13 Июнь 2023, 19:11:34 »
это то понятно, что мне пока не понятно почему этот самый pc дает минус 2 к числу, стоящему перед...
Ты даёшь команду процессору прыгнуть на адрес $1E и выполнить что-то. Он вычисляет адрес так. $1E - текущий адрес pc (после того, как он прочитал код команды, который равен два байта, то адрес pc уже на два байта больше, чем адрес по которому стоит команда jsr $1E(pc)).   Соответственно, если адрес команды jsr $1E(pc) = $0, то адрес pc в момент вычисления будет = $2. $1E - 2 = $1C.

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1169
    • ВКонтакте
    • Steam
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #28 : 13 Июнь 2023, 19:20:00 »
опять одинаковый код на выходе - $588F. зачем этот sp придумали?
Специально ведь выделял тебе красным до этого. Или не знаешь зачем нужен стёк? Он нужен как временная память для адресов возврата из функции, для её параметров и других временных данных. Когда функция вызывает другую, а та третью, то где-то надо складировать все эти адреса для возврата назад.

найдя еще одну неизвестную доселе команду: movem
Если бы не пропускал то, что скинул Sharpnull, то это для тебя не было бы неожиданностью.
Я потому и скинул разные источники, т.к. в каждом могут быть ошибки или другой синтаксис, и поэтому надо бы уточнять собирая информацию.

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Ребенок изучает asm [SMD]
« Ответ #29 : 13 Июнь 2023, 19:21:57 »
эм... а куда оно потеряло (pc) ?
Это уже обсуждалось
https://www.emu-land.net/forum/index.php/topic,26905.msg385479.html#msg385479 здесь. Потом это было исправлено, возможно, в новых версиях.