Autor Thema: Interrupts und Exceptions  (Gelesen 5743 mal)

bbl

  • Beiträge: 13
    • Profil anzeigen
Gespeichert
« am: 03. May 2006, 19:34 »
Also Ich hab im Intel und AMD Manual gelesen, der Processor löst eine #UD (undefined opcode exception) aus, wenn man die Instruction UD2 benutzt. (soll er ja auch).
Wenn ich das dann richtig verstehe, wird ein Interrupt aufgerufen (einer zwischen 0 und 31, weiß grad nicht genau welcher).
Das sind anscheinend genau die, die Interrupts, die auch aufgerufen werden, wenn man z.B. INT 10h in einem Programm schreibt. Kann das wirklich sein?
Wie merkt der Code im Interrupt, dass er das eine Mal eine #UD behandelt und das andere Mal z.B. den Mode 13h auslösen soll?

(Ich hoffe ich hab das Intel und AMD Manual richtig verstanden).

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 03. May 2006, 20:29 »
Ich hoffe jetzt dass ich dich richtig verstehe: Ja das kann sein.

In der Interrupt-Tabelle sind die vorderen Interrupts für Fehler reserviert. Und die Interrupts die man normalerweise mit dem Befehl INT aufruft kommen nachher. Diese werden Software Interrupts genannt.

Natürlich kann man mit dem INT Befehl auch einen Fehler-Interrupt aufrufen, was aber nicht viel Sinn ergibt.


Ich hoffe ich konnte dir helfen
Noooooooooooooooos

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #2 am: 03. May 2006, 20:36 »
hi,

du musst noch zwischen Real- & Protectedmode unterscheiden. Nur im Protected-Mode sind die Interrupts 0-31 für CPU Exceptions reserviert. Im Protected-Mode kann man die BIOS Interrupts sowieso net verwenden, also tritt eigentlich kein Konflikt auf. Im Realmode sind imho nur die ersten paar Interrupts für die CPU Exceptions belegt....

Hoff man konnte dir helfen.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 04. May 2006, 07:11 »
Wie bluecode schon sagte, handelt es sich bei den Überschneidungen der Interrupts um RM Softwareinterrupts und IRQs und PM Processor Exception.

Die Interrupts für IRQs müssen deshalt im PM "umgebogen" werden. Wie das geht steht hier: http://www.mega-tokyo.com/osfaq2/index.php/Can%20I%20remap%20the%20PIC%3F
db 0x55AA

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #4 am: 04. May 2006, 18:41 »
Zitat von: T0ast3r
UD2 ruft doch direkt keinen Int auf, oder?
das ist doch nur ein undefinierter Befehl, worauf der Prozessor eine Exception auslöst!


Unterschied? Wobei ich eigentlich noch nie was von diesem "Opcode" gehört hab...
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 04. May 2006, 19:11 »
Im Intel Manual steht:
Zitat

UD2—Undefined Instruction
Opcode: 0F 0B
Instruction: UD 2
Description: Raise invalid opcode exception
Generates an invalid opcode. This instruction is provided for software testing to explicitly
generate an invalid opcode. The opcode for this instruction is reserved for this purpose.
Other than raising the invalid opcode exception, this instruction is the same as the NOP instruction.

Es gibt also einfach eine Invalid Opcode Exception.

 

Einloggen