2016-03-18 23 views
0

8086 montajını öğreniyorum. Ekranın arka plan rengini 8086 derlemini kullanarak değiştirmem gerekiyor. Ekranın sadece bir bölümünü ayarlayabilecekleri birkaç ders gördüm. Bütün dersleri DOS Interrupts'ta iken, DOS Interrupts tarafından yapmak istemiyorum. Herhangi biri, BIOS Kesintilerini kullanarak ekranın tüm bölümünü (arka plan rengini) ayarlamak için bana kodu gösterdiğinde iyi olurdu.8086 aksamında arka plan rengini nasıl değiştirebilirim?

+0

video belleğine doğrudan yazar YUKARI KAYDIRIN. Ekranınızın sayfa 0'ı görüntülediğini varsayarak (ve varsayılan olarak büyük olasılıkla video belleğin fiziksel adresi 0xb8000'de (veya 0xb800: 0x0000). Ekrandaki her bir hücrenin bir karakteri ve özniteliği baytı vardır (16-bitlik bir _WORD_ çifti oluşturur) Karakter, önce bellekten sonra öznitelik (ön plan/arka plan rengi) gelir. Adres 0xb8000, kordinatta 0.0 karakterini içerecektir. 0xb8001, öznitelik baytını içerecektir, 0xb8002, kron 0,1'de ve 0xb8003 vb. özniteliği –

+0

Ekrandaki karakterlerin her biri için 2 bayta gereksinim duyacağı 80x25 bir ekran ise (80 * 25) * 2 = 4000. –

+0

herhangi bir kod mükemmel olacaktır. pls –

cevap

2

Sen numaralar 80x25 boyutlarındaki bir metin video moduna uygun BIOS işlevi 06h

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 

kullanarak tüm ekran için arka plan ve ön plan rengini değiştirebilirsiniz.

IBM PC için BIOS ve DOS Interrupts ile ilgili en iyi bilgi kaynaklarından biri Ralf Brown's Interrupt List'dur. INT 10h, video rutinleri için genel BIOS kesintisidir. INT 10h rutinlerinin tam bir listesi here bulunabilir. Ben belgelenmiştir INT 10h/AH=06 rutin BIOS kullandık:

VİDEO - PENCERE

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

Evet, pencerenin yukarı çıkmasını sağlıyor. Kaydırmamaya nasıl yardımcı olabilirim? –

+0

@CameraJohn Ne soruyorsunuz, varolan metni üzerine yazmadan ekranın arka plan rengini nasıl güncelleyeceğinizdir? –

+0

@CameraJohn: Eğer NASM kullanıyorsanız, bu cevap işe yarayacaktır: http://stackoverflow.com/a/32686665/3857942. Bu kod bir işlev olarak yazılmıştır. İstediğiniz önalan/arka plan rengine _AL_ değerini koyarsınız. mov al, 01eh maviye sarı olur. Sonra bir 'setTextAttributes 'çağrısı yaparsınız. Bu kod bir 80x25 ekran düzenini (video modu 3) varsayar. –