《操作系统真象还原》第三章----总结(完善MBR)

操作系统真象还原第三章----总结(完善MBR)

启动顺序

BIOS——》MBR—》loder

MBR访问显存

是BIOS虚拟机显示“1 MBR”可以让我们更直观感受到BIOS真的调用了MBR。
代码在书中比较简单,并且后面利用MBR访问硬盘时,正好用到这部分短代码所以就不贴出来了。

描述:MBR在闪烁
MBR访问硬盘
在这里插入图片描述
目的:找到loder程序 将其加载到内存之中。

代码:
-------------boot.inc 代码----------------------

LOADER_BASE_ADDR equ 0x900 ;定义loder在内存中的位置0x900 
LOADER_START_SECTOR equ 0x2 ;定义了loder在硬盘的位置 在第二

扇区
-----------------MBR v3.0________
“先显示1 MBR”,然后调用loader程序

%include "boot.inc"
SECTION MBR vstart=0x7c00
	mov ax,cs
	mov ds,ax
	mov es,ax
	mov ss,ax
	mov fs,ax
	mov sp,0x7c00
	mov ax,0xb800
	mov gs,ax

	mov ax,0600h
	mov bx,0700h
	mov cx,0
	mov dx,184fh

	int 10h;
;输出字符MBR
	mov byte [gs:0x00],'1'
	mov byte [gs:0x01],0xA4
	
	mov byte [gs:0x02],' '
	mov byte [gs:0x03],0xA4
	
	mov byte [gs:0x04],'M'
	mov byte [gs:0x05],0xA4

	mov byte [gs:0x06],'B'
	mov byte [gs:0x07],0xA4
	
	mov byte [gs:0x08],'R'
	mov byte [gs:0x09],0xA4

	mov eax,LOADER_START_SECTOR ;起始扇区的lba地址存入eax中
	mov bx,LOADER_BASE_ADDR ;写入内存的地址 存入bx中
	mov cx,1  ;待写入扇区数
	call rd_disk_m_16 ;跳转到读取程序

	jmp LOADER_BASE_ADDR

;读取硬盘内容的子程序
rd_disk_m_16:
	;设置读取的扇区数
	mov esi,eax
	mov di,cx	;备份
	
	mov dx,0x1f2
	mov al,cl
	out dx,al

	mov eax,esi
	;LBA地址存入0x1f3 - 0x1f6
	mov dx,0x1f3
	out dx,al
;LBA地址15~8位写入端口0x1f3
	mov cl,8
	shr eax,cl
	mov dx,0x1f4
	out dx,al
;LBA地址23~16位写入端口0x1f3
	shr eax,cl
	mov dx,0x1f5
	out dx,al
	
	shr eax,cl
	and al,0x0f
	or al,0xe0
	mov dx,0x1f6
	out dx,al

;在0x1f7端口写入命令
	mov dx,0x1f7
	mov al,0x20
	out dx,al

;检测硬盘的状态
.not_ready:

	nop
	in al,dx
	and al,0x08
	
	cmp al,0x08
	jnz .not_ready
;从0x1f0端口读数据
	mov ax,di
	mov dx,256
	mul dx
	mov cx,ax

	mov dx,0x1f0
.go_on_read:
	in ax,dx
	mov [bx],ax
	add bx,2
	loop .go_on_read
	ret


	times 510-($-$$) db 0
	db 0x55,0xaa

-------------------loader------------------
Loder程序写入硬盘之中,当成功调用loader程序时,将在显示器上显示“2 LODER”,并且是由“1 MBR”跳过来的
%include "boot.inc"

section loader vstart=LOADER_BASE_ADDR


	mov byte [gs:0x00],'2'

	mov byte [gs:0x01],0xA4
	

	mov byte [gs:0x02],' '

	mov byte [gs:0x03],0xA4
	

	mov byte [gs:0x04],'L'

	mov byte [gs:0x05],0xA4


	mov byte [gs:0x06],'O'

	mov byte [gs:0x07],0xA4
	

	mov byte [gs:0x08],'A'

	mov byte [gs:0x09],0xA4


	mov byte [gs:0x0a],'D'
	
	mov byte [gs:0x0b],0xA4

	
	mov byte [gs:0x0c],'E'
	
	mov byte [gs:0x0d],0xA4	
	mov byte [gs:0x0e],'R'	
	mov byte [gs:0x0f],0xA4
jmp $

----------------------------------loader-------------------------
MBR 写入硬盘,再将LOODER程序写入硬盘
–》将mbr.bin 、loder.bin写入硬盘hdM60中
成功运行图片
在这里插入图片描述
描述:从MBR成功跳转到LOADER

外部设备传送数据的方式

1、查询传送方式
2、中断传送方式
3、DMA方式

总结

用了几天刚看完《汇编语言》王爽版的,对于整个汇编指令和偏硬件部分有了深一步的认识,
懂不懂汇编对理解这本书还有代码真的有很大区别,所以强烈建议先去学习汇编在学习这本书,下一步打算看一看x86。难受,上学期学的没好好听,以为不是必修课就不好好学,到头来还得自己补,难受。
在这一章当中,仍旧有很多代码看不懂,限于自己水平有限无法对于代码做出详细解读。
相信自己以后一定会看懂的
加油~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值