为什么Bochs在等待软盘响应时无限循环

问题描述

我正在 MacOSX catalina10.15.6 下编写 32位实验性操作系统,并且尝试使用端口 0x1F0 读取软盘〜 0x1F7 加载我的内核。但是有一些错误,所以我不想使用 Bochs 进行调试。但是每次我踏入标签.wait bochs 将永远不会跳出来,它会不断循环。如何获取 Bochs 读取软盘并从此功能read_disk32_lba返回

这是我的.bochsrc

floppya: 1_44=os-image,status=inserted
boot: a
log: log.txt

这是在read.asm中读取磁盘的功能(使用 nasm ):

;read a sector in LBA mode
;@param ds:edi buffer address
;       ebx    the sector index
;       
read_disk32_lba: 
    mov al,1
    mov dx,0x1F2
    out dx,al   ;read one sector

    ;write the sector index to ports
    mov dx,0x1F3
    mov al,bl
    out dx,al

    inc dx      ;0x1F4
    mov al,bh
    out dx,al

    inc dx      ;0x1F5
    shr ebx,16
    mov al,al

    inc dx          ;0x1F6
    mov al,bh
    or al,0xE0     ;use LBA mode to read
    out dx,al

    mov al,0x20
    mov dx,0x1F7
    out dx,al       ;ask for read

    ;wait for a response from the disk
    .waits:
        in al,dx
        mov ah,al
        and ah,0x01
        cmp ah,0x01
        jz .error
        and al,0x88
        cmp al,0x08
        jnz .waits

    ;write dataes to buffer
    mov dx,0x1F0
    mov ecx,256
    .read: 
        in ax,dx
        mov [edi],ax
        add edi,2
        loop .read
    jmp .end

    ;error handling
    .error:
        mov esi,READ_ERROR
        call print_string32
        hlt
    .end:
    ret

READ_ERROR: db 'Kernel read error',0

然后我通过以下方式编译了asm文件

nasm read.asm -f bin -o read.o

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)