Motorola 68k解决错误

时间:2015-02-01 11:41:55

标签: assembly motorola 68000

所以,基本上,我周三参加了考试,周五我开始学习68k大会,因为我一直忙于数学考试,周五通过(我知道你不在乎,但我这样说,所以你不认为我是一个******。)无论如何,我正在尝试编写一个子程序,将[i]与数字#12进行比较。 IF [i] =#12,然后存储器偏移($ 8200 + [i])= D3-#1,ELSE存储器偏移($ 8100 + [i])= 2 * D3。当我尝试组装它(使用ASIMTOOL)时,它给了我这些错误

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   

我知道这段代码是s *它的负载,但是我没有人帮助我,而我正试图自己做这件事。如果你能提供帮助,那就太棒了,谢谢。这是代码:

            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    

1 个答案:

答案 0 :(得分: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)的寻址模式是&#34;注册间接,带位移的地址&#34; 。问题是你似乎试图从变量中加载值并将其用作单个指令中的位移。流离失所需要立即不变,这就是为什么它不起作用。您可以执行的操作是使用ADDAi的值添加到a0,然后执行move.l d3,(a0)

您应该从#中删除DC.w个符号。