Как хранить переносной бит из сборки 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, потому что инструкция только для супервизора (привилегированная) на этих процессорах.
Доступ к СР требует большой осторожности из-за этих различий в семье.