qemu прочитал сырой диск получил '0' - PullRequest
0 голосов
/ 23 апреля 2020

Я писал ОС раньше, используя bochs. Но когда я положил его в QEMU. Qemu не может прочитать секторы диска в память во время загрузки. Qemu обычно читает сектор (512B) в memroy, но когда читает следующее слово с диска, он получает «0». Это должно быть 'a0e6' (из bochs).

cx = 2 (число секторов), eax = (0x55000), положить начало памяти

    read_disk:
    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

    mov dx, 0x1f7
    mov al, 0x20
    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 [ebx], ax
    add ebx, 2
    loop .go_on_read
    ret

Результат: первый сектор нормальный

сектор сектора ненормальный

Данные нормального сектора в памяти. (в бохах)

Почему так много «0» между первым сектором и вторым сектором? (Аномальное '0' было прочитано с диска. [В ax, dx])

...