如何存储Assembly 68K CCR的进位位?

时间:2014-05-27 02:34:26

标签: assembly 68000 ccr

我确实在手册中找到了来自CCR指令的MOVE ... http://www.freescale.com/files/archives/doc/ref_manual/M68000PRM.pdf

但我一直收到“无效的寻址模式”错误。我尝试过不同形式的语法,反正我只想存储进位,而不是整个CCR。这些都是我试过没有运气的语法。它非常明确地说大小必须是单词。

MOVE.W CCR,D6
MOVE.W CCR,CARRY
MOVE   CCR,D6
MOVE   CCR,CARRY
MOVE.B CCR,D6
MOVE.B CCR,CARRY

纳达。我究竟做错了什么?有没有更好的方法来专门存储执行位(C)?

1 个答案:

答案 0 :(得分:3)

您不应直接访问SR / CCR以获取单个标志的状态。

68K系列具有非常方便的S(cc)指令(在条件设置下),它为(cc)采用条件谓词,并产生反映条件的字节。例如:

SEQ D0

如果清零零标志,则D0.b变为0x00,否则为0xFF。所有条件谓词对此指令都有效,包括基于进位的测试(SCS,SCC)。

您对CCR的问题在于它首先是不允许在MC68000上(它根本不存在,它是MC68010引入的扩展)。我不确定从CCR执行MOVE是否会触发IllegalInstruction,或者它是否从SR静默转换为MOVE(它们具有几乎相同的编码,只有MOVE SR是字大小的,MOVE CCR是字节大小的。)

您也不应该使用来自SR的MOVE,这会在x> gt的所有MC680x0上爆炸。 0,因为该指令仅在这些处理器上是主管(特权)。

由于家庭内部存在这些差异,因此需要非常小心地访问SR。