![]() |
| |||||||
| ASM Assembly Hakkında Herşey |
| ||
![]() |
| | LinkBack | Seçenekler | Stil |
| | #1 (permalink) |
Undetecter Lab's | Küyük bir isletim sistemi YAZMAK! Hangi Dil? —————————————————————————- Isletim sistemini aslinda C/C++ da yapmak isterim, ama mesela ekrana girdi vermek istedigimde bunun icin gerekli olan “printf” komutunu cagirmam gerektigini varsayalim. O zaman adindaki baslik dosyasini kullanmam gerekmekte.Ama sorun her basligin C/C++ derliyicileri tarafindan belli isletim sistemler(yada belli sistemler) icin tasarlandigi icin ne yazikki C/C++ dillerini cekirdegi yazarken kullanmayacagim fakat sonradan isletim sisteminin devamini C/C++ ile yazabilirsiniz. Söyle düsük seviyede Assembler bilginiz olmasi sizin cekirdegi daha iyi anlamanizi saglayacaktir… Gerekenler ————————————————————————— 1.Netwide Assembler (NASM) 2.RaWrite yada Diskete Imageleri yazacak baska bir program. 3.Bos bir disket. Buraya Dikkat! —————————————————————————- Size söylemem gerekirki Assembler ile cok sey yapilabilir(yada cok sey yanlis yapilabilir).Bu bilgisayariniza gelebilecek herhangibir zarar benim degil, sizin sucunuzdur! Basliyoruz —————————————————————————- Bir isletim sisteminin nasil calistigini anlamak icin, önce bir bilgisayarin nasil calistigini iyi anlamak gerekir. Burada kisaca söylüyorum ki, önce bilgisayar acilir, hemen BIOS devreye girer ve denetimler yaptiktan sonra isletim sistemini cagirir. BIOS hangi sürücünün önce “BOOT” lanacagini belirler. Isletim sistemini önce yerel sürücüde arar. Biz isletim sistemimizi diskete yazacagiz. Simdik kodlari yazmaya basliyalim; —————————————————————————- Ilk Kernel: Tabiki bir Kernel sadece bir mesaj ekrana yazip sistemi yeniden baslatmak la kalmaz ama böyle bir kod yapiyi anlamak icin kolaydir: ——————————————————– mov ax, 1000h mov ds, ax mov es, ax start: ; Burda gercek anlamda isletim ; sistemimize basliyoruz. mov si, msg ; hemen bir string gösteriyoruz call put call read ; “oku” bir tusa basilana kadar bekler jmp reset msg db “Yeniden baslatmak icin bir tusa” db “basin!”,13,10,0 put: lodsb or al, al jz short put_d mov ah, 0×0E mov bx, 0×0007 int 0×10 jmp put put_d: retn read: mov ah, 0 int 016h ret reset: db 0Eah dw 0000h dw 0FFFFh ——————————————————— Dosyayi kernel.asm diye kaydettikten sonra; nasm –f bin –o kernel.bin kernel.asm seklinde derlenmelidir. Bir BOOTMANAGER —————————————————————————- BIOS ilk acildiginda 512Bytes boyutunda bir OP-Code arar ve BIOS bu dosyayi 0×7C00 adresine yükler. ———————–BOOT.ASM————————– org 0×7C00 ; Öncelikle dosyanin adresini ayaliyoruz. start: cli ; Interrupts kullanma! mov ax, 0×9000 ; Stack adresini kayit etme mov ss, ax mov sp, 0 ; Stackpointer’ 0 lamak sti mov [bootdriv], dl call load ; Kernel i yükleme mov ax, 0×1000 ; 0×1000 Shell’ in adresi mov es, ax mov ds, ax push ax mov ax, 0 push ax retf bootdriv db 0 loadmsg db “Sistem Yükleniyor…”,13,10,0 putstr: lodsb or al,al jz short putstrd mov ah,0×0E mov bx,0×0007 int 0×10 jmp putstr putstrd: retn load: push ds mov ax, 0 mov dl, [bootdriv] int 13h pop ds jc load load1: mov ax,0×1000 mov es,ax mov bx, 0 mov ah, 2 mov al, 5 mov cx, 2 mov dx, 0 int 13h jc load1 mov si,loadmsg call putstr retn ;Programin 512 Bytes dan büyük olmamasi icin… times 512-($-$$)-2 db 0 dw 0AA55h ; Bu da BIOS sa bitis talimatini verir —————————————————- nasm –f bin –o boot.bin boot.asm seklinde de dosya derlenmelidir. Simdide isletim sistemimizi Diskete yükleyip calistirmak icin; copy boot.bin+kernel.bin vitaxia.img Seklinde iki dosyayi birlestiriyoruz. Son olarak da RaWrite programi ile bu img dosyasini diske yaziyoruz. Disketi sokup bilgisayari yeniden baslattigimizda isletim sistemimiz calisacaktir. Son olarak tabi ki bunu hepsi sadece bir örnek, nasil bir isletim sistemi yapabilecegimize dahil. |
|
| The Following User Says Thank You to bypit For This Useful Post: | CyberTrouble (06-13-09) |
![]() |
| Bookmarks |
| Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| Seçenekler | |
| Stil | |
| |