雑記帳
ここは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) (100d) by