如何存储汇编 68K CCR 的进位位?

Mil*_*vić 3 assembly 68000 ccr

我确实在手册中找到了 MOVE from CCR 指令... 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
Run Code Online (Sandbox Code Playgroud)

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

Dur*_*dal 5

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

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

SEQ D0
Run Code Online (Sandbox Code Playgroud)

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

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

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

由于家庭内部存在这些差异,获取 SR 需要非常小心。