Как хранить переносной бит из сборки 68K CCR?

Я нашел MOVE из инструкции 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

Нада. Что я делаю неправильно? Есть ли лучший способ хранить специальный бит (C)?

1 ответ

Вы не должны получать прямой доступ к SR/CCR, чтобы получить состояние одного флага.

Семейство 68K имеет очень удобную инструкцию S(cc) (устанавливается при условии), которая принимает условный предикат для (cc) и приводит к байту, отражающему условие. Пример:

SEQ D0

Если нулевой флаг очищен, D0.b становится 0x00, в противном случае 0xFF. Все условные предикаты действительны для этой инструкции, которая включает тесты на основе переноса (SCS, SCC).

Ваша проблема с CCR состоит в том, что он в первую очередь не разрешен на MC68000 (он просто не существует, его расширение введено с MC68010). Я не уверен, что выполнение MOVE из CCR запускает IllegalInstruction или если он молча преобразуется в MOVE из SR (они имеют почти одинаковую кодировку, только MOVE SR имеет размер слова, MOVE CCR имеет размер в байтах).

Вы также не должны использовать MOVE от SR, который взорвется на всех MC680x0 с x > 0, потому что инструкция только для супервизора (привилегированная) на этих процессорах.

Доступ к СР требует большой осторожности из-за этих различий в семье.

Другие вопросы по тегам