Итак, в основном, у меня есть экзамен в среду, и я начал изучать сборку 68k в пятницу, потому что я был занят изучением математического экзамена, прошедшего в пятницу (я знаю, что вы не но я говорю это, поэтому вы не думаете, что я ******.) В любом случае, я пытаюсь написать подпрограмму, которая сравнивает [i] с номером № 12. IF [i] = # 12, затем смещение памяти ($ 8200 + [i]) = D3- # 1, смещение памяти ELSE ($ 8100 + [i]) = 2 * D3. Когда я пытаюсь собрать это (используя ASIMTOOL), это дает мне эти ошибкиMotorola 68k Ошибки адресации
ERROR in line 10: Displacement out of range
ERROR in line 12: Displacement out of range
ERROR in line 15: Invalid syntax
ERROR in line 16: Invalid syntax
Я знаю, что этот код это нагрузка с *, но у меня нет ни одного помогать мне, и я пытаюсь сделать это я сам. Если бы вы могли помочь, это было бы здорово, спасибо. Вот код:
ORG $8000
START MOVE.l #0,D3
MOVEA.l #$8200,a0
MOVEA.l #$8100,a1
CMP.w #12,i
BEQ.s VERO
JMP FALSO
VERO: SUB.w #1,D3
MOVE.l D3,i(a0)
FALSO: MULU.w #2,D3
MOVE.w D3,i(a1)
STOP #2000
i DC.w 12
x DC.w #4
y DC.w #3
END START
Большое спасибо, не могли бы вы помочь мне с остальной частью? Код работает, но после выполнения подпрограммы «VERO» он переходит к подпрограмме «FALSO». Как я могу правильно кодировать IF-ELSE? (Как и в C) –
В качестве последней инструкции части 'then', поставьте безусловный переход на метку, размещенную сразу после последней инструкции части' else'. – Michael
ORG \t \t $8000 START \t \t MOVE.l \t \t #0,D3 \t \t MOVEA.l \t #$8200,a0 \t \t MOVEA.l \t #$8100,a1 \t \t CMP.w \t \t #12,i \t \t BEQ.s \t \t VERO VERO: \t \t SUB.w \t \t #1,D3 \t \t ADDA.l \t \t i,a0 \t \t MOVE.l \t \t D3,a0 \t \t JMP \t \t STOP FALSO: \t MULU.w \t #2,D3 \t \t ADDA.l \t \t i,a0 \t \t MOVE.w \t D3,a0 STOP: \t \t STOP \t \t #2000 i \t \t DC.w \t \t 12 x \t \t DC.w \t \t 4 y \t \t DC.w \t \t 3 \t \t END \t \t START
Это дает мне ошибку в строке 6: смещение команды выведения за пределы допустимого диапазона или неверно –