雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
15: 2005-07-28 (木) 00:00:00 ソース バックアップ No.15 を復元して編集 現: 2024-01-06 (土) 22:39:10 ソース 編集
Line 227: Line 227:
となります。・・・じゃ、論理セクター18は?っていうと、 となります。・・・じゃ、論理セクター18は?っていうと、
-|シリンダ| 1| (一番内側から2つ目)|+|シリンダ| 0| (一番内側)|
|セクタ| 1 | (詳しいことは省略。FDはちゃんとスタート位置があります。)| |セクタ| 1 | (詳しいことは省略。FDはちゃんとスタート位置があります。)|
-|ヘッド| 0 | (表面のこと)|+|ヘッド| 1 | (裏面のこと)|
と、こう続いていくわけです。もうお解りですね? (^^) と、こう続いていくわけです。もうお解りですね? (^^)
 +
 +同じくセクタ34はどこかっていうと、
 +
 +|シリンダ| 0| (一番内側)|
 +|セクタ| 18 | (詳しいことは省略。FDはちゃんとスタート位置があります。)|
 +|ヘッド| 1 | (裏面のこと)|
 +
 +じゃ、セクタ35は? というと・・・・
 +
 +|シリンダ| 1| (一番内側から2番目)|
 +|セクタ| 1 | (詳しいことは省略。FDはちゃんとスタート位置があります。)|
 +|ヘッド| 0 | (表面のこと)|
 +
 +とこう続いていくわけです。
 +
 +
 +
 +
 +
 +
 +
Line 276: Line 297:
 ;AXレジスタに開始番号、DXレジスタに終了番号を入れてコールすると読んでくれる  ;AXレジスタに開始番号、DXレジスタに終了番号を入れてコールすると読んでくれる
 ;なんてできないものかな・・・  ;なんてできないものかな・・・
 + 
 readsec1:  readsec1:
   PUSH  AX      ;AXの値を一旦バックアップ    PUSH  AX      ;AXの値を一旦バックアップ
 + 
   SUB    AX,DX    ;まず引き算して、AXに「個数」を入れる    SUB    AX,DX    ;まず引き算して、AXに「個数」を入れる
   MOV    CX,AX    ;CXレジスタに個数を入れる。(LOOP用のカウンタ)    MOV    CX,AX    ;CXレジスタに個数を入れる。(LOOP用のカウンタ)
 + 
   POP    AX      ;リストア    POP    AX      ;リストア
 + 
   ;ヘッダの値を計算する    ;ヘッダの値を計算する
   PUSH  AX      ;AXの値を一旦バックアップ    PUSH  AX      ;AXの値を一旦バックアップ
   DIV    AX,2    ;値を半分に割る。    DIV    AX,2    ;値を半分に割る。
   SUB    AX,1439  ;片面のセクタ数を引き算する。    SUB    AX,1439  ;片面のセクタ数を引き算する。
 + 
   ;・・・あれぇ。引き算の場合、マイナスになるような場合って・・・    ;・・・あれぇ。引き算の場合、マイナスになるような場合って・・・
Line 367: Line 388:
まずはh。 まずはh。
 ;h = R ÷ (B ÷ 2) (余りは破棄)だから、  ;h = R ÷ (B ÷ 2) (余りは破棄)だから、
 + 
 PUSH    AX        ;AXには論理セクタ値が入っている。一旦バックアップ。  PUSH    AX        ;AXには論理セクタ値が入っている。一旦バックアップ。
 MOV    AX,2880  ;まず、AXに総セクタ数を入れる。  MOV    AX,2880  ;まず、AXに総セクタ数を入れる。
Line 386: Line 407:
 MOV    AX,2880  ;まず、AXに総セクタ数を入れる。  MOV    AX,2880  ;まず、AXに総セクタ数を入れる。
 SHR    AX,1      ;AX ÷ 2 を実行ししたのと同じ結果になる。  SHR    AX,1      ;AX ÷ 2 を実行ししたのと同じ結果になる。
 + 
 MOV    DX,AX    ;AXレジスタの値をDXにコピー  MOV    DX,AX    ;AXレジスタの値をDXにコピー
 POP    AX        ;AXレジスタを元に戻す(論理セクタ値をセット)  POP    AX        ;AXレジスタを元に戻す(論理セクタ値をセット)
Line 404: Line 425:
 SHR    AX,1      ;AX ÷ 2 を実行ししたのと同じ結果になる。  SHR    AX,1      ;AX ÷ 2 を実行ししたのと同じ結果になる。
 MOV    CX,AX    ;AXの内容をCXにコピー  MOV    CX,AX    ;AXの内容をCXにコピー
 + 
 POP    AX        ;AXの値を論理セクタに戻す  POP    AX        ;AXの値を論理セクタに戻す
 PUSH    AX        ;もう一回バックアップ  PUSH    AX        ;もう一回バックアップ
 MOV    DX,0      ;これでDX:AXの値は32bitながら論理セクタ値となるはず。  MOV    DX,0      ;これでDX:AXの値は32bitながら論理セクタ値となるはず。
 + 
 DIV    CX        ;これで、AXにはhの値が入っているはず。  DIV    CX        ;これで、AXにはhの値が入っているはず。
 + 
 MOV    DX,AX    ;AXの値(h)をDXレジスタに移す  MOV    DX,AX    ;AXの値(h)をDXレジスタに移す
 + 
 POP    AX    ;AXを初期値に戻す(論理セクター値)  POP    AX    ;AXを初期値に戻す(論理セクター値)
 POP    CX        ;CXを初期値に戻す  POP    CX        ;CXを初期値に戻す
 + 
 ;これで全て元通りで、かつ、DXにはhがセットされているはず。  ;これで全て元通りで、かつ、DXにはhがセットされているはず。
 + 
うーむ。とりあえずは成功かな??? うーむ。とりあえずは成功かな???