PDA

View Full Version : [asm] hard disk con qemu


mastoo
18-09-2006, 20:17
Ho scritto un semplicissimo programma in assembly che viene caricato dal boot sector del floppy.
Con qemu faccio partire la macchina virtuale con creato un hd di 2megabyte circa.
Vorrei conoscere i parametri di questo disco (hd)
Ho pensato di utilizzare l'interrupt INT 13h AH=08h: che dovrebbe leggerli

/--------da wikipedia-----------------------------------------/
INT 13h AH=08h: Read Drive Parameters

Parameters:
Registers
AH 08h = function number for read_drive_parameters
DL drive index (e.g. 1st HDD = 80h)


Results:
CF Set On Error, Clear If No Error
AH Return Code
DL number of hard disk drives
DH logical last index of heads = number_of - 1 (because index starts with 0)
CX logical last index of cylinders = number_of - 1 (because index starts with 0)
logical last index of sectors per track = number_of (because index starts with 1)

Remarks:
Logical values of function 08h may/should differ from physical CHS values of function 48h.
Result register CX contains both cylinders and sector/track values, see remark of function 02h.
/----------------------------

uno spezzone del mio codice

mov ah,08h
mov dl,80h
int 13h

mov al,dh

mov si, dato

call byte2ascii ;converte il byte al in cifre ascii e salva all'indirizzo ds:si

call print ;stampa il numero

mov dx,cx

and cx,0000000000111111b

mov al,cl

mov si, dato

call byte2ascii

call print





and dx,1111111111000000b

mov al,dh

mov si, dato

call byte2ascii

call print

fin qui dovrebbe essere tutto giusto (almeno spero)

ma i parametri del disco che leggo mi lasciano un po :confused:

numero di head 21
numero di settori 7
numero di cilindri 24

ora volevo sapere se il disco puo essere realmente cosi ho c'è un errore
sepero di essere stato chiaro

grazie

71104
18-09-2006, 21:35
premessa: il sistema CHS (Cylinder-Head-Sector) è un sistema di indirizzamento obsoleto e per giunta nemmeno univoco (lo stesso byte sul disco può essere riferito con parametri diversi e sistemi CHS di riferimento diversi), e di conseguenza è possibilissimo che i valori di un sistema di riferimento CHS siano assurdi dal punto di vista fisico per il semplice motivo che a quei valori ne corrispondono altri che caratterizzano un sistema fisico più plausibile ma magari meno "comodo" nei calcoli. il mio hard disk per esempio secondo i valori CHS di riferimento restituiti da Windows risulta avere 255 piatti :D manco Google :asd:

fine premessa.

nonostante la premessa, ehm, i valori CHS che hai riportato mi sembrano assurdi lo stesso :confused: :confused: :confused:

facendo un attimino di conti, il tuo HD virtuale risulterebbe avere numero settori 21*7*24 = 3528, e moltiplicando per 512 (dimensione in bytes di un settore) abbiamo 1.806.336 bytes; dividendo due volte per 1024 (conversione in Kilobytes e poi in Megabytes) abbiamo 1 virgola sette e qualcosa, mentre in teoria da quanto dici dovremmo avere 2 perché il tuo HD è da 2 mega...