日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

磁盤讀寫

??????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 的程序如下所示:

mov ax,0mov es,axmov bx,200h ;es:bx指向接收/讀寫扇區(qū)的內(nèi)存區(qū)起始地址mov al,1 ;讀取/寫入的扇區(qū)數(shù)目mov ch,0 ;磁道號(hào)mov cl,1 ;(起始)扇區(qū)號(hào)mov dh,0 ;磁頭號(hào)(對(duì)于軟盤來說就是面號(hào),因?yàn)橐粋€(gè)面用一個(gè)磁頭來讀寫)mov dl,0 ;驅(qū)動(dòng)器號(hào): 軟驅(qū)從 0 開始: 0,軟驅(qū) A ; 1,軟驅(qū) B。硬盤從 80h 開始: 80h,硬盤 C ; 81h,硬盤 D 。mov ah,2 ;int 13h 的功能號(hào)(常用的:2 表示讀扇區(qū);3 表示寫扇區(qū))int 13h

??????如果是將 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ū)。

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

實(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ū);

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) ;用來存放面號(hào),磁道號(hào)和扇區(qū)號(hào)s: push sipush cxpush bxpush axmov ax,dxmov dx,0mov bx,1440 ;bx 中存放除數(shù)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;至此已將面號(hào),磁道號(hào)和扇區(qū)號(hào)分別存入內(nèi)存中;下面進(jìn)行磁盤讀寫,默認(rèn)讀取的扇區(qū)個(gè)數(shù)為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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。