Warum sind die Absenderadressen der prefetch abort und data abort anderen im ARM Ausnahmen?
für prefetch-die Rückkehr-Adresse ist:
R14_abt = Adresse des abgebrochenen Anweisung + 4
und für die Datenübertragung Abbrechen, die Rückkehr-Adresse ist:
R14_abt = Adresse des abgebrochenen Anweisung + 8
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese offsets sind aufgrund der Prozessor-pipelining und der fetch/decode/execute-Phasen.
Den Prozessor Programm-counter (PC) wird aktualisiert, die an bestimmten Punkten während der Ausführung. Ausnahmen können auftreten, während der verschiedenen Phasen für das Holen/decodieren/Ausführung.
Im Fall der prefetch abort, die Anleitung nicht (hat nicht) ausgeführt; die Ausnahme tritt auf, nur wenn der Prozessor tatsächlich versucht zum ausführen der Anweisung (einige zuvor abgerufener Anweisungen können nicht ausgeführt werden).
Im Fall der Daten Abbrechen, der Auftrag wird ausgeführt, und die Instruktion die Ausführung die Ausnahme verursacht.
Aus der ARM-Dokumentation:
Bezüglich prefetch abort:
Und in Bezug auf die Daten-Abbrechen:
So, in anderen Worten, für die Daten abzubrechen, muss der Hundeführer zurück zu lr_ABT – 8 (zwei Worte/Anweisungen Vorherige)
Ich erinnere mich nicht sehen eine offizielle Erklärung, aber wenn man darüber nachdenkt, ist es ziemlich logisch.
Betrachten Sie dieses Beispiel:
Wenn Prozessor kann nicht Holen die INSN3, der Abbruch passiert, bevor Sie ausgeführt wird, so dass der PC-Wert ist immer noch die, die man von INSN2, d.h. 0C.
Wenn eine data abort passiert während der Ausführung von INSN3, den PC-Wert ist bereits aktualisiert, 10.
Für prefetch abort
Für data abort
Referenz TRM TakePrefetchAbortException() und TakeDataAbortException()