实现在实模式硬盘读入内存

mbr.asm

%include "boot.inc"
[org 0x7c00]

mov ax,0
mov ds,ax
mov es,ax
mov ss,ax
mov sp,0x7c00

mov eax,load_sector
mov bx,load_addr
mov cx,1
call read_disk_16

read_disk_16:
    mov esi,eax
    mov di,cx

    mov dx,0x1f2
    mov al,cl
    out dx,al

    mov eax,esi

    mov dx,0x1f3
    out dx,al

    mov cl,8
    shr eax,cl
    mov dx,0x1f4    
    out dx,al

    shr eax,cl
    mov dx,0x1f5
    out dx,al

    shr eax,cl
    and al,0x0f
    or al,0xe0
    mov dx,0x1f6
    out dx,al

.not_ready:
    nop
    in al,dx
    and al,0x88
    cmp al,0x08
    jnz .not_ready

    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




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

boot.inc

load_addr equ 0x900
load_sector equ 1

然后编译

nasm -I include/ -o mbr.bin mbr.asm

写入磁盘镜像

dd if=mbr.bin of=master.img bs=512 count=1 conv=notrunc

书上写的很详细,我就不多说了。浅浅地记录一下我的学习经历。
运行效果:
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值