Logical Block Addressing — Änderungen 5816 → 6188

Zeile 15: Zeile 15:
 
     H =  (LBA mod (mH*mS))  /  mS
 
     H =  (LBA mod (mH*mS))  /  mS
 
     S = ((LBA mod (mH*mS)) mod mS) + 1
 
     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>
  
 
[[Category:Glossar]]
 
[[Category:Glossar]]
 
[[Category:Hardware]]
 
[[Category:Hardware]]