Logical Block Addressing
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 Zylinder |
| 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"-Diskette
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 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</asm>