Wieso bleibt mein Register 0?



  • Also:
    Ich möchte mit dem Zeichengenerator eins von 8 Bytes(die laut unsrerm Prof ein Zeichen hat) holen und in den Grafikspeicher verschieben. Das ganze in einer Schleife aber das ist erstmal zweitrangig.
    der wichtigste Codeausschnitt:
    (in dl befindet sich der Ascii für das zu schreibende Zeichen)
    mov ax, 0F000h
    mov es, ax
    xor dh, dh
    mov si, dx
    sal si, 3

    Wenn ich ein "A" schreiben will, klappt das auch ganz gut, also in si steht das richtige drin, problematisch wirds an diesem Punkt:
    mov bl, es:[si + 0FA6Eh]
    im Debugger sehe ich allerdings folgendes:
    mov bl, es:[si -0592]

    wieso ist das so?
    Wenn ihr wollt kann ich auch meinen gesamten Quelltext posten, aber eigentlich nur ungern 🙂
    Grüße



  • infostudent schrieb:

    problematisch wirds an diesem Punkt:
    mov bl, es:[si + 0FA6Eh]
    im Debugger sehe ich allerdings folgendes:
    mov bl, es:[si -0592]

    wieso ist das so?

    Weil si ein 16bit-Register ist, und es dementsprechend egal ist, ob du 0fa6eh addierst oder 592 subtrahierst.

    Ansonsten seh ich nicht, was das mit dem oberen Code oder mit dem Titel zu tun haben soll. Wolltest du noch mehr wissen?



  • Stimmt^^
    Eigentlich wurde meinem bl nix zugewiesen, aber jetzt auf einmal gehts. frag mich wieso oO

    Naja gut wieder was gelernt^^
    Grüße



  • Man kann bei 16 bit alle Hexzahlen ab 8000 als negativ betrachten.

    Wenn man sich das auf der Bitebene anguckt:

    0111 = 7
    1000 = 8

    Aber in dem Befehl ist nur eine Hausnummer angegeben, und hier ist eher relevant, ob die stimmt und weniger wie die aussieht.



  • Bashar schrieb:

    Ansonsten seh ich nicht, was das mit dem oberen Code oder mit dem Titel zu tun haben soll.

    RBIL->inter61a.zip->Interrup.a

    --------V-101130-----------------------------
    INT 10 - VIDEO - GET FONT INFORMATION (EGA, MCGA, VGA)
    AX = 1130h
    BH = pointer specifier
    00h INT 1Fh pointer
    01h INT 43h pointer
    02h ROM 8x14 character font pointer
    03h ROM 8x8 double dot font pointer
    04h ROM 8x8 double dot font (high 128 characters)
    05h ROM alpha alternate (9 by 14) pointer (EGA,VGA)
    06h ROM 8x16 font (MCGA, VGA)
    07h ROM alternate 9x16 font (VGA only) (see #00021)
    11h (UltraVision v2+) 8x20 font (VGA) or 8x19 font (autosync EGA)
    12h (UltraVision v2+) 8x10 font (VGA) or 8x11 font (autosync EGA)
    Return: ES:BP = specified pointer
    CX = bytes/character of on-screen font (not the requested font!)
    DL = highest character row on screen
    Note: for UltraVision v2+, the 9xN alternate fonts follow the corresponding
    8xN font at ES:BP+256N
    BUG: the IBM EGA and some other EGA cards return in DL the number of rows on
    screen rather than the highest row number (which is one less).
    SeeAlso: AX=1100h,AX=1103h,AX=1120h,INT 1F"SYSTEM DATA",INT 43"VIDEO DATA"

    Format of alternate font table [array]:
    Offset Size Description (Table 00021)
    00h BYTE character to be replaced (00h = end of table)
    01h N BYTEs graphics data for character, one byte per scan line

    RBIL->inter61b.zip->Interrup.e

    --------B-1F---------------------------------
    INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
    Desc: this vector points at 1024 bytes of graphics data, 8 bytes for each
    character 80h-FFh
    Notes: graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100%
    compatible BIOSes
    Under PhysTechSoft's PTS ROM-DOS this table is fictitious.
    SeeAlso: INT 10/AX=5000h,INT 43

    Dirk


Anmelden zum Antworten