Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Creare immagine di un settore
Forum - Pascal - Creare immagine di un settore

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Volevo scrivere un programma per creare l'immagine di un settore del disco.
Ho scritto questo programma(scrivendo una procedura in assembly):

program DISK;
{$AsmMode intel}
uses crt;
var
nome : string;
F : file of byte;
B : byte;
W : word;
I : longword;

procedure rddk(cil, heads, sec : byte; var lett : word);assembler;
asm
mov ah,02h       //imposta lettura
mov al,01        //variabile ingresso(numero settori)
mov ch,cil       //variabile ingresso(n cilindro)
mov cl,sec       //variabile ingresso(n settore)
mov dh,heads     //variabile ingresso(n heads)
mov dl,80h       //variabile ingresso
mov bx,7c00h     //variabile ingresso
int 13h //lettura
end;

BEGIN
clrscr;
writeln('inserisci nome immagine);
readln(nome);
assign(F, nome);
rewriteln(F);
rddk(1,1,1, W);
write(F, W);
readln;
END.

Il programma però di dà errore (runtime error 216).
Aiuto

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 23:52
Domenica, 29/11/2009
Da quello che leggo intuisco che non hai idea di come si programmi in Assembly.
Hai copiato un pezzo di codice in ASM per modalità real a 16bit che ovviamente non funziona su un sistema operativo in modalità protetta 32 bit.

Il fulcro della questione è che utilizzi la int 13 per accedere alle informazioni dell'hard disk tramite una routine del BIOS. Ma su windows questa interrupt è mascherata.
Significa che non puoi accedere direttamente al BIOS su un sistema operativo in modalità protetta, devi appoggiarti (quando possibile) alle API del sistema. Esiste probabilmente una syscall di windows che ti darà le informazioni che ti servono, senza scomodare l'assembly.

Potrebbe anche darsi che la syscall in questione funzioni soltanto in kernel space. In tal caso dovresti procurarti il Driver Development Kit che costa un pacco di soldi, oppure fare i tuoi esperimenti all'interno di un kernel open source (Linux, BSD, o altri), oppure ancora installare il vecchio MS-DOS (o una versione gratuita di DOS come FreeDOS) e fare i tuoi esperimenti su quello.

PM Quote