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)
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>