11 Şubat 2021 Perşembe

Ders 1


    Görevler: 

    Bu dersimizde Mike OS'un en temel kısmını diğer derslerden bağımsız olarak Windows ortamında oluşturacağız. Bu ders sadece ısınmak için 😄


    * İşletim sistemi mantığı
    * Bir işletim sistemini ön yükleme bilgileri
    * 16 bit x86 gerçek mod assembly
    * Ekrana belirli konumlara yazı yazma
    * Hexdecimal görüntüleyici bir programla binary dosyayı görüntüleme
    * Yazılan işletim sistemini Usb belleğe kurma
    * Usb belleğe kurulu işletim sistemini gerçek bir bilgisayarda başlatma

1- Öncelikle programlar:

    
HxD.exe --> Onaltılık düzenleyici, bir bilgisayar dosyasını oluşturan temel ikili verilerin değiştirilmesine izin veren bir bilgisayar programıdır.


nasm --> assembly Derleyicimiz

Notepad++ --> assembly dosyalarımızı düzenlemek için kullanıcaz

                                                                    Rufus --> Yazdığımız ön yüklenebilir programı usb belleğe kurmak için kullanıcaz

                                                                   MagicISO --> Iso dosyası oluşturabilmek için
                                                                   
                                                                   VirtualBox --> Sanal makinamız bilgisayarı kapatmadan yazdığımız programı bilgisayarımıza kurduğumuz bu sanal bilgisayarda denicez.


Burada dikkat nasm'yi kurarken masaüsyünde oluşturduğumuz "Sistem" klasörünün içinde Nasm klasörüne kurucaz.















Programlarımızı kurduktan sonra nasm zaten klasörün içinde diğer programlarıda "Sistem" klasörüne atıyoruz.













2- boot.asm Dosyası:
     Programımızı yazmak için "Sistem" klasörünün içine bir txt dosyası oluşturuyoruz.

    
















Ve adını boot.asm yapıyoruz.




Şuan en son bu şekilde gözükmeli
















Ve dosyamızın üstüne sağ tıklıyoruz sonrasında Notepad++ ile açıyoruz.



 









3- boot.asm düzenleme:


Notepad++ ile açtığımız boot.asm dosyazmızı düzenliyoruz.

 [BITS 16]                                                  ; Işlemciye kod türü belirtilir  
           JMP SHORT Yukleyici_Basla  
           NOP
 Yukleyici_Basla:
           
 TIMES 510 - ($ - $$) db 0                         ; 510 byte tamamlanır  
 dw 0xAA55                                          ; Önyükleyici olduğu tanımlanır  
1. blokta işlemciye kaç bitte yazıcağımız belirtilir
2. blok program kodları yazılır
3. blok programımızı 512 byte tamamlamak için geri kalan yere 0 lar yazılır. Sonraki kodda önyüklenebilir olduğunu gösteren imzayı içerir

2. bloğa aşağıda kodlar yazılır burada temel ayarlar vardır.
           MOV ax, 07C0h  
           ADD ax, 544  
           CLI  
           MOV ss, ax  
           MOV sp, 4096  
           STI  
           MOV ax, 07C0h  
           MOV ds, ax  

Dosyanın sonuna ilk kodlardaki 2. bloğun hemen üstüne yazdıracağımız metnleri içeren değişkenler tanımlanır.

 Metin1               db               'Merhaba Bilgisayar', 0  
 Metin2               db               'Nasilsin', 0   
 Metin3               db               'iyiyim', 0  
 Metin4               db               'Aferin Sana', 0  
 Metin5               db               'Ek satir', 0  

Metinleri ekrana yazmak için imleci taşımalyız bunun için yeni bir fonksiyon oluşturuyoruz.

 ; Imlec tasınır  
 ; G: dl = x, dh = y       
 ; Ç: bos  
 ImlecTasi:  
      PUSHA  
      MOV bh, 0  
      MOV ah, 2  
      INT 0x10  
      POPA  
      RET  

Ekrana yazi yazdırmak için ikinci bir fonksiyon oluşturuyoruz.

 ; Ekrana yazı yazdırılır  
 ; G: si = yazi  
 ; Ç: bos  
 Yazdir:  
      PUSHA  
      MOV ah, 0x0E  
      MOV bh, 0  
 
.birSonrakiKarakter:  
      LODSB  
      CMP al, 0  
      JE .Bitir  
      INT 0x10  
      JMP .birSonrakiKarakter  
 
.Bitir:  
      POPA  
      RET  
1. blokta değerler saklanır ve ekrana yazi yazmak için ilk değerler yerleştirilir 
2. blokta "LODSB" ile yazilacak karakterin içinden siradaki karakter alınır
    eğer bu karakter 0 değilse ekrana yazılır ve tekrar "JMP" ile ".birSonrakiKarakter:"  koduna gelinir
    eğer alınan karakter  ise bu eşitlik "JE" ile kontrol edilir ve koşul sağlanırsa ".Bitir" koduna gidilir

3. blokta ilk blokta saklanan değişkenlergeri yüklenir ve "RET" komutu ile çağrılan yere geri dönülür

Fonksiyonlar tamam şimid fonksiyonlarımızı çağırarak ekrana önceden belirlediğimiz değer yazılır

           MOV dl, 0  
           MOV dh, 0  
           CALL ImlecTasi  
           MOV si, Metin1  
           CALL Yazdir  
           
           MOV dl, 5  
           MOV dh, 1  
           CALL ImlecTasi  
           MOV si, Metin2  
           CALL Yazdir  
           
           MOV dl, 2  
           MOV dh, 3  
           CALL ImlecTasi  
           MOV si, Metin3  
           CALL Yazdir  
           
           MOV dl, 1  
           MOV dh, 4  
           CALL ImlecTasi  
           MOV si, Metin4  
           CALL Yazdir  
           
           MOV dl, 0  
           MOV dh, 7  
           CALL ImlecTasi  
           MOV si, Metin5  
           CALL Yazdir  
           
                       JMP $  
Her bir blokta önce "MOV" komutları ile ilk "dl" ye x kordinat değeri "dh" ye y kordinatı kaydedilir ve "CALL" komutu ile "ImlecTasi" fonksiyonu çağrılır sonrasında tekrar "MOV" komutu ile metin değişkenleri si yazmacına (registerine = İşlemci kaydı, bilgisayar biliminde bilgisayarda merkezi işlem birimi tarafından erişilebilen, hızlı erişilebilir bir konumdur. Bazı kayıtlar belirli donanım işlevlerine sahip olsalar da, kayıtlar genellikle az miktarda hızlı depolamadan oluşur ve salt okunur veya yazılır olabilmektedir. detaylı1 bilgi: https://tr.wikipedia.org/wiki/%C4%B0%C5%9Flemci_kayd%C4%B1
                       detaylı2 bilgi: https://web.karabuk.edu.tr/emelkocak/indir/MTM305/Adresleme%20Modlar%C4%B1.pdf)

kaydedilir. "CALL" komutu ile de bu sefer "Yazdir" fonksiyonu çagrılır.

son blokta ise JMP $ program durdurulur.

Ensonki görünüm:

 [BITS 16]                                                  ; Işlemciye kod türü belirtilir  
           JMP SHORT Yukleyici_Basla  
           NOP  
 Yukleyici_Basla:  
           MOV ax, 07C0h  
           ADD ax, 544  
           CLI  
           MOV ss, ax  
           MOV sp, 4096  
           STI  
           MOV ax, 07C0h  
           MOV ds, ax  
           MOV dl, 0  
           MOV dh, 0  
           CALL ImlecTasi  
           MOV si, Metin1  
           CALL Yazdir  
           MOV dl, 5  
           MOV dh, 1  
           CALL ImlecTasi  
           MOV si, Metin2  
           CALL Yazdir  
           MOV dl, 2  
           MOV dh, 3  
           CALL ImlecTasi  
           MOV si, Metin3  
           CALL Yazdir  
           MOV dl, 1  
           MOV dh, 4  
           CALL ImlecTasi  
           MOV si, Metin4  
           CALL Yazdir  
           MOV dl, 0  
           MOV dh, 7  
           CALL ImlecTasi  
           MOV si, Metin5  
           CALL Yazdir  
           JMP $  
 ; Imlec tasınır  
 ; G: dl = x, dh = y       
 ; Ç: bos  
 ImlecTasi:  
      PUSHA  
      MOV bh, 0  
      MOV ah, 2  
      INT 0x10  
      POPA  
      RET  
 ; Ekrana yazı yazdırılır  
 ; G: si = yazi  
 ; Ç: bos  
 Yazdir:  
      PUSHA  
      MOV ah, 0x0E  
      MOV bh, 0  
 .birSonrakiKarakter:  
      LODSB  
      CMP al, 0  
      JE .Bitir  
      INT 0x10  
      JMP .birSonrakiKarakter  
 .Bitir:  
      POPA  
      RET  
 Metin1               db               'Merhaba Bilgisayar', 0  
 Metin2               db               'Nasilsin', 0   
 Metin3               db               'iyiyim', 0  
 Metin4               db               'Aferin Sana', 0  
 Metin5               db               'Ek satir', 0  
 TIMES 510 - ($ - $$) db 0                         ; 510 byte tamamlanır  
 dw 0xAA55                                          ; Önyükleyici olduğu tanımlanır  

4- boot.asm derleme:

    cmd açılır

   Not: bunun için (Windows + R) ile açılan pencereye cmd veya arama çubuğuna cmd yazarak aça bilirsiniz.

    











"cd Desktop/Sistem" yazarak oluşturduğumuz sistem klasörüne girilir








"nasm boot.asm -f bin -o boot.bin" ilk dosya girdi dosyasıdır -f ile çıktı türü -o ile çıktı boot.bin dosyası belirtilir.

Sistem dosyamızda yeni dosyalar oluşmuş olmalı:









5- ISO dosyası oluşturma:


sistem klasöründeki MagicISO programını açıyoruz















Yeni bir önyüklenbilir bir dosya oluşturuyoruz.















boot dosyası için Masaüstünde oluşturduğumuz boot.bin dosyasını seçiyoruz.















Dosyayı kaydete basıyoruz.















Dosyayı sistem klasörünün içine boot.iso adı ile dosyayı kaydet butonuna basıyoruz.















Dizinimzde boot.iso adlı bir dosya oluşutor.













6- boot.iso yu sanal makine ile başlatma:

 Virtual box uygulamasını açıyoruz ve yeni butonuna basıyoruz















ilk pencerede ayarlarımızı yapıyor ve ileri butonuna basıyoruz.














Sonrasında ileri ileri ... ve oluştura tıklayarak sürekli ileri yapıyoruz bu aralarda ayar yapılmayacak.
Ve deneme 1 adında oluşturabildik














"deneme 1"'e çift tıklayarak başlatıyoruz.
bizden bir iso istiyor bunun için aşağıdaki gibi tıklıyoruz

























VE BAŞLIYOR...














İşlem tamam 😀

7- Flash kurulumu:


Rufusu başlatıyoruz
ve aşağıdaki gibi ayarlıyoruz











Bundan sonra bilgisayarı yeniden başlatıyoruz.
usb belleği ön yüklüyoruz ve yazdığımız işletim sistemi açılıyor.

Bende bu şekil:


8- Linkler:





9- Video:













Hiç yorum yok:

Yorum Gönder

Ders Bağlantıları

    Öncelikle Mike OS hakkında sayfamızı okuyunuz.  Mike OS Hakkında Ders 1:     Bu dersimizde Mike OS'un en temel kısmını diğer dersler...