汇编 --- 从磁盘(扇区2到18)上读取数据到内存中
下面代码读取柱面:0,磁头:0,扇区从2到18的数据到内存 0x8200~0xa3ff处
- 需要明白以下几点:
- 给定柱面,磁头,一个扇形区域是512字节,对应的物理可以理解为512个灯泡组(一个灯泡组有8个小灯泡)
- 确定读取到内存中的位置
- 为什么是0x8200:因为0x8000~0x81ff这512个字节要留给启动区.
- 为什么是0x8000以后,因为这一段内存区域,很少有人使用,故读取到这段内存上出错的机率低
- CH(计数寄存器的高位)用于存储柱面信息
- DH(数据寄存器的高位)用于存储磁头信息
- CL(计数寄存器的低位)存储扇区
- SI(源变址寄存器)用于存储读取磁盘失败的次数
- 根据BIOS提供的信息:
- AH = 0x02 ; 读入磁盘
- AL = 1 ; 一次读取1个扇区
- 系统复位: 复位软盘状态,再读一次
MOV AH,0x0820 MOV DL,0x00 INT 0x13
- SI大于5时,执行error代码段
- JAE(Jump if above or equal):大于等于
CMP SI,5 JAE error
- JNC(Jump if not carry):如果没有出错的话跳到后面的代码段
- next代码段:用于读取下一个磁盘扇形区到内存中
- 一个扇形区域是512B,对应的段地址(es)偏移为0x0020,故使用AX给es加0x0020
总体代码如下
; haribote-ipl
; TAB=4ORG 0x7c00 ; 程序从哪里装入; 以下是对标准FAT12格式软盘的描述JMP entryDB 0x90DB "HARIBOTE" ; 可以自由书写引导扇形区的名称 (8字节)DW 512 ; 1扇区的大小 (必须做成512)DB 1 ; 集群大小 (必须设置在一个扇区)DW 1 ; FAT从哪里开始 (一般从第一个部分开始)DB 2 ; FAT的个数 (必须是2)DW 224 ; 根目录区域的大小 (一般为224条目)DW 2880 ; 这个驱动器的大小 (必须是2880扇区)DB 0xf0 ; 媒体类型 (必须是0xf0)DW 9 ; FAT区域的长度 (必须设置为9个扇区)DW 18 ; 1卡车有几个扇区 (必须是18)DW 2 ; 头数 (必须为2)DD 0 ; 因为不使用分区, 这里一定0DD 2880 ; 再写一次这个驱动器的大小DB 0,0,0x29 ; 预先设置值DD 0xffffffff ; 音量序列号DB "HARIBOTEOS " ; 磁盘名称 (11字节)DB "FAT12 " ; 格式名称 (8字节)RESB 18 ; 暂且空开18字节; 程序主体entry:MOV AX,0 ; 寄存器初始化MOV SS,AXMOV SP,0x7c00MOV DS,AX; 读磁盘MOV AX,0x0820MOV ES,AXMOV CH,0 ; 柱面0MOV DH,0 ; 磁头0 (正面)MOV CL,2 ; 扇区2
readloop: ; 清零失败寄存器MOV SI,0 ; 记录失败次数的寄存器; 重新尝试
retry:MOV AH,0x02 ; AH=0x02 : 读入磁盘(柱面0,磁头0,扇区2)MOV AL,1 ; 1个扇区MOV BX,0MOV DL,0x00 ; A驱动器INT 0X13 ; 调用磁盘BIOS JNC next ; 没出错的话跳转到nextADD SI,1 ; 出错了,SI加1CMP SI,5 ; 比较SI与5JAE error ; SI >=5时, 跳转到error; 复位软盘状态MOV AH,0x00MOV DL,0x00 ; A驱动器INT 0x13 ; 重置驱动器JMP entry; 读取下一个扇区
; CL:扇区号, ES:读入的地址
next:; 把内存地址后移0x200MOV AX,ES ADD AX,0x0020MOV ES,AX ; ES无法直接加 0x020ADD CL,1 ; 往CL里加1; 比较CL与18,如果小于18则跳转到readloopCMP CL,18 JBE readloopfin: HLT ; 让CPU停止, 等待指令JMP fin ; 无限循环error: MOV SI,msg
putloop:MOV AL,[SI]ADD SI,1 ; 给SI加1CMP AL,0JE finMOV AH,0x0e ; 显示一个文字MOV BX,15 ; 指定字符颜色INT 0x10 ; 调用显卡BIOSJMP putloop
msg:DB 0x0a, 0x0a ; 换行2次DB "load error" ;DB 0x0a ; 换行DB 0RESB 0x7dfe-$ ; 用0x00将代码不全至 0x7dfe-$DB 0x55, 0xaa
```
汇编 --- 从磁盘(扇区2到18)上读取数据到内存中相关推荐
- 从服务器获取文件错误,在尝试获取许可证时出现无法从许可证服器上读取数据的错误信息...
Problem [Simplified Chinese] 在尝试获取许可证时遇到FLEXlm -16 "无法从许可证服务器上读取数据"的错误信息. Symptom 完整的错误信息如 ...
- 许可证服务器读取文件时警告错误,在尝试获取许可证时出现无法从许可证服器上读取数据的错误信息...
Problem [Simplified Chinese] 在尝试获取许可证时遇到FLEXlm -16 "无法从许可证服务器上读取数据"的错误信息. Symptom 完整的错误信息如 ...
- 【MQTT】利用MQTT.fx上传数据节点到中移OneNET云平台
在学习使用OneNET云平台过程中,使用MQTT协议向平台上传数据,利用MQTT.fx输入发布tpoic,为了确保设备上传消息确实被平台所接受处理,设备可以订阅系统 topic ,从而获取上传数据点的 ...
- 在 4GB 物理内存的机器上,申请 8G 内存会怎么样?
作者:小林coding 计算机八股文刷题网站:https://xiaolincoding.com/ 大家好,我是小林. 看到读者在群里讨论这些面试题: 其中,第一个问题「在 4GB 物理内存的机器上, ...
- 在 4G 内存的机器上,申请 8G 内存会怎么样?
在 4GB 物理内存的机器上,申请 8G 内存会怎么样? 这个问题在没有前置条件下,就说出答案就是耍流氓.这个问题要考虑三个前置条件: 操作系统是 32 位的,还是 64 位的? 申请完 8G 内存后 ...
- 当小内存遇上大量数据,你该怎么解决这个问题?
作者丨Itamar Turner-Trauring 译者丨夏夜 策划丨万佳 当你写了一个处理数据的软件,它可能在小样本文件上运行地很好,但一旦加载大量真实数据后,这个软件就会崩溃. 问题在于你没有足够 ...
- linux汇编格式化磁盘,如何进行硬盘格式化命令操作【详解】
导语:玩电脑最想要的就是电脑运行流畅,想点哪里点哪里.可是小编的电脑经常会遇到卡屏.电脑反映速度慢的情况,最终小编将电脑抱到修理师那里,修理师说是电脑上硬盘的内存空间太小,被垃圾文件占领了,解决的办法 ...
- python读写磁盘扇区数据_[Win32] 直接读写磁盘扇区(磁盘绝对读写)
正讲着驱动开发呢,这里突然插一篇Win32的博文.事实上.还是做引子,上一篇博文"IRP与派遣函数"中,我们知道了驱动程序须要处理I/O请求.我们先来看看怎么发出一个I/O请求. ...
- windows下修改磁盘扇区数据
Windows系统提供了文件系统,通常应用程序读写文件都是调用CreateFile函数来实现,不会直接读写磁盘数据,但某些特殊目的中,我们需要读取磁盘扇区数据,查看是否包含某些关键字,并且有可能擦除这 ...
最新文章
- Jvm 系列(三):GC 算法 垃圾收集器
- 一步一步学JVM-垃圾回收器
- C# 平时碰见的问题【1】
- Codeforces 864 B Polycarp and Letters 暴力
- java开发利器 源码_Java开发的利器: 反编译工具 JD-GUI
- linux php木马下载,Linux shell快速查找PHP木马
- leaflet-webpack 入门开发系列三地图分屏对比(附源码下载)
- Java实现二叉树的前中后序遍历(Leetcode)
- python连载第12篇 for循环 源码+ 答案
- 一个iOS开发者的Flutter“历险记”
- 从iPhone诞生看物联网 10年后将无所不在
- 睡眠革命——摘抄总结大纲
- JAVA中分号用中文还是英文_【英文中有分号(;)吗?怎么用呢?】作业帮
- 在博客右下角设置透明卡通小美女,附上源码
- To https://gitee.com/xxxx/gittest.git解决方案
- RNA-seq 详细教程:实验设计(2)
- 完整的网络端口表《二》
- 潇洒汽车模具设计,模具与制造
- chrome 实验室
- joomla模板的应用
热门文章
- tftp服务器连接开发板下载内核提示:retry count exceeded; starting again
- java break 在if 中使用_java中使用国密SM4算法详解
- python环境配置opencv_【Python】python2.7 安装配置OpenCV2
- python跨目录调用_python 跨目录访问文件
- python俄罗斯方块课程设计报告_用python实现俄罗斯方块
- 互联网java常用框架_来,带你鸟瞰 Java 中4款常用的并发框架!
- linux 内核空间占用cpu百分比过高,linux下分析java程序占用CPU、内存过高
- 干货 | 深度学习名词表:57个专业术语加相关资料解析(附论文)
- JavaScript字符串、数组、对象方法总结
- jquery 下拉框 select2 运用 笔记