# [Assebler] call far unter NASM



## BassBox (26. November 2010)

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


----------



## BassBox (29. November 2010)

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?


----------



## BassBox (1. Dezember 2010)

sorry habs jetzt selber gelöst


----------

