Logical Block Addressing

Aus Lowlevel
Version vom 6. November 2009, 20:47 Uhr von XanClic (Diskussion | Beiträge) (Hübscher (?), Rechtschreibung und Angabe des Beispieleinsatzzwecks)
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ü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>