繁体   English   中英

摩托罗拉68k地址错误

[英]Motorola 68k Addressing errors

所以,基本上,我在星期三有考试,并且我从星期五开始学习68k汇编,因为我一直在努力学习星期五通过的数学考试(我知道您不在乎,但是我这么说您不认为我是个******。)无论如何,我正在尝试编写一个子程序,该程序将[i]与数字#12进行比较。 如果[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 * it的负载,但是我没有人提供帮助,我正在尝试自己完成这项工作。 如果您能提供帮助,那就太好了,谢谢。 这是代码:

            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    

您可能要下载《 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)匹配的寻址模式是“间接寄存器,地址随位移” 问题是您似乎正在尝试从变量中加载值,并将其用作单个指令中的位移。 位移必须是一个立即常数,所以这就是它不起作用的原因。 相反,您可以使用ADDAi的值添加到a0 ,然后执行move.l d3,(a0)

您可能应该从DC.w s中删除#号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM