Assambler Video-Offset berechnen

Gast #1748278
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
Gast #1748328
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren