ospre 0.1.6

这是一个用于开发64位操作系统的前置工具,用于做boot、loader等工作。它需要你安装nasm编译器才能使用,使用方式请看文档
Documentation
;该文件封装了LBA28读取一个扇区的汇编过程

%ifndef _LBA28_
%define _LBA28_
;参数说明:eax为起始扇区号,ds:ebx为缓冲区地址
read_one_sector:
    push eax
    push ebx
    push ecx
    push edx
    push esi

    mov esi,eax

    mov al,1
    mov dx,0x1f2   ;向端口0x1f2写入读取的扇区数
    out dx,al

    mov eax,esi

    inc dx
    out dx,al      ;向端口0x1f3写入起始扇区号0-7位

    inc dx
    shr eax,8
    out dx,al      ;向端口0x1f4写入起始扇区号8-15位

    inc dx
    shr eax,8
    out dx,al      ;向端口0x1f5写入起始扇区号16-23位

    inc dx
    shr eax,8
    or al,0xe0
    out dx,al      ;向端口0x1f6写入起始扇区号24-31位

    inc dx
    mov al,0x20
    out dx,al      ;向端口0x1f7写入磁盘读取命令0x20

.waits:
    in al,dx
    and al,0x88
    cmp al,0x08
    jne .waits

    mov cx,256
    mov dx,0x1f0

.read_word:
    in ax,dx       ;循环读取512字节
    mov [ebx],ax
    add ebx,2
    loop .read_word

    pop  esi
    pop  edx
    pop  ecx
    pop  ebx
    pop  eax

    ret


%endif