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, 3Wenn 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 oONaja 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 = 8Aber 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 lineRBIL->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 43Dirk