www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assambler Video-Offset berechnen


Autor: tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Phantomix Ximotnahp (phantomix) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.