Autor Thema: SP-Register  (Gelesen 3230 mal)

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« am: 20. November 2004, 11:41 »
hallo!

ich bin dabei, eine funktion zu schreiben, die bei einem programmabbruch die register vor der abbruch ausgiebt. mit den dingern, wie AX und DI und ES und so komme ich noch zurecht, mit SP und BP und CS und SS nimmer!

bei SS weiß ich, dass es immer den boden des stacks hat, also immer den eingestellten wert, sodass ich das nicht ausgeben muss.
bei SP, BP und CS habe ich das problem, dass die sich ja beim ausführen ändern! bei SP habe ich die idee, dass ich nach dem funktionsaufruf pusha mache, und damit SP und BP auf den stack nehme. jetzt habe ich aber das problem, wie ich SP da wieder rauswurschtle! ich habe es so versucht (weil vor dem ausführen von pusha SP noch gespeichert wird, und nur AX, BX, CX, DX, SP, BP, SI und DI gespeichert sind, müsste ja unter den 8 words SP liegen):
mov bx,WORD [sp-16]
problem: es kommt "invalide effective adress"
genauso, wenn ich BP so holen will:
mov bx,WORD [sp-12]
kommt der gleiche fehler!

ich hoffe, es kann mir jemand helfen,

danke!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 20. November 2004, 13:09 »
Hiho,

könntest du nicht einfach einen Interrupt aufrufen? Du bist doch im Real Mode, oder? Programmabruch (wenn ich das jetzt richtig verstehe :) ) ist doch sowieso ein Systemcall und bei einem Int werden doch nur Flags,CS und IP gepusht die anderen Register ändern sich nicht, und die solltest du doch wohl rauskriegen... Zur Not kannst du ax,bx und cx popen, und danach wieder pushen :)

MfG GhostCoder
A man, a legend!

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #2 am: 20. November 2004, 13:12 »
doch, das SP ändert sich ja auch, weil gepusht wird... ist dann nimmer gleich dem anderen!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #3 am: 20. November 2004, 14:20 »
Du kannst den SP nicht zur indirekten Adressierung benutzen, erlaubt ist nur bx,bp,di,si
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #4 am: 20. November 2004, 16:16 »
mov bp, sp
mov bx, [bp-16]
mov bx, [bp-12]

Das sollte funzen.
Solltest du den Wert von BP nicht verlieren wollen, dann push BP einfach kurz noch auf den Stack. Dadurch erhöhen sich die Werte natürlich um 2 :)
----------------------
Redakteur bei LowLevel

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #5 am: 20. November 2004, 20:25 »
danke! daran lag es! thx!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

 

Einloggen