| Zeile 3: | Zeile 3: | ||
Umrechnung von LBA zu [[CHS]]: | Umrechnung von LBA zu [[CHS]]: | ||
| − | + | {| {{prettytable}} | |
| − | + | ! Abkürzung || Bedeutung | |
| − | + | |- | |
| − | + | | mS || Anzahl der Sektoren pro Zylinder | |
| − | + | |- | |
| − | + | | mH || Anzahl der Köpfe | |
| − | + | |- | |
| − | + | | 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> | ||
| − | + | == 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> | |
| − | |||
| − | |||
| − | |||
| − | + | [[Kategorie:Glossar]] | |
| − | + | [[Kategorie:Hardware]] | |
| − | |||
| − | |||
| − | |||
| − | [[ | ||
| − | [[ | ||