# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. # # Asal sayılar: çekirdek 2..1000 arasındaki asalları bulur, ekrana bir # tablo olarak, seri porta da toplam olarak yazar. VGA = 0xB8000 SERI = 0x3F8 fonksiyon seri_bayt(b): iken bit_ve(port_oku8(SERI + 5), 0x20) == 0: devam port_yaz8(SERI, b) fonksiyon seri_yaz(m): i = 0 iken bayt(m, i) != 0: seri_bayt(bayt(m, i)) i = i + 1 fonksiyon hucre(satir, sutun, karakter, renk): bellek_yaz16(VGA + (satir * 80 + sutun) * 2, renk * 256 + karakter) fonksiyon yaz(m, satir, sutun, renk): i = 0 iken bayt(m, i) != 0: hucre(satir, sutun + i, bayt(m, i), renk) i = i + 1 fonksiyon basamak_sayisi(n): b = 1 iken n >= 10: n = n // 10 b = b + 1 don b fonksiyon sayi(n, satir, sutun, renk): # Sağa yaslı değil, soldan yazar; kaç basamak yazıldığını döner. b = basamak_sayisi(n) k = b - 1 iken k >= 0: hucre(satir, sutun + k, 0x30 + n % 10, renk) n = n // 10 k = k - 1 don b fonksiyon seri_sayi(n): eger n >= 10: seri_sayi(n // 10) seri_bayt(0x30 + n % 10) fonksiyon asal_mi(n): eger n < 2: don yanlis d = 2 iken d * d <= n: eger n % d == 0: don yanlis d = d + 1 don dogru dongu i icinde 0..80 * 25 - 1: bellek_yaz16(VGA + i * 2, 0x0F20) yaz("Asal sayilar (2..1000) -- KabaLang cekirdegi", 0, 2, 0x0E) satir = 2 sutun = 2 adet = 0 dongu n icinde 2..1000: eger asal_mi(n): adet = adet + 1 sayi(n, satir, sutun, 0x0A) sutun = sutun + 5 eger sutun > 74: sutun = 2 satir = satir + 1 yaz("Toplam:", satir + 2, 2, 0x0F) sayi(adet, satir + 2, 10, 0x0E) seri_yaz("2..1000 arasinda asal sayi adedi: ") seri_sayi(adet) seri_bayt(10) dur()