- 浏览: 533017 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (231)
- 一个操作系统的实现 (20)
- 汇编(NASM) (12)
- Linux编程 (11)
- 项目管理 (4)
- 计算机网络 (8)
- 设计模式(抽象&封装) (17)
- 数据结构和算法 (32)
- java基础 (6)
- UML细节 (2)
- C/C++ (31)
- Windows (2)
- 乱七八糟 (13)
- MyLaB (6)
- 系统程序员-成长计划 (8)
- POJ部分题目 (10)
- 数学 (6)
- 分布式 & 云计算 (2)
- python (13)
- 面试 (1)
- 链接、装载与库 (11)
- java并行编程 (3)
- 数据库 (0)
- 体系结构 (3)
- C++ template / STL (4)
- Linux环境和脚本 (6)
最新评论
-
chuanwang66:
默默水塘 写道typedef void(*Fun)(void) ...
C++虚函数表(转) -
默默水塘:
typedef void(*Fun)(void);
C++虚函数表(转) -
lishaoqingmn:
写的很好,例子简单明了,将观察者模式都表达了出来。
这里是ja ...
观察者模式——Observer
参考资料:
http://blog.csdn.net/smallmuou/article/details/6796867
由于后面的汇编中要读取软盘扇区,这里抽空学习一下软盘结构和软盘读取。
1. 软盘结构
1.44MB软盘容量计算:
1.44MB=2(面) * 80(磁道/面) * 18(扇区/磁道) * 512(byte/扇区)
2. 相对扇区号及转换
在系统中,于是可以通过“盘面+磁道+扇区”访问到相应内容,但是这样比较繁琐,于是有了“(相对)扇区号”的概念。(相对)扇区号实际上是从0开始对磁盘上所有扇区进行的编号。
扇区物理号 相对扇区号
0面,0道,1扇区 0
0面,0道,2扇区 1
0面,0道,3扇区 2
…………………….
0面,0道,18扇区 17
1面,0道,1扇区 18
……………
1面,0道,18扇区 35
0面,1道,1扇区 36
...................
0面,1道,18扇区 53
1面,1道,1扇区 54
...................
可见,软盘扇区号不是我们想象的先排完1面,而是交替排列的。也可以认为是先编完0磁道上的扇区号,然后再编完1磁道上的扇区号,...,最后编完79磁道上的扇区号。
调用int 13h读取软盘扇区时,要求通过“指定的扇区号”计算出“柱面号(即磁道号)”、“磁头号(即盘面号)”、“起始扇区号(即是某个磁道上的第几个扇区)”。稍微想想就可以出来了,不必赘述。
3、软盘读写
在系统中,是怎么读和写软盘?
通过BIOS中断13,详细见下图:
其中:
磁盘号:指的是软盘中的磁道或磁柱;
扇区号:指的是软盘的扇区;
CH存放磁道的低8位,CL的高两位存放磁道的高2位,CL的低6位存放扇区
磁头号:指的是软盘中的盘面;
驱动器号:指具体的软盘,如软盘A,软盘B...
CF为1则表示读取错误;
注:读磁盘时,将读到的扇区放到[es:bx]开始的内存中;
写磁盘时,将[es:bx]开始的一个扇区写到磁盘上。
这两处,[es:bx]都称为“数据缓冲区”
4. 实例
;---------------------------------------------------------------------------- ; 函数名: ReadSector ;---------------------------------------------------------------------------- ; 作用: ; 从第 ax 个 Sector 开始, 将 cl 个 Sector 读入 es:bx 中 ReadSector: ; ----------------------------------------------------------------------- ; 怎样由扇区号求扇区在磁盘中的位置 (扇区号 -> 柱面号, 起始扇区, 磁头号) ; ----------------------------------------------------------------------- ; 设扇区号为 x ; ┌ 柱面号 = y >> 1 ; x ┌ 商 y ┤ ; -------------- => ┤ └ 磁头号 = y & 1 ; 每磁道扇区数 │ ; └ 余 z => 起始扇区号 = z + 1 push bp mov bp, sp sub esp, 2 ; 辟出两个字节的堆栈区域保存要读的扇区数: byte [bp-2] mov byte [bp-2], cl push bx ; 保存 bx mov bl, [BPB_SecPerTrk] ; bl: 除数 div bl ; y 在 al 中, z 在 ah 中 inc ah ; z ++ mov cl, ah ; cl <- 起始扇区号 mov dh, al ; dh <- y shr al, 1 ; y >> 1 (其实是 y/BPB_NumHeads, 这里BPB_NumHeads=2) mov ch, al ; ch <- 柱面号 and dh, 1 ; dh & 1 = 磁头号 pop bx ; 恢复 bx ; 至此, "柱面号, 起始扇区, 磁头号" 全部得到 ^^^^^^^^^^^^^^^^^^^^^^^^ mov dl, [BS_DrvNum] ; 驱动器号 (0 表示 A 盘) .GoOnReading: mov ah, 2 ; 读 mov al, byte [bp-2] ; 读 al 个扇区 int 13h jc .GoOnReading ; 如果读取错误 CF 会被置为 1, 这时就不停地读, 直到正确为止 add esp, 2 pop bp ret
发表评论
-
(第三章 8 )特权级——保护模式的特权级检查(DPL,RPL,CPL, 一致代码段,非一致代码段)
2013-03-20 11:14 2312特权级是保护模式下一个重要的概念,CPL,RPL和 ... -
(第6章 1)最简单的进程
2012-10-11 10:56 988第一步——ring0 --> ring1 ... -
(第4章 2)突破512字节的限制
2012-09-15 11:40 2700一、代码 ... -
(第三章 12)中断
2012-09-11 20:20 975一、中断和8259A中断控制器 1. ... -
(第三章 8 )特权级——CPL、DPL、RPL
2012-07-11 10:02 2313很久以后,等我大量翻阅关于“保护模式的特权级检 ... -
(第三章 0)保护模式如何“保护”
2012-03-14 07:59 1046IA32中“保护模式”的“保护”二字理解:(P48) ... -
(第一、二章)nasm的汇编和反汇编
2012-02-27 13:36 4946nasm的汇编和反汇编 步骤: 1. 汇编(bo ... -
(第三章 14)克勤克俭用内存——初始化页目录表、页表,开启分页机制
2011-07-22 11:30 249在启动分页机制SetupPaging之前,先调用了Di ... -
(第三章 13)克勤克俭用内存——查看内存块
2011-07-22 09:25 143[SECTION .data1] ALIGN 32 ... -
(第三章 12)克勤克俭用内存——显示字符串
2011-07-21 16:25 116DispStr调用方法: [SECTION . ... -
(第三章 11)根据自己内存情况 使用分页机制
2011-06-11 15:51 1423一、查看内存分布情况 设置“页目录表”和“页 ... -
参考博客-还有哪些人也在看这本书
2011-06-10 22:46 1324这位很详细: http://www.cnblogs.com/ ... -
(第三章 10)“代码段间跳转” 和 “访问数据段”
2011-06-10 15:40 1335下面说明代码段和数据段的访问: 一、代码段间跳转 ... -
(第三章 9)通过调用门进行有特权级变换的转移(二)
2011-06-08 11:29 191本文展示《(第三章 9)通过调用门进行有特权级变换的转移(一) ... -
(第三章 9)“调用门” 和 “利用调用门在高低特权级的转移”
2011-06-08 10:34 2628在此之前,先要熟悉汇编指令“长/短jmp”、“长/短c ... -
(第三章 7)LDT
2011-06-06 09:49 1474先展示一下效果图: 直接看代码: ... -
(第三章 6)保护模式下,读写大地址内存 & 从32位保护模式跳回16位实模式(二)
2011-06-06 09:15 1438三、关于保护模式和实 ... -
(第三章 5)保护模式下,读写大地址内存 & 从32位保护模式跳回16位实模式(一)
2011-06-05 13:53 2010一、主要功能 ... -
(第三章 3)数据段/代码段描述符
2011-06-05 11:53 2186一、宏定义和属性常量 (代码段/数据段描述符见P32;门描述 ... -
(第三章 4)A20地址线
2011-06-03 20:43 2016A20地址线困惑我了很久,这篇文章终于揭开了这个谜 ...
相关推荐
解压后放入DISK1软盘,然后会提示放入第二张,这时加载DISK2,然后第三张,第四张,第五张,就会提示要不要进入windows,输入WIN,就可以看见windows 1.0开机画面,第二次开机进入dos只要输入WIN就能进入windows1.0...
四塔1.txt 四塔2.txt 回文.txt 图.txt 圆周率.txt 多位阶乘.txt 多位阶乘2.txt 大加数.txt 大小倍约.txt 大整数.txt 字符串查找.txt 字符编辑.txt 字符编辑技术(插入和删除) .txt 完数.txt 定长串....
软盘驱动器基本结构及工作原理.pdf
在原来软件的基础上增加了完全复制软盘至Image文件的功能(其他的功能不变),类似于Linux下的dd命令(自己使用无法完全复制,软盘读取会出错,只能读取580个扇区),在Linux下使用dd命令也只能读取580个扇区,所以是...
Windows95 OSR1 中文软盘镜像,比较稀有,现放上来造福大众。
万能工具软盘,万能工具软盘,万能工具软盘,万能工具软盘
Arduino驱动的软盘控制器和读取器/写入器,用于在旧的AmigaDOS软盘上制作磁盘映像并将其写入旧的AmigaDOS软盘。
Arduino驱动的软盘控制器和读取器,用于从旧的AmigaDOS软盘制作磁盘映像。
市面上已不多见的windows1.0软盘镜像,本人自己将多个软盘中的文件打包制作成了这个文件,可在虚拟机上装载并安装。由于windows3.2及之前版本都是dos下的图形界面程序,所以首先得安装ms-dos,再挂载该软盘镜像,在...
WinHex 是一款以通用的 16 进制编辑器为核心,专门用来对付计算机取证、数据恢复、低级数据处理、以及 IT 安全性、各种日常紧急情况的高级工具: 用来检查和修复各种文件、恢复删除文件、硬盘损坏、数码相机卡损坏...
A操作系统 B诊断程序 C编译程序 计算机应用基础第二章-计算机基础知识(1)全文共6页,当前为第4页。计算机应用基础第二章-计算机基础知识(1)全文共6页,当前为第4页。D目标程序 计算机应用基础第二章-计算机基础知识...
没有软盘照样有用的-虚拟软盘,可以使计算机进入纯的dos环境
DOS7.1软盘版加软盘修复软件,希望对用的着的朋友有帮助。
1581软盘系统,系统的软盘是维护的开发,开发的维护在于软盘的系统
1、联机网络 以单计算机为中心的远程联机系统结构示意图 第四页,共80页。 计算机应用基础第6章(1)全文共80页,当前为第4页。 2、计算机互联网络 以多计算机为中心的网络结构示意图 第五页,共80页。 计算机应用...
《计算机基础与应用》第三章-计算机系统-单项选择题(含答案) ## # # 《计算机基础与应用》第三章-计算机系统-单项选择题(含答案)全文共19页,当前为第1页。《计算机基础与应用》第三章-计算机系统-单项选择题(含答案...
四塔1.txt 四塔2.txt 回文.txt 图.txt 圆周率.txt 多位阶乘.txt 多位阶乘2.txt 大加数.txt 大小倍约.txt 大整数.txt 字符串查找.txt 字符编辑.txt 字符编辑技术(插入和删除) .txt 完数.txt 定长串....
原格式为DISK1-DISK5 共5个文件夹,已使用winImage转换成了软盘镜像,可以供虚拟机DOS系统直接加载使用。先加载DISK1, 命令A: SETUP,按提示再加载其他镜像即可
doc软盘镜像img
dos 6.22 软盘 经典的dos版本