1: 2005-07-25 (月) 19:42:10 |
現: 2024-01-06 (土) 22:39:10 |
| ORG 0x100 | | ORG 0x100 |
| ;---------------------------------------------- | | ;---------------------------------------------- |
| + | |
| ;-----------初期値。AXに開始セクタ値、DXに終了セクタ値 | | ;-----------初期値。AXに開始セクタ値、DXに終了セクタ値 |
| + | |
| MOV AX,1439 | | MOV AX,1439 |
| MOV DX,161 | | MOV DX,161 |
| + | |
| ;--繰り返す回数を求めておく。 | | ;--繰り返す回数を求めておく。 |
| SUB DX,AX ;DXの値は破壊されるが、回数が得られれば | | SUB DX,AX ;DXの値は破壊されるが、回数が得られれば |
| ;いらないはず。 | | ;いらないはず。 |
- | | + | |
- | PUSH DX ;値(回数)をスタック位置1にバックアップ | + | PUSH DX ;値(回数)をスタック位置1にバックアップ |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
| ;--セクタ値を求める | | ;--セクタ値を求める |
| ;-----------s = R mod A + 1 | | ;-----------s = R mod A + 1 |
| ;--セクタ値がもっとも簡単に求められるので。 | | ;--セクタ値がもっとも簡単に求められるので。 |
| + | |
| MOV BX,AX ;論理セクタ数をBXにバックアップ | | MOV BX,AX ;論理セクタ数をBXにバックアップ |
| + | |
| MOV DL,18 ;シリンダ内セクタ数(A)をDLにセット | | MOV DL,18 ;シリンダ内セクタ数(A)をDLにセット |
| + | |
| DIV dl ;R ÷ Aを実行。ALに商、AHに余りがセットされる。 | | DIV dl ;R ÷ Aを実行。ALに商、AHに余りがセットされる。 |
| ;この商は論理シリンダ数?になる。 | | ;この商は論理シリンダ数?になる。 |
| + | |
| ADD AH,1 ;+1を実行。これでAHにはセクタ数が入った。 | | ADD AH,1 ;+1を実行。これでAHにはセクタ数が入った。 |
| + | |
| MOV CL,AH ;これでCLにセクタ数はOK | | MOV CL,AH ;これでCLにセクタ数はOK |
- | | + | |
| + | |
| ;--ヘッドとシリンダの値を求める--- | | ;--ヘッドとシリンダの値を求める--- |
- | | + | |
| + | |
| MOV CH,AL ;CHに論理シリンダ数?をバックアップ | | MOV CH,AL ;CHに論理シリンダ数?をバックアップ |
| + | |
| MOV AX,2880 ;AXに総セクタ数をAXにセット | | MOV AX,2880 ;AXに総セクタ数をAXにセット |
| MOV DL,18 ;DLにシリンダ内セクタ数をセット | | MOV DL,18 ;DLにシリンダ内セクタ数をセット |
| DIV DL ;割り算。この割り算でALに商すなわち | | DIV DL ;割り算。この割り算でALに商すなわち |
| ;総シリンダ数が求められる。 | | ;総シリンダ数が求められる。 |
| + | |
| MOV AH,0 ;ALの値を16ビット化する。(割り算のために) | | MOV AH,0 ;ALの値を16ビット化する。(割り算のために) |
| MOV DL,2 ;ヘッド数をDLにセット | | MOV DL,2 ;ヘッド数をDLにセット |
| + | |
| DIV DL ;割り算。これでALに商すなわち一面のシリンダ数 | | DIV DL ;割り算。これでALに商すなわち一面のシリンダ数 |
| ;が求められる | | ;が求められる |
- | | + | |
| + | |
| MOV DL,AL ;ALにある一面シリンダ数をDLに移す | | MOV DL,AL ;ALにある一面シリンダ数をDLに移す |
| MOV AL,CH ;CHにバックアップしておいた論理シリンダ数をALに | | MOV AL,CH ;CHにバックアップしておいた論理シリンダ数をALに |
| DIV DL ;割り算。これでALに商すなわちヘッド値、AHに | | DIV DL ;割り算。これでALに商すなわちヘッド値、AHに |
| ;余りすなわちシリンダ番号が入る。 | | ;余りすなわちシリンダ番号が入る。 |
- | | + | |
- | ;--BIOS呼び出し用に、各レジスタ位置を移動調整 | + | ;--BIOS呼び出し用に、各レジスタ位置を移動調整 |
| + | |
| MOV CH,AH | | MOV CH,AH |
| MOV DH,AL | | MOV DH,AL |
| MOV DL,0 ;ドライブ番号 | | MOV DL,0 ;ドライブ番号 |
- | | + | |
- | | + | |
- | | + | |
| ;--end--- | | ;--end--- |
| + | |
| ;---------------------------------------------- | | ;---------------------------------------------- |
| MOV AX,0x4c00 | | MOV AX,0x4c00 |
| INT 0x21 | | INT 0x21 |
| =============================================== | | =============================================== |