|
雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
|
1: 2005-07-25 (月) 19:42:10 |
| + | ================================================== |
| + | [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 |
| + | =============================================== |
|