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?
cevap
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
Evet, pencerenin yukarı çıkmasını sağlıyor. Kaydırmamaya nasıl yardımcı olabilirim? –
@CameraJohn Ne soruyorsunuz, varolan metni üzerine yazmadan ekranın arka plan rengini nasıl güncelleyeceğinizdir? –
@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. –
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 –
Ekrandaki karakterlerin her biri için 2 bayta gereksinim duyacağı 80x25 bir ekran ise (80 * 25) * 2 = 4000. –
herhangi bir kod mükemmel olacaktır. pls –