我正在尝试使用CMP来比较存储在堆栈帧中的值与字符。我已经这样做了,但我一直得到无效的寻址模式。唯一的一次我让它工作是通过存储'B'到一个数据寄存器。但这个子例程必须是透明的,因为它是活动的一部分,所以我不能修改数据寄存器。第一个月我还尝试将“B”存储到堆栈帧中,CMP.B -1(A6),-2(A6)个但这也给了无效的寻址模式。请让我知道任何解决方案,可以保持子程序透明。
CMP.B -1(A6),-2(A6)
7ivaypg91#
CMP指令的第二个操作数需要是数据寄存器。或者,CMPA将地址寄存器作为第二个操作数,或者CMPI将立即值作为第一个操作数。这意味着,您可以写入:
CMP
CMPA
CMPI
CMPI.B #'B',-1(A6)
字符串许多汇编程序也可能接受cmp.b #'B',-1(A6)并将其转换为CMPI指令。
cmp.b #'B',-1(A6)
zzlelutf2#
但是这个子例程必须是透明的,因为它是活动的一部分,所以我不能修改数据寄存器。当然可以。你在子程序开始的时候把数据寄存器的内容压入栈中,然后在结束的时候把它们放回去
# Save registers you're using on stack... MOVEM.L D0-D1,-(A7) # use D0 and D1 here MOVE.B -2(A6),D0 CMP.B -1(A6),D0 # Put data registers back to original MOVEM.L (A7)+,D0-D1
字符串
2条答案
按热度按时间7ivaypg91#
CMP
指令的第二个操作数需要是数据寄存器。或者,CMPA
将地址寄存器作为第二个操作数,或者CMPI
将立即值作为第一个操作数。这意味着,您可以写入:字符串
许多汇编程序也可能接受
cmp.b #'B',-1(A6)
并将其转换为CMPI
指令。zzlelutf2#
但是这个子例程必须是透明的,因为它是活动的一部分,所以我不能修改数据寄存器。
当然可以。你在子程序开始的时候把数据寄存器的内容压入栈中,然后在结束的时候把它们放回去
字符串