So...
ich habe mal etwas weiter experimentiert und eine Funktion zustande gebracht, die den Bildschirm löscht. Diese funktioniert auch, da ich aber nicht so gut in Assembler bin, wollte ich einfach mal fragen, was überflüssig sein könnte, oder was ihr anders gemacht hättet.
Hier der Code:
video_clear_screen:
push ebp
mov ebp, esp
; Register sichern
push edi
push ebx
push eax
; Adresse aus Variable holen (0xB8000)
mov edi, [video_address]
; Prüfwert berechnen
mov eax, 25
mov edx, 80
mul edx
mov FUNCTION_LOCALVAR_1, eax
mov ebx, 0
.loop_cls:
; Leerzeichen ausgeben, mit schwarzem
; hintergrund und weißer schrift
mov al, 0x20 ; blank
stosb
mov al, 0x0f ; Black background, white text
stosb
; Schleifen-Variable um 1 erhöhen
inc ebx
; Wurde das Ende erreicht?
cmp ebx, FUNCTION_LOCALVAR_1
; Nein? -> Wiederholen :D
jne .loop_cls
; Register wiederherstellen
pop eax
pop ebx
pop edi
mov esp, ebp
pop ebp
ret
Bei "FUNCTION_LOCALVAR_1" handelt es sich um ein Makro, das wie folgt aussieht: "%define FUNCTION_LOCALVAR_1 [ebp-4]".
Wenn ich nun eine solche Variable auf dem Stack benutze, muss ich die dann auch vorher reservieren und später wieder freigeben, oder kann ich das machen, wie es mir beliebt?