A arquitetura MIPs, ARM, entre outras. Possui o modo de execução tipo load-store.
Entre estas duas execuções via hardware, por causa da estrutura da maquina, não é possível existir interrupção de qualquer tipo.
https://en.wikipedia.org/wiki/Classic_RISC_pipeline (lembrando que o pipeline do pic é de 4 níveis).
O que ocorre, erroneamente interpretado por iniciantes é que se ele estiver em uma parte do código prestes a executar um teste para saber se é maior ou menor que, e ocorrer uma interrupção e dentro desta
não existir um cache do "status", dentro da interrupção qualquer instrução de movimento de dados vai alterar o seu valor.
Por este motivo, ao entrar na interrupção é necessário mover o status e o registro de load_store para registradores temporários, e ao final da interrupção antes do retfie fazer a carga novamente destes em seus respectivos.
A única instrução que não altera o status é o swap, então fica mais ou menos assim (faz muito tempo que não uso assembly) se eu indicar algo errado, me corrijam por favor.
ORG 0x04
swap status, cache_temporario_status
movf cache_regload_temporario, w
{
código
}
movfw cache_regload_temporario
swap cache_temporario_status, status
retfie
vlw
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!