Logical Block Addressing

Aus Lowlevel
Version vom 6. November 2009, 20:09 Uhr von RedEagle (Diskussion | Beiträge) (asm-code zur Berechnung die wenig Speicher belegt)
Wechseln zu:Navigation,

Bei Logical Block Addressing (Logische Block Adressierung) werden Sektoren von Massenspeichern von 0 aufsteigend adressiert. Das Gegenstück zu LBA ist das ältere CHS.

Umrechnung von LBA zu CHS:

   Abkürung Bedeutung
   
   mS       maximale Anzahl Sektoren (auf einem Zylinder)
   mH       maximale Anzahl Köpfe
   
   S        Sektor
   H        Kopf
   C        Zylinder
   C =   LBA  /  (mH*mS)
   H =  (LBA mod (mH*mS))  /  mS
   S = ((LBA mod (mH*mS)) mod mS) + 1

Beispiel

Da es im bootsektor auf jedes byte ankommt habe ich mich darum bemüht die Umrechnung möglichst klein zu machen. <asm>

in ax steht der Sektornummer
   ; C
   xor  dx, dx     ; dx leeren
   mov  bx, 2*18   ; Anzahl der Heads * Sektoren pro Cluster
   div  bx         ; dx:ax / bx = ax rest dx
   mov  [tmpa], al ; al sichern
   ; H
   mov  ax, dx     ; mit dem Rest der Division wird jetzt weitergearbeitet
   xor  dx, dx     ; dx wieder leeren
   shr  bx, 1      ; 36/2 = 18, also nur die Anzahl der Sektoren pro Cluster
   div  bx         ; dx:ax / bx = ax rest dx
   mov  [tmpb], al ; al sichern
   ;S
   inc  dx         ; Den Rest um 1 erhöhen
   mov  [tmpc], dl ; Und ebenfalls sichern

</asm>