3

我确实在手册中从 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)?

4

1 回答 1

4

您不应直接访问 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 > 0 的所有 MC680x0 上爆炸,因为该指令在这些处理器上仅是主管(特权)。

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

于 2014-06-04T14:05:52.707 回答