1541
Lowlevel-Coding / Software-INT
« am: 07. April 2005, 14:47 »Zitat
Werden bei einem Software-Interrupt die Register nicht verändert?
Der Unterschied zwischen Hardware-Interrupt und Software-Interrupt ist die Art des Aufrufens und nicht ob Register geändert werden oder nicht. Die Register muss der ISR-Programmierer (also du) immer selbst sichern. Du musst also deine ISR so anpassen, dass die Register auf den Stack gepusht werden, bevor du sie veränderst. Vor dem iret musst du dann wieder alle Register vom Stack laden. Wenn du die Register vorher verändern willst, geht das am einfachsten, in dem du den Stack manipulierst.
Code: [Auswählen]
mov [esp+das_offset_von_dem_register_auf_dem_stack], wert_der_ins_register_soll
Das Offset musst du selbst ausrechnen, je nachdem was du wann pusht.
far-pointer auf den stack legen:
Code: [Auswählen]
mov ax, segment (z.b. cs, ds, es oder irgendeine eine zahl ...)
push ax
mov di, offset
push di
und far-pointer vom stack laden:
Code: [Auswählen]
pop ax ; segment laden
mov ds, ax
pop di ; offset laden