Hallo,
ich brauche mal kurz jemanden der mir weiterhelfen kann.
Undzwar suche ich eine kurze 8086 Befehlsfolge die zu einenm gewünschten
Bildschirmkoordinatenpaar (Zeilenwert/Spaltenwert) den dazugehörigen
Video-Offset berechnet. Der Bildschirm hat die Auflösung 80 Spalten x 25
Zeilen.
Zu Beginn soll Al den Zeilenwert und Bl den Spaltenwert enthalten.
Ergebnis soll im AX Register liegen.
Das habe ich:
.data
spalte DB 0
zeile DB 0
Spaltenzahl equ 80
; Video-Offset berechnen
mov ah, zeile
mov al, Spalte
push ax
call VGA_Offset
add sp, 2
VGA_Offset:
push bp
mov bp, sp
mov ah,0
mov al,[bp+5] ;Zeile in Register
mov bh,0
mov bl,[bp+4] ;Spalte in Register
mov di,80
mul di
add ax,bx
mov di,2
mul di
pop bp
ret
Kann mir jemand sagen ob das richtig ist oder wie ich es ändern muss?
Vielen Dank schonmal,
Gruß Tobias
Der Algorithmus ist doch recht einfach: Offset = x + y * 80 wenn x den Wertebereich 0..79 und y den Wertebereich 0..24 hat. Wird bei 1 begonnen zu zählen, sind x und y eben um 1 zu verringern. Das Umsetzen dieses Algorithmus in Ass_e_mbler sollte dann nicht schwer sein.
... Wobei ich mich allerdings auch frage, warum du da so kompliziert mit der Argumentübergabe am Stack hantierst und ob es rechtens ist, dass du bx und di veränderst. Aber das musst du wissen.
Hi
Lang ist es her.
VGA_Offset:
push bp
mov bp, sp
mov ah,0 ->ist unnötig
mov al,[bp+5] ;Zeile in Register
mov bh,0
mov bl,[bp+4] ;Spalte in Register
mov di,80 -> damit machst du eine 16Bit x 16
Bit-Multiplikation
mul di -> mit Ergebnis in DX:AX
würde ich ersetzen durch:
mov ah,80
mul ah -> Ergebnis in AX
add ax,bx
mov di,2 -> Hat das einen besonderen Grund?
mul di
pop bp
ret
Evtl. solltest du noch BX und DI sichern.
MfG Spess
spess53 schrieb: > mov di,2 -> Hat das einen besonderen Grund? > mul di Wenn ich mich recht erinnere, ist jedes Zeichen zwei Bytes breit, eins für den Zeichencode und eins für die Farbe.
Hi >Wenn ich mich recht erinnere, ist jedes Zeichen zwei Bytes breit, eins >für den Zeichencode und eins für die Farbe. Da könntest du Recht haben. Ich sagte ja 'Lang ist es her'. MfG Spess
definitiv, ein byte Zeichencode und ein Byte Darstellungsinfo. Dazu gehört 5 Bit: Vordergrund: 0...15, dazu noch ein bit ob's blinken soll. 3 Bit: Hintergrund: 0...7
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.