Löytyiskö ohjelmapätkää, joka lukee disketin
pintaa oli siellä sitten mitä tahansa???
Niin, assemblerilla tehtyä tarvitsisin.
pintaa oli siellä sitten mitä tahansa???
Niin, assemblerilla tehtyä tarvitsisin.
Turvaa tilisi vahvistamalla puhelinnumerosi. Voit silloin palauttaa unohtuneen salasanan tekstiviestillä.
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 9
Vanhimmat
Eikös sitä voi lukea vaikka DOSin DEBUGilla?
Eli dosissa kirjoittaa DEBUG
sitten "?" niin saa ohjeen. Helpommin asia käy tietty vaikka WinHex illä.
Jos nyt edes tätä tarkoitit?
...tarkoittanut.
Tarvitsisin nimenomaan assembler -koodin.
Valmisohjelmia on kyllä tarjolla, mutta niissäpä
ei tule koodia mukana...!
> Valmisohjelmia on kyllä tarjolla, mutta
niissäpä
> ei tule koodia mukana...!
sitä varten on disassemblerit.
on monille eri prosessoriperheille, mitä niistä
tarkoitit???
Ei väliä. Laitatko ohjelmalistauksen?
Helpoiten se käy Bios:sin int 13h/2 kutsulla,
etsi käsiisi kirja josta löytyy noi interruptit..
niin siintä vaan koodaamaan, vai haluatko että
lähetän valmiin koodin?
esim. tänne
Tässä tämä koodi sitten on, aika yksinkertainen.
Pitää kääntää Tasm:lla ja ajaa Dossissa
(Tai Windows-Dossin kautta).
Esimerkki lukee A-asemasta ensim. sektorin,uralta
ja lukupäältä nolla (joka on muuten buuttisektori)
Yksi sektori on 1,44 mb levykkeillä 512 tavua.
Jotta tästä ohjelmasta olisi jotain hyötyä
niin toi muistialue "luetut_tavut" pitää saada
näkymään ruudulla,(ellet sitten aja tätä
debuggerilla)
Lisäksi kannattasi heti INT 13h käskyn jälkeen
tarkkailla CF:ää (carry lippua) koska luku voi
joskus epäonnistua.
TÄRKEÄÄ!! pidä huoli että AH:ssa on aina 2, koska
jos siinä on 3 niin silloin tämä interrupt
KIRJOITTAA sektoreita massamuistiasemalle.
Ja sitten ei muuta kun koodaamaan.
*******************
IDEAL
MODEL SMALL
P386
DATASEG
LUETUT_TAVUT DB 512 DUP (0)
CODESEG
START:
MOV AX,@DATA
MOV ES,AX
MOV AH,2
MOV AL,1
MOV CH,0
MOV CL,1
MOV DH,0
MOV DL,0 ;<--A:asema
MOV BX,OFFSET LUETUT_TAVUT
INT 13H
MOV AH,4CH
INT 21H ;<--paluu Dossiin
END START
********************
Huomaat että data on alustettu ES:sään, koska
INT 13h kirjoittaa tavut ES:BX:n.
AL:n laitetaan luettavien sektorien määrä.
CH:n uran n:o mistä luku aloitetaan,eka on 0.
CL:n sektorinumero mistä luku aloitetaan
eka on 1.
DH:n lukupään n:o, eka on 0.
DL:n aseman n:o A=0, B=1, C=80h, D=81h jne.
Interruptin palautusarvot
CF=0 luku onnistui
AH=toiminnan virhekoodi
AL=luettujen sektorien määrä
-------
Huomaa, kiintolevyillä uran n:o voi olla suurempi
kun CH-rekisterin koko..255 niin luvun
kaksi ylimenevää bittiä laitetaan CL:n kahteen
ylempään bittiin.
Ok, kiitokset. Täytyy "varovasti" tutkia koodi
ennen käyttöä. Ihan silä varalta, että olisi
tullut vähän kusetettua.... :)
Hauska juttu, että vastanneista vain yksi todella
sai aikaiseksi koodia. Muut heittelivät jotain
yleispäteviä paskanjauhamiskysymyksiä!