[Assebler] call far unter NASM

B

BassBox

Hallo,
Ich habe ein Problem mit meinem Selbstgeschriebenen os, ich weiß nicht wie ich für den nasm einen call far mache. das hier funktioniert nicht:

call far 0x3800:0x0000

Wie muss ich das machen das ich dann mit retf zurück springen kann.
Bitte helft mir.
Gruß BassBox
 
Sorry ich hab da schon ne lösung gefunden aber mein Programm leuft trotzdem nicht :(

kann mir jemand sagen was ich falsch mache?

load_kernel:
mov dl,[bootdrive] ; boot drive wählen
xor ax, ax ; mov ax, 0 => funktion "reset"
int 0x13
jc load_kernel ; schwierigkeiten? Erneut versuchen

load_kernel1:
mov ax, 0x3800
mov es, ax ; ES:BX = 0x3800
xor bx, bx ; mov bx, 0

; die parameter der read funktion setzen
; 8-Bit-wise für ein besseren überblick
mov dl,[bootdrive] ; boot drive wählen
mov al,10 ; 10 sectoren einlesen
mov ch, 0 ; cylinder = 0
mov cl, 2 ; sector = 1
mov dh, 0 ; head = 0
mov ah, 2 ; funktion "read"
int 0x13
jc load_kernel1 ; schwierigkeiten? Erneut versuchen

;Programm ausführen

mov ax, 0x3800
mov ds, ax
mov es, ax


mov ax,0 ; New IP = 0
mov bx,0x3800 ; New CS
push bx ; Push new CS
push ax ; Push new IP
retf ; Sneaky far jump

In der varriable Bootdrv steht die nummer des verwendeten Disketten laufwerk.
Kann mir denn keiner helfen?
 
Zuletzt bearbeitet von einem Moderator:
Zurück