1
Ромхакинг и программирование / Ребенок изучает asm [SMD]
« : 05 Июнь 2023, 09:15:11 »
значится ребенок это я... товарищ Томахомэ дал замечательную ссылку с примерами и объяснениями: https://mrjester.hapisan.com/04_MC68/Index.html
на буржуйском правда... и не все понятно. вот полистал там всяко разно и пытаюсь все как-то в единую систему в голове привести. вот собственно вопрос про move.
сначала простое: movea.l
насколько я понимаю у него может быть только один набор параметров:
сами параметры пока собрались следующие:
хотелось бы вывести возможные сочетания параметров. типа если для movea.l может быть первым параметром #$00000002, а вторым а0(а0 до а7), то тогда это может выглядеть примерно так:
то есть для первого параметра может быть вид только такой: #$00000002, а второй соответственно а0.
для move вариантов сочетаний больше:
вот пока какие варианты мне попадались:
какие варианты конструкций параметров и их сочетания для move я мог пропустить?
на буржуйском правда... и не все понятно. вот полистал там всяко разно и пытаюсь все как-то в единую систему в голове привести. вот собственно вопрос про 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 я мог пропустить?