Autor Thema: FAR-Jumps  (Gelesen 4220 mal)

bscreator

  • Gast
Gespeichert
« am: 08. March 2009, 21:29 »
Hallo OS-Coder,

Hab mir mal so ein kleines Programm geschrieben, das nichts anderes macht, als das was ich möchte, d.h. einen Sprung zu Adresse 2000:0000 (CS=2000, IP=0) :
org 0x100
jmp start
start:
jmp 2000h:0000h
Leider hab ich das Problem, dass meine Sprungadresse erst während der Laufzeit festgelegt wird => indirekte Adressierung

Habs mit
mov ax,2000h
xor bx,bx
mov es,ax
jmp ES:BX
versucht, aber da setzt er dann nur IP auf 0, CS bleibt unverändert, d.h. enthält nicht 2000h. Mit Variablen hab ichs auch schon versucht, leider ohne Erfolg.

Könnt ihr mir sagen, wie ein FAR-Jump mit der indirekten Adressierung möglich ist ?

Grüsse und ich danke euch wirklich sehr
bsc

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 08. March 2009, 21:46 »
Über push und iret ist das möglich, kann dir aber so auf die schnelle kein Beispiel geben, da ich den 16Bit Interrupt-Stack in den Manuals auf Anhieb nicht finden konnte.
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

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 08. March 2009, 21:50 »
So würd ich es machen:
   push 0x2000 ; segment
    push 0x0000 ; offset
    retf
Dieser Text wird unter jedem Beitrag angezeigt.

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #3 am: 08. March 2009, 21:53 »
ah richtig, retf gabs ja auch noch. :-)
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

 

Einloggen