assembly 如何比较两个字符在组装-摩托罗拉68000

bihw5rsg  于 2023-11-19  发布在  其他
关注(0)|答案(2)|浏览(91)

我正在尝试使用CMP来比较存储在堆栈帧中的值与字符。
我已经这样做了,但我一直得到无效的寻址模式。唯一的一次我让它工作是通过存储'B'到一个数据寄存器。但这个子例程必须是透明的,因为它是活动的一部分,所以我不能修改数据寄存器。
第一个月
我还尝试将“B”存储到堆栈帧中,
CMP.B -1(A6),-2(A6)
但这也给了无效的寻址模式。请让我知道任何解决方案,可以保持子程序透明。

7ivaypg9

7ivaypg91#

CMP指令的第二个操作数需要是数据寄存器。或者,CMPA将地址寄存器作为第二个操作数,或者CMPI将立即值作为第一个操作数。这意味着,您可以写入:

CMPI.B #'B',-1(A6)

字符串
许多汇编程序也可能接受cmp.b #'B',-1(A6)并将其转换为CMPI指令。

zzlelutf

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

字符串

相关问题