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