|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2006
Città: V.E. (na)
Messaggi: 115
|
[asm] hard disk con qemu
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 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 ma i parametri del disco che leggo mi lasciano un po 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 |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
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
![]() fine premessa. nonostante la premessa, ehm, i valori CHS che hai riportato mi sembrano assurdi lo stesso 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... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:11.




















