2015-02-01 5 views
0

Итак, в основном, у меня есть экзамен в среду, и я начал изучать сборку 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  

ответ

0

Возможно, вы захотите загрузить Справочное руководство программиста M68000. Вот краткое описание способов адресации из этого документа («Таблица 2-4 Эффективные режимы адресации и категории.»):

Addressing Modes    Syntax 
Register Direct 
    Data      Dn  
    Address      An  

Register Indirect 
    Address      (An) 
    Address with Postincrement (An)+ 
    Address with Predecrement -(An) 
    Address with Displacement (d16,An) 

Address Register Indirect with Index 
    8-Bit Displacement   (d8,An,Xn) 
    Base Displacement   (bd,An,Xn) 

Memory Indirect 
    Postindexed     ([bd,An],Xn,od) 
    Preindexed     ([bd,An,Xn],od) 

Program Counter Indirect 
    with Displacement   (d16,PC) 

Program Counter Indirect with Index 
    8-Bit Displacement   (d8,PC,Xn) 
    Base Displacement   (bd,PC,Xn) 

Program Counter Memory Indirect 
    Postindexed    ([bd,PC],Xn,od) 
    Preindexed     ([bd,PC,Xn],od) 

Absolute Data Addressing 
    Short (xxx).W 
    Long (xxx).L 

Immediate  #<xxx> 

адресации режим согласования MOVE.l D3,i(a0) является «Регистрация Косвенным, адреса с Смещением» , Проблема в том, что вы пытаетесь загрузить значение из переменной и использовать ее как перемещение в одной команде. Вытеснение должно быть постоянным, поэтому он не работает. Вместо этого вы можете использовать ADDA, чтобы добавить значение i в a0, а затем сделать move.l d3,(a0).

Возможно, вы должны удалить знаки # от DC.w.

+0

Большое спасибо, не могли бы вы помочь мне с остальной частью? Код работает, но после выполнения подпрограммы «VERO» он переходит к подпрограмме «FALSO». Как я могу правильно кодировать IF-ELSE? (Как и в C) –

+0

В качестве последней инструкции части 'then', поставьте безусловный переход на метку, размещенную сразу после последней инструкции части' else'. – Michael

+0

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: смещение команды выведения за пределы допустимого диапазона или неверно –