Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: bscreator am 08. March 2009, 21:29

Titel: FAR-Jumps
Beitrag von: bscreator 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
Titel: Re: FAR-Jumps
Beitrag von: bluecode 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.
Titel: Re: FAR-Jumps
Beitrag von: Jidder am 08. March 2009, 21:50
So würd ich es machen:
   push 0x2000 ; segment
    push 0x0000 ; offset
    retf
Titel: Re: FAR-Jumps
Beitrag von: bluecode am 08. March 2009, 21:53
ah richtig, retf gabs ja auch noch. :-)