雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
1: 2005-07-25 (月) 19:42:10 ソース バックアップ No.1 を復元して編集 現: 2024-01-06 (土) 22:39:10 ソース 編集
Line 7: Line 7:
 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に
Line 61: Line 58:
    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
 ===============================================  ===============================================