Miten voin käyttää Assemblyllä kiintolevyä datan tallentamiseen? Luin keskeytyksistä, mutta haluaisin kuitenkin vielä pientä valaistusta, riskialtistahan tuo on.
Oletan nyt, että tarkoitat x86-assemblyä ja ohjelmoit DOSissa. Tiedostoihin voi kirjoittaa ja niistä voi lukea helposti muutamalla keskeytys 21h:n alatoiminnolla. Näillä saa jo paljon aikaan:
Ei tuo kyllä minusta juuri sen vaarallisempaa ole kuin muillakaan kielillä.
Tässä tapauksessa ei ikävä kyllä saisi käyttää DOS:n keskeytyksiä. BiOS:n mielummin.
Siinä tapauksessa kysymykseen tulee BIOS:n keskeytys 13 (Diskette BIOS services).
Kiintolevyä yksinään voi käyttää datan tallentamiseen tuon 13h:n avulla... tiedostojärjestelmätukea BIOS ei tarjoa (=et voi kirjoittaa helposti vaikka tiedostoa "C:\HAKE\TIEDOSTO.TXT"... etkä edes "C:\TIEDOSTO.TXT").
Jos ihan kovalevyä haluat käyttää, niin tuolla int13h:lla homma hoituu.
Tiedostoja pääset käyttämään rakentamalla ajurin tiedostojärjestelmää varten. Suosittelisin FAT16/32 -ajuria, sillä semmosen uskoisin olevan toteutettavissa vielä melko helposti.
Tuota keskeytystä 13h käyttämällä et onnistu kirjoittamaan turvallisesti. Sopivassa rekisterissä oleva väärä arvo saattaa aiheuttaa varsin ikävät vahingot levylle.
Itse suosittelisin diskettien käyttämistä... Ei tarvitse kovalevyä uhrata kokeiluille =)
Btw.. Mihin tarvitset tämmöstä kiintolevyajuria? Kasaatko käyttistä?
Eli minulla on buuttidiski. Miten voisin kirjoittaa vaikka sille dataa sitten? Käyttiskysymykseen en vastaa mitään :).
Tässä pieni esimerkki... kuten yleensä...
1) En ota vastuuta tämän koodin aiheuttamista vahingoista
2) Emulaattori on sopivin paikka ajamiseen =)
; Poista kommentti seuraavista sen edestä, jonka haluat tehdä... ; mov ah, 2 ; Lue ; mov ah, 3 ; Kirjoita mov al, 1 ; Lue/kirjoita yksi sektori (512 tavua) mov ch, 0 ; Sylinteri mov cl, 1 ; Sektori mov dh, 0 ; Lukupää mov dl, 0 ; Asema (0 = levykeasema) mov bx, cs ; Kirjoitettavan/luettavan tiedon sijainti muistissa cs:0x8000 mov es, bx mov bx, 0x8000 int 13h
Tämä koodi ei sitten ole mitenkään erityisen turvallista...
Enkä ole varma toiminnasta... Tuo CHS osoite tähtää muistaakseni juuri levykkeen FAT -taulukon alkuun, joten osa levykkeellä olevista tiedostoista saattaa menettää toimintansa.
---------------------------------
Levyn lukemiseen kannattaa tehdä myös tuommoinen LBA (Logical base address) -> CHS (Cylinder, Head, Sector) -muunnos.
Levykeasema käyttää CHS osoitetta, joissa on erillisinä sylinteri, lukupää ja sektori. Paljon kätevämpi on kuitenkin yhdistetty osoite (LBA), josta voidaan laskea CHS.
Tutoriaalin tuommoisen toteuttamisesta saat täältä
Aihe on jo aika vanha, joten et voi enää vastata siihen.