雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
================================================== [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 ===============================================
最終更新: 2024-01-06 (土) 22:39:10 (JST) (112d) by