900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 汇编 --- 从磁盘(扇区2到18)上读取数据到内存中

汇编 --- 从磁盘(扇区2到18)上读取数据到内存中

时间:2023-04-25 22:13:15

相关推荐

汇编 ---  从磁盘(扇区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个扇区 系统复位: 复位软盘状态,再读一次

MOVAH,0x0820MOVDL,0x00INT0x13

SI大于5时,执行error代码段 JAE(Jump if above or equal):大于等于

CMPSI,5JAEerror

JNC(Jump if not carry):如果没有出错的话跳到后面的代码段next代码段:用于读取下一个磁盘扇形区到内存中 一个扇形区域是512B,对应的段地址(es)偏移为0x0020,故使用AX给es加0x0020

总体代码如下

; haribote-ipl; TAB=4ORG0x7c00; 程序从哪里装入; 以下是对标准FAT12格式软盘的描述JMPentryDB0x90DB"HARIBOTE"; 可以自由书写引导扇形区的名称 (8字节)DW512; 1扇区的大小 (必须做成512)DB 1 ; 集群大小 (必须设置在一个扇区)DW1; FAT从哪里开始 (一般从第一个部分开始)DB2; FAT的个数 (必须是2)DW224; 根目录区域的大小 (一般为224条目)DW 2880; 这个驱动器的大小 (必须是2880扇区)DB0xf0; 媒体类型 (必须是0xf0)DW9; FAT区域的长度 (必须设置为9个扇区)DW18; 1卡车有几个扇区 (必须是18)DW2; 头数 (必须为2)DD0; 因为不使用分区, 这里一定0DD 2880; 再写一次这个驱动器的大小DB0,0,0x29; 预先设置值DD0xffffffff; 音量序列号DB"HARIBOTEOS "; 磁盘名称 (11字节)DB"FAT12 "; 格式名称 (8字节)RESB18; 暂且空开18字节; 程序主体entry:MOVAX,0; 寄存器初始化MOV SS,AXMOVSP,0x7c00MOVDS,AX; 读磁盘MOVAX,0x0820MOVES,AXMOVCH,0; 柱面0MOVDH,0; 磁头0 (正面)MOV CL,2; 扇区2readloop:; 清零失败寄存器MOV SI,0; 记录失败次数的寄存器; 重新尝试retry:MOV AH,0x02; AH=0x02 : 读入磁盘(柱面0,磁头0,扇区2)MOV AL,1; 1个扇区MOV BX,0MOVDL,0x00; A驱动器INT0X13; 调用磁盘BIOSJNCnext; 没出错的话跳转到nextADD SI,1; 出错了,SI加1CMPSI,5; 比较SI与5JAEerror; SI >=5时, 跳转到error; 复位软盘状态MOVAH,0x00MOVDL,0x00; A驱动器INT0x13; 重置驱动器JMP entry; 读取下一个扇区; CL:扇区号, ES:读入的地址next:; 把内存地址后移0x200MOVAX,ESADDAX,0x0020MOV ES,AX; ES无法直接加 0x020ADDCL,1; 往CL里加1; 比较CL与18,如果小于18则跳转到readloopCMPCL,18JBEreadloopfin:HLT; 让CPU停止, 等待指令JMPfin; 无限循环error:MOVSI,msgputloop:MOVAL,[SI]ADDSI,1; 给SI加1CMPAL,0JEfinMOVAH,0x0e; 显示一个文字MOVBX,15; 指定字符颜色INT0x10; 调用显卡BIOSJMPputloopmsg:DB0x0a, 0x0a; 换行2次DB"load error";DB0x0a; 换行DB0RESB0x7dfe-$; 用0x00将代码不全至 0x7dfe-$DB0x55, 0xaa```

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。