Сборка 68k: Сохраняет ли ЦП регистр состояния при прерывании?

Мне не удалось найти никакой информации о том, сохраняет ли MC68000 свой регистр состояния / CCR во время внешних прерываний. Я предполагаю, что это было бы проблемой, если бы ЦП прерывал непосредственно перед условным переходом, и прерывание модифицировало бы CCR. Прямо сейчас мой код прерывания выглядит так:

            ORG     $110000   ; Location of IPL6 vector
IPL6        MOVE.W  SR, -(SP) ; Is this line necessary?
            MOVE.L  D0, -(SP)
            ; Perform interrupt tasks here
            MOVE.L  (SP)+, D0
            MOVE.W  (SP)+, SR ; Is this line necessary?
            RTE               ; Return

Мне интересно, требуются ли указанные строки, которые выталкивают/извлекают SR из стека, или ЦП автоматически сохраняет и восстанавливает SR во время прерываний.


person cjgriscom    schedule 20.02.2017    source источник


Ответы (2)


Да, ЦП сохраняет регистр состояния при прерывании. Логически это необходимо, иначе могут возникнуть такие проблемы, как вы упомянули.

На странице 6–84 документа MOTOROLA M68000 FAMILY Programmer's Reference Manual the RTE command shows that it restores SR among other registers so it has to have been stored previously.

person Sami Kuhmonen    schedule 20.02.2017

Ваш вопрос на самом деле сформулирован несколько неудачно, потому что вы не указываете, кто (процессор или код):

Да, CCR должен сохраняться во время прерываний (по понятным причинам, которые вы указали).

Но нет, это не должно быть явно сохранено программистом (как это делается без необходимости в вашем примере), потому что ЦП делает это автоматически, когда он обслуживает прерывание .

person tofro    schedule 10.03.2017
comment
Справедливости ради, я немного подправил заголовок. - person cjgriscom; 12.03.2017