Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 摩托罗拉68k寻址错误_Assembly_Motorola_68000 - Fatal编程技术网

Assembly 摩托罗拉68k寻址错误

Assembly 摩托罗拉68k寻址错误,assembly,motorola,68000,Assembly,Motorola,68000,所以,基本上,我周三有一个考试,周五我开始学习68k汇编,因为我一直在忙着准备周五通过的数学考试(我知道你不在乎,但我这么说是为了让你不认为我是a*****)。总之,我正在试着写一个子程序,比较[I]和数字12。如果[i]=#12,那么内存偏移量($8200+[i])=D3-#1,否则内存偏移量($8100+[i])=2*D3。当我尝试组装它(使用ASIMTOOL)时,它会给我这些错误 ERROR in line 10: Displacement out of range ERROR in l

所以,基本上,我周三有一个考试,周五我开始学习68k汇编,因为我一直在忙着准备周五通过的数学考试(我知道你不在乎,但我这么说是为了让你不认为我是a*****)。总之,我正在试着写一个子程序,比较[I]和数字12。如果[i]=#12,那么内存偏移量($8200+[i])=D3-#1,否则内存偏移量($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   
我知道这段代码,这是一堆代码,但我没有人帮助我,我正试着自己做这件事。如果你能帮忙,那就太棒了,谢谢你。代码如下:

            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.有效寻址模式和类别”):

寻址模式语法
直接注册
数据Dn
致辞
寄存器间接
地址(An)
带后增量的地址(An)+
预录地址-(An)
带位移的地址(d16,An)
带索引的地址寄存器
8位位移(d8、An、Xn)
基底位移(bd、An、Xn)
间接记忆
后索引([bd,An],Xn,od)
预索引([bd,An,Xn],od)
程序计数器间接
带位移(d16,PC)
带索引的程序计数器
8位位移(d8,PC,Xn)
底座位移(bd、PC、Xn)
程序计数器存储器
后索引([bd,PC],Xn,od)
预索引([bd,PC,Xn],od)
绝对数据寻址
短(xxx).W
龙(xxx).L
立即的#
匹配
MOVE.ld3,i(a0)
的寻址模式是“寄存器间接,带位移的地址”。问题在于,您似乎试图从一个变量加载值,并将其用作单个指令中的置换。位移必须是一个立即常数,所以这就是它不起作用的原因。您可以使用
ADDA
i
的值添加到
a0
中,然后执行
move.ld3,(a0)


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

非常感谢,你能帮我做一下其他的部分吗?代码正在工作,但在执行“VERO”子例程之后,它会跳转到“FALSO”子例程。如何正确编写IF-ELSE?(就像我在C中所做的那样)作为
部分的最后一条指令,将一个无条件跳转到放置在
其他部分的最后一条指令后面的标签。
ORG$8000 START MOVE.l#0,D3 MOVEA.l#8200,a0 MOVEA.l#8100,a1 CMP.w#12,I BEQ.s VERO VERO VERO:SUB.w#1,D3 ADDA.l I,a0 MOVE.l D3,a0 JMP STOP FALSO:MULU.w#2,D3 ADDA.l i,a0 MOVE.w D3,a0 STOP:STOP#2000 i DC.w 12 x DC.w 4 y DC.w 3 END START
第6行出现错误:分支指令移位超出范围或无效第6行是BEQ.s VERO行。(如何在注释中编写代码?)。
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>