Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: hannibal am 10. October 2004, 02:47
-
ich hab hier ein kleines problem.. ich hab teejay`s bootloader (etwas abgeaendert) in verwendung, nur will mir die printstring-funktion nicht ganz funktionieren..der gibt irgendwelche kryptischen zeichen aus, statt dem string, den ich in der file deklariere. testweise hab ich AL mit einer hexzahl (30h) gefuellt, dann hat er mir auf einmal eine 0 ausgegeben (logisch, ascii-code), jedoch..muesste ich jetzt jedes zeichen in hex umrechnen, damit das auch wirklich so funktioniert wie ich das will..oder eine andere moeglichkeit waere doch noch direkt in den videospeicher zu schreiben, oder?
bitte um hilfe =\
lg, hannibal
-
Höchstwahrscheinlich liegt ein Problem mit der Adressierung vor. Check mal CS, SS, SP, die ORG-Anweisung usw., ob sie stimmen.
-
F_PutS:
push bp
mov bp, sp
pusha
mov si, [bp+4]
mov ah, 0x0E
mov bx, 0x0007
.1:
lodsb
or al, al ;check for NULL-termination
jz .2
int 0x10
jmp .1
.2:
popa
mov sp, bp
pop bp
ret
funktion rufe ich folgendermassen auf (wie in tj`s tutorial beschrieben)
push WORD string
call F_PutS
wuesste nicht, was da an der adressierung falsch sein koennte, org 0x7c00 steht auch am anfang dort..stack ist initialisiert usw..
lg, hannibal
-
du musst nach dem Call auch noch "add esp, 2" machen
da der Parameter ja auch wieder vom Stack gelöscht werden muss.
-
aber hat das eine auswirkung auf die ausfuehrung der funktion? das muesste ja erst passieren, nachdem die funktion ausgefuehrt worden ist?!
lg, hannibal
-
War quatsch was ich vorher schrieb ;)
probiers mal mit
mov si, [bp+2]
-
mh nein..will auch nicht..mittlerweile hab ich das problem, dass er mir nicht mal mehr kryptische zeichen anzeigt .. o_O
boeses programm.
-
ich weis zwar nich ob es daran liegt, abba ich hatte dieses problem auch ma... hatte am string ende '$' vergessen
falls das quatsch is... sorry...
maumo
-
mh..hat sich erledigt - vmware scheint keine bios-interrupts zu kennen, oder will sie nicht ausfuehren.. hab die diskette im diskettenlaufwerk vergessen und dann hat er mir auch das ausgegeben, was er ausgeben sollte :)
danke fuer eure hilfe!
lg, hannibal