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.