博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编写用逻辑扇区号读写软盘的中断例程
阅读量:6701 次
发布时间:2019-06-25

本文共 1239 字,大约阅读时间需要 4 分钟。

求安装一个新的int 7ch中断例程,实现通过逻辑扇区号对软盘进行读写操作

参数说明:

1、用ah寄存器传递功能号,0表示读,1表示写2、用bx寄存器传递要读写的扇区的逻辑扇区号3、用es:si指向存储读出数据或写入数据的缓冲区

三、分析

      分析可得逻辑扇区号和物理扇区号对应关系如下:

逻辑扇区号 = (面号*80+磁道号)*18+扇区号-1      那么可以使用下面的算法来计算int():描述性运算符,取商rem():描述性运算符,取余数

 

逻辑扇区号 = (面号*80+磁道号)*18+扇区号-1面号 = int(逻辑扇区号/1440)磁道号 = int(rem(逻辑扇区号/1440)/18)扇区号 = rem(rem(逻辑扇区号/1440)/18)+1

 

四、详细设计

assume cs:codecode segment;中断例程:通过逻辑扇区号对软盘读写;参数:ah功能号:0表示读,1表示写;dx要读写的逻辑扇区号;es:si存储读写数据的缓冲区; al写入的扇区数,bl驱动器号int7ch: call count  cmp ah,0  ;ah为0,转跳到读 je read cmp ah,1  ;ah为1,转跳到写 je write  mov ah,123  ;ah值不合法,返回 iretread: mov ah,2 jmp short start write: mov ah,3 jmp short start start: mov dl,bl mov bx,si int 13h  iret ;子程序:完成逻辑扇区的分析;参数:dx:逻辑扇区号;返回值:dh:面号,ch:磁道号,cl:扇区号count: push ax push bx  mov ax,dx mov dx,0 mov bx,1440 div bx mov bh,al ;逻辑扇区号/1440的商是面号,暂存于bh中    ;余数保存在dx中  mov ax,dx mov bl,18 div bl mov ch,al ;商是磁道号,保存在ch中  mov dh,bh ;面号传送到dh中  mov cl,ah add cl,1 ;余数+1是扇区号,保存在cl中  pop bx pop ax ret setup: ;初始化安装过程 mov ax,cs mov ds,ax mov si,offset int7ch  mov ax,0 mov es,ax mov di,200h  ;开始安装 mov cx,offset setup-offset int7ch cld rep movsb  ;设置中断向量表 mov ax,0 mov es,ax mov word ptr es:[7ch*4],0   ;ip mov word ptr es:[7ch*4+2],20h  ;cs  ;安装结束,返回操作系统 mov ax,4c00h int 21h code endsend setup

 

 

转载地址:http://ibgoo.baihongyu.com/

你可能感兴趣的文章
jOOR
查看>>
算法导论-4-2 找出所缺的整数
查看>>
HDU-1865 More is better
查看>>
Discuz!NT中的LLServer架构设计
查看>>
html 打印
查看>>
Android dip,px,pt,sp 的区别
查看>>
中文编码杂谈
查看>>
评价秦朝,不用老毛
查看>>
Asp.net和C# 函数方法 (2)【转载】
查看>>
百度分享代码(备用)
查看>>
SqlMapConfig.xml 配置
查看>>
wget用法详解
查看>>
在多个线程中避免和发现伪共享
查看>>
[Ubuntu] Ubuntu如何查看cronjob
查看>>
session监听
查看>>
Android Studio更新升级方法
查看>>
virtualbox主机与虚拟机互访,虚拟机上网
查看>>
ios相关手册、图表等综合
查看>>
SharpZipLib 文件/文件夹压缩
查看>>
百分比定位加position定位的常用布局
查看>>