编程:应用BIOS int 13H中断例程对 软盘 A 进行读写
完整源码
数据 从 内存 到 软盘(写扇区)
- 文件名
w2soft.asm
- 功能:将当前屏幕的内容保存到软盘上
- 分析:1屏的内容占4000个字节,需要8个扇区,用0面0道的1~8扇区存储显存中的内容。
-
mov ah,3
表示 写扇区
assume cs:code
code segment
start: mov ax,0B800h
mov es,ax
mov bx,0
mov al,8
mov ch,0
mov cl,1
mov dl,0
mov dh,0
mov ah,3
int 13h
mov ax,4c00h
int 21H
code ends
end start
数据从 软盘 到 内存(读扇区)
- 文件名
r2mem.asm
- 功能:读取 0面0道1扇区 的内容到 内存地址 0000:0200H处
-
mov ah,2
表示读扇区
assume cs:code
code segment
start: mov ax,0
mov es,ax
mov bx,200H
mov al,1
mov ch,0
mov cl,1
mov dl,0
mov dh,0
mov ah,2
int 13h
mov ax,4c00h
int 21H
code ends
end start
参数说明
入口参数:
(ah)= int 13H 的功能号(2表示读扇区、3表示写扇区)
(al)= 读取/写入的扇区数
(ch)= 磁道号
(cl)= 扇区号
(dh)= 磁头号(对于软盘即面号,对软盘一个面用一个磁头来读写)
(dl)= 驱动器号 软驱从0开始,0:软驱A 、 1:软驱B
硬盘从80H开始,80H:硬盘C 、 81H: 硬盘D
es:bx 指向接收从扇区读入数据的内存区/指向将写入磁盘的数据
返回参数:
操作成功,(ah)= 0 ,(al)= 读取/写入的扇区数
操作失败,(ah)= 出错代码
实际运行
-
运行程序:【U命令】查看指令的汇编形式,【G X 命令】跳到
mov ax,4C00H
所在地址 【 X 】,本次运行的X = 16
- 写扇区:需要8个扇区,用0面0道的1~8扇区存储显存中的内容
返回参数 AX = 0008H
ah = 00H 表示操作成功
al = 08H 说明写了8个扇区
- 读扇区 :读取0面0道1扇区的内容 返回参数 00 01
返回参数 AX = 0001H
ah = 00 H 表示操作成功
al = 01H 说明读了1个扇区
编译、连接、调试程序
写扇区:将当前屏幕的内容写到
软盘A
,使用源码文件w2soft.asm
读扇区:将
软盘A
的数据读到内存0000:0200H
处,使用源码文件r2mem.asm
0、开发环境配置
- 必需步骤一,完成后会得到 一台 虚拟机XP
[081][汇编语言]开发环境配置: VMware Workstation + XP + MASM + LINK+DEBUG
https://www.jianshu.com/p/43c8661b381d
-
必需步骤二,完成后可以在 虚拟机XP 内看到 软盘A: 图标
在 VMware Workstation 中创建一个虚拟软盘,并在 Windows XP上使用
https://blog.csdn.net/apollon_krj/article/details/72026944
需要做的事情其实是三件:
① 创建一个软驱 (被虚拟机XP识别为 软驱A:)
② 创建软盘映像文件boot.flp
③ 向软驱插入软盘 (遇到提示 请插入软盘)
1、从 软件VMware 上打开 虚拟机XP,找到 软盘A: ,双击,将其格式化
2、软盘A 格式化完成之后可以查看其属性
3、在CMD.EXE里面 编译 写扇区程序 w2soft.asm
4、可以使用 debug 调试 + G命令运行 写扇区程序 w2soft.exe
5、写扇区程序运行完之后,查看软盘A的属性,会发现属性变化,可用空间为 0KB,说明写扇区成功
6、在CMD.EXE 进行 编译运行 读扇区程序 r2mem.exe
- 首先,由
debug r2mem.exe
进入调试模式; - 接着,由
d 0000:0200H
查看内存单元的数据,目前全部都是零; - 然后,由
g
命令执行程序; - 随后,由
d 0000:0200H
再次查看内存单元的数据,数据出现,读扇区成功。
关于软盘
- B站 [8BIT]老电脑是如何存储的——软盘篇
- 3.5 英寸 软盘
外文名 3.5-inch floppy disk
上下两个面: 面号 0、1号
每个面 80个磁道 : 磁道号 0~79号
每个磁道分为18个扇区:扇区号 1~18号
每个扇区512个字节(KB)
容量
= 2面 * 80磁道 * 18扇区 * 521字节
= 1440 KB
≈ 1.44 MB