2016-03-18 14 views
0

Ich lerne 8086 Assembly. Ich muss die Hintergrundfarbe des Bildschirms mit 8086 Assembly ändern. Ich sah ein paar Tutorials, wo sie nur einen Teil des Bildschirms einstellen konnten. Ich möchte dies nicht mit DOS Interrupts machen, während alle Tutorials in DOS Interrupts sind. Es wäre gut, wenn mir jemand den Code zeigen würde, um den ganzen Teil des Bildschirms (Hintergrundfarbe) mit BIOS Interrupts zu setzen.Wie ändert man oder Hintergrundfarbe in 8086 Versammlung?

+0

Sie schreiben direkt an Videospeicher. Angenommen, Ihr Bildschirm zeigt Seite 0 an (und standardmäßig wird der Videospeicher die physikalische Adresse 0xb8000 (oder 0xb800: 0x0000) haben. Jede Zelle auf dem Bildschirm hat ein Zeichen- und Attributbyte (bildet ein 16-Bit _WORD_ Paar) Das Zeichen kommt zuerst im Speicher, dann das Attribut (Vordergrund-/Hintergrundfarbe). Die Adresse 0xb8000 würde das Zeichen enthalten, das bei Koord 0,0 angezeigt werden soll. 0xb8001 würde das Attributbyte enthalten, 0xb8002 wäre ein Zeichen bei Koord Attribut bei 0xb8003 usw. –

+0

Wenn ein Bildschirm 80x25 ist, würde das 2 Bytes für jedes der Zeichen auf dem Bildschirm erfordern, also ist (80 * 25) * 2 = 4000. –

+0

jeder Code wird groß sein pls –

Antwort

2

können Sie den Hintergrund ändern und Vordergrundfarbe für alle dem Bildschirm durch BIOS-Funktion 06h mit

MOV AH, 06h ; Scroll up function 
XOR AL, AL  ; Clear entire screen 
XOR CX, CX  ; Upper left corner CH=row, CL=column 
MOV DX, 184FH ; lower right corner DH=row, DL=column 
MOV BH, 1Eh ; YellowOnBlue 
INT 10H 

Die Zahlen den Text Videomodus von 80x25 passen.

Eine der besten Informationsquellen für BIOS und DOS Interrupts für den IBM PC ist Ralf Brown's Interrupt List. INT 10h ist der allgemeine BIOS-Interrupt für Videoroutinen. Eine vollständige Liste der INT 10h Routinen finden Sie here. Ich habe die BIOS-Routine INT 10h/AH=06 verwendet, die als dokumentiert ist:

VIDEO - SCROLL UP FENSTER

AH = 06h 
AL = number of lines by which to scroll up (00h = clear entire window) 
BH = attribute used to write blank lines at bottom of window 
CH,CL = row,column of window's upper left corner 
DH,DL = row,column of window's lower right corner 

Return: 
Nothing 
+0

Ja, es macht ein Bildlauf des Fensters. Wie kann ich es machen, nicht zu scrollen? –

+0

@CameraJohn Also, was Sie fragen, ist, wie man die Hintergrundfarbe des Bildschirms aktualisiert, ohne den Text zu überschreiben, der bereits existiert? –

+0

@CameraJohn: Wenn Sie NASM verwenden, sollte diese Antwort funktionieren: http://StackOverflow.com/a/32686665/3857942. Dieser Code wurde als Funktion geschrieben. Sie legen _AL_ auf die gewünschte Vorder-/Hintergrundfarbe fest. 'mov al, 01eh' wäre gelb auf blau. Dann machst du 'setTextAttributes' aufrufen. Dieser Code geht von einem 80x25-Bildschirmlayout aus (Videomodus 3) –

Verwandte Themen