Logical Block Addressing

Aus Lowlevel
Wechseln zu: Navigation, Suche

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ürzung Bedeutung
mS Anzahl der Sektoren pro Spur
mH Anzahl der 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 für eine 3,5"-HD-Diskette

Da es im Bootsektor auf jedes Byte ankommt, habe ich mich darum bemüht, die Umrechnung möglichst klein zu machen. Die Zahlenwerte (Sektoren pro Zylinder und Anzahl der Köpfe) gelten für eine 3,5"-Diskette mit 1440 kB Speicherplatz.

; in ax steht die Sektornummer
; C
xor  dx, dx     ; dx leeren
mov  bx, 2*18   ; Anzahl der Heads * Sektoren pro Zylinder
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 Zylinder
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

siehe auch

  • CHS - veraltete Methode zum Adressieren von Sektoren
Meine Werkzeuge
In anderen Sprachen