Logical Block Addressing — Änderungen 6188 → 6189

Zeile 3: Zeile 3:
 
Umrechnung von LBA zu [[CHS]]:
 
Umrechnung von LBA zu [[CHS]]:
  
−
    Abkürung Bedeutung
+
{| {{prettytable}}
−
   
+
! Abkürzung || Bedeutung
−
    mS       maximale Anzahl Sektoren (auf einem Zylinder)
+
|-
−
    mH       maximale Anzahl Köpfe
+
| mS || Anzahl der Sektoren pro Zylinder
−
   
+
|-
−
    S       Sektor
+
| mH || Anzahl der Köpfe
−
    H       Kopf
+
|-
−
    C       Zylinder
+
| S || Sektor
 +
|-
 +
| H || Kopf
 +
|-
 +
| C || Zylinder
 +
|}
 +
<code>
 +
C =  LBA  /  (mH*mS)
 +
H =  (LBA mod (mH*mS))  /  mS
 +
S = ((LBA mod (mH*mS)) mod mS) + 1
 +
</code>
  
−
    C =  LBA / (mH*mS)
+
== Beispiel für eine 3,5"-Diskette ==
−
    H =  (LBA mod (mH*mS)) /  mS
+
Da es im Bootsektor auf jedes Byte ankommt, habe ich mich darum bemüht, die Umrechnung möglichst klein zu machen.
−
    S = ((LBA mod (mH*mS)) mod mS) + 1
+
<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
  
−
== Beispiel ==
+
; H
−
Da es im bootsektor auf jedes byte ankommt habe ich mich darum bemüht die Umrechnung möglichst klein zu machen.
+
mov  ax, dx     ; mit dem Rest der Division wird jetzt weitergearbeitet
−
<asm>
+
xor  dx, dx    ; dx wieder leeren
−
; in ax steht der Sektornummer
+
shr bx, 1      ; 36/2 = 18, also nur die Anzahl der Sektoren pro Zylinder
−
     ; C
+
div  bx        ; dx:ax / bx = ax, Rest dx
−
    xor  dx, dx    ; dx leeren
+
mov  [tmpb], al ; al sichern
−
    mov bx, 2*18   ; Anzahl der Heads * Sektoren pro Cluster
 
−
    div  bx        ; dx:ax / bx = ax rest dx
 
−
    mov  [tmpa], al ; al sichern
 
  
−
    ; H
+
;S
−
    mov ax, dx     ; mit dem Rest der Division wird jetzt weitergearbeitet
+
inc dx         ; Den Rest um 1 erhöhen
−
    xor  dx, dx    ; dx wieder leeren
+
mov  [tmpc], dl ; Und ebenfalls sichern</asm>
−
    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
+
[[Kategorie:Glossar]]
−
    inc  dx        ; Den Rest um 1 erhöhen
+
[[Kategorie:Hardware]]
−
    mov  [tmpc], dl ; Und ebenfalls sichern
 
−
</asm>
 
−
 
 
−
[[Category:Glossar]]
 
−
[[Category:Hardware]]