雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
1: 2005-07-25 (月) 19:42:10 ソース バックアップ No.1 を復元して編集
Line 1: Line 1:
 + ==================================================
 + [BITS 16]
 + [OPTIMIZE 1]
 + [OPTION 1]
 + [INSTRSET "8086"]
 + [FORMAT "BIN"]
 + ORG 0x100
 + ;----------------------------------------------
 + ;-----------初期値。AXに開始セクタ値、DXに終了セクタ値
 +
 +  MOV AX,1439
 +  MOV DX,161
 +
 + ;--繰り返す回数を求めておく。
 +  SUB DX,AX ;DXの値は破壊されるが、回数が得られれば
 +  ;いらないはず。
 +
 +    PUSH DX ;値(回数)をスタック位置1にバックアップ
 +
 +
 +
 +
 +
 + ;--セクタ値を求める
 + ;-----------s = R mod A + 1
 + ;--セクタ値がもっとも簡単に求められるので。
 +
 +  MOV BX,AX ;論理セクタ数をBXにバックアップ
 +
 +    MOV DL,18 ;シリンダ内セクタ数(A)をDLにセット
 +
 +    DIV dl ;R ÷ Aを実行。ALに商、AHに余りがセットされる。
 +     ;この商は論理シリンダ数?になる。
 +
 +    ADD AH,1 ;+1を実行。これでAHにはセクタ数が入った。
 +
 +    MOV CL,AH ;これでCLにセクタ数はOK
 +
 +
 + ;--ヘッドとシリンダの値を求める---
 +
 +
 +    MOV CH,AL ;CHに論理シリンダ数?をバックアップ
 +
 +    MOV AX,2880 ;AXに総セクタ数をAXにセット
 +    MOV DL,18 ;DLにシリンダ内セクタ数をセット
 +    DIV DL ;割り算。この割り算でALに商すなわち
 +     ;総シリンダ数が求められる。
 +
 +    MOV AH,0 ;ALの値を16ビット化する。(割り算のために)
 +    MOV DL,2 ;ヘッド数をDLにセット
 +
 +    DIV DL ;割り算。これでALに商すなわち一面のシリンダ数
 +     ;が求められる
 +
 +
 +    MOV DL,AL ;ALにある一面シリンダ数をDLに移す
 +    MOV AL,CH ;CHにバックアップしておいた論理シリンダ数をALに
 +    MOV AH,0 ;論理シリンダ数を16ビット化
 +    DIV DL ;割り算。これでALに商すなわちヘッド値、AHに
 +     ;余りすなわちシリンダ番号が入る。
 +
 +;--BIOS呼び出し用に、各レジスタ位置を移動調整
 +
 +    MOV CH,AH
 +    MOV DH,AL
 +    MOV DL,0 ;ドライブ番号
 +
 +
 +
 +
 + ;--end---
 +
 + ;----------------------------------------------
 + MOV AX,0x4c00
 + INT 0x21
 + ===============================================