日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

汇编语言随笔(16)- 对磁盘进行读写(int 13h 中断例程)和实验 17

發布時間:2025/6/17 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言随笔(16)- 对磁盘进行读写(int 13h 中断例程)和实验 17 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

磁盤讀寫

??????3.5 英寸軟盤分為上下兩面,每面有 80 個磁道,每個磁道又分為 18 個扇區,每個扇區的大小為 512 個字節。下面的磁盤讀寫均以 3.5 英寸軟盤為例。

??????在讀寫扇區的時候,要給出面號、磁道號和扇區號。面號和磁道號從 0 開始,扇區號從 1 開始。
??????BIOS提供的訪問磁盤的中斷例程為 int 13h 。讀取軟盤 0 面 0 道 1 扇區的內容到 0:200 的程序如下所示:

mov ax,0mov es,axmov bx,200h ;es:bx指向接收/讀寫扇區的內存區起始地址mov al,1 ;讀取/寫入的扇區數目mov ch,0 ;磁道號mov cl,1 ;(起始)扇區號mov dh,0 ;磁頭號(對于軟盤來說就是面號,因為一個面用一個磁頭來讀寫)mov dl,0 ;驅動器號: 軟驅從 0 開始: 0,軟驅 A ; 1,軟驅 B。硬盤從 80h 開始: 80h,硬盤 C ; 81h,硬盤 D 。mov ah,2 ;int 13h 的功能號(常用的:2 表示讀扇區;3 表示寫扇區)int 13h

??????如果是將 0:200 中的內容寫入 0 面 0 道 1 扇區的話,只需要將上面程序稍微改寫一下即可:

... ;前面的代碼不變mov ah,3int 13h

??????練習:將當前屏幕的內容保存在磁盤上。
??????分析:一屏的內容占4000個字節,所以需要 8 個扇區。

assume cs:code code segmentmov bx,0b800hmov es,bxmov bx,0mov al,8 ;需要注意這里更改寫入扇區的數目mov ch,0mov cl,1mov dl,0mov dh,0mov ah,3int 13hcode endsend

實驗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 指向存儲讀出數據或寫入數據的內存區;

assume cs:codecode segmentstart: mov si,csmov ds,simov si,offset bodymov di,0mov es,dimov di,200hmov cx,offset bodyend-offset bodycldrep movsbmov word ptr es:[7c*4],200hmov word ptr es:[7c*4+2],0mov ax,4c00hint 21hbody: jmp short st db 3 dup(0) ;用來存放面號,磁道號和扇區號s: push sipush cxpush bxpush axmov ax,dxmov dx,0mov bx,1440 ;bx 中存放除數div bx ;32位/16位mov si,0mov byte ptr t[si],almov ax,dxmov bl,18div bl ;16位/8位inc simov byte ptr t[si],alinc siinc ahmov byte ptr t[si],ah;至此已將面號,磁道號和扇區號分別存入內存中;下面進行磁盤讀寫,默認讀取的扇區個數為1pop axpop bxmov al,1mov si,1mov ch,t[si]inc simov cl,t[si]mov dl,0mov si,0mov dh,t[si]int 13hpop cxpop siiretbodyend: nopcode ends end start

總結

以上是生活随笔為你收集整理的汇编语言随笔(16)- 对磁盘进行读写(int 13h 中断例程)和实验 17的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。