汇编语言随笔(16)- 对磁盘进行读写(int 13h 中断例程)和实验 17
磁盤讀寫
??????3.5 英寸軟盤分為上下兩面,每面有 80 個(gè)磁道,每個(gè)磁道又分為 18 個(gè)扇區(qū),每個(gè)扇區(qū)的大小為 512 個(gè)字節(jié)。下面的磁盤讀寫均以 3.5 英寸軟盤為例。
??????在讀寫扇區(qū)的時(shí)候,要給出面號(hào)、磁道號(hào)和扇區(qū)號(hào)。面號(hào)和磁道號(hào)從 0 開始,扇區(qū)號(hào)從 1 開始。
??????BIOS提供的訪問磁盤的中斷例程為 int 13h 。讀取軟盤 0 面 0 道 1 扇區(qū)的內(nèi)容到 0:200 的程序如下所示:
??????如果是將 0:200 中的內(nèi)容寫入 0 面 0 道 1 扇區(qū)的話,只需要將上面程序稍微改寫一下即可:
... ;前面的代碼不變mov ah,3int 13h??????練習(xí):將當(dāng)前屏幕的內(nèi)容保存在磁盤上。
??????分析:一屏的內(nèi)容占4000個(gè)字節(jié),所以需要 8 個(gè)扇區(qū)。
實(shí)驗(yàn)17
??????編寫包含多個(gè)功能子程序的中斷例程:
??????想對(duì)扇區(qū)用邏輯編號(hào)來統(tǒng)一表示,具體編號(hào)方法如下:
??????物理扇區(qū)號(hào)????????????邏輯扇區(qū)號(hào)
??????0 面 0 道 1 扇區(qū)????????????0
??????0 面 0 道 2 扇區(qū)????????????1
??????0 面 0 道 3 扇區(qū)????????????2
??????0 面 0 道 18 扇區(qū)??????????17
??????0 面 1 道 1 扇區(qū)????????????18
??????0 面 1 道 2 扇區(qū)????????????19
??????0 面 1 道 18 扇區(qū)??????????35
??????0 面 2 道 1 扇區(qū)????????????35
??????0 面 2 道 2 扇區(qū)????????????36
??????0 面 2 道 1 扇區(qū)????????????35
??????…
??????0 面 79 道 18 扇區(qū)????????1439
??????1 面 0 道 1 扇區(qū)????????????1440
??????可得下面的轉(zhuǎn)換關(guān)系: 邏輯扇區(qū)號(hào) = (面號(hào) x 80 + 磁道號(hào))x 18 + 扇區(qū)號(hào) - 1
????????????由邏輯扇區(qū)號(hào)得物理扇區(qū)號(hào)的方法給出如下:
????????????int():取商????????????rem():取余數(shù)
????????????面號(hào) = int(邏輯扇區(qū)號(hào)/1440)
????????????磁道號(hào) = int(rem(邏輯扇區(qū)號(hào)/1440)/18)
????????????扇區(qū)號(hào) = rem(rem(邏輯扇區(qū)號(hào)/1440)/18)+ 1
??????任務(wù):安裝一個(gè)新的 int 7ch 中斷例程,實(shí)現(xiàn)通過邏輯扇區(qū)號(hào)對(duì)軟盤進(jìn)行讀寫。
??????參數(shù)說明:
??????(1)用 ah 寄存器傳遞功能號(hào):0 表示讀,1 表示寫;
??????(2)用 dx 寄存器傳遞要讀寫的扇區(qū)的邏輯扇區(qū)號(hào);
??????(3)用 es:dx 指向存儲(chǔ)讀出數(shù)據(jù)或?qū)懭霐?shù)據(jù)的內(nèi)存區(qū);
總結(jié)
以上是生活随笔為你收集整理的汇编语言随笔(16)- 对磁盘进行读写(int 13h 中断例程)和实验 17的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编语言随笔(15)- 对键盘输入进行处
- 下一篇: win10下使用certutil工具对文