【问题标题】:ASM - file length and loading to RAMASM - 文件长度和加载到 RAM
【发布时间】:2014-01-04 22:13:35
【问题描述】:

我有带保护模式开关和 Vesa 初始化的 VBR。但是我在另一种情况下看到了这个问题。当内核有3个扇区时,将其加载到内存中并跳转到0x7E00是没有问题的。但是当内核有 4 个或更多扇区时,它的代码停止工作......当我删除了长内核的一些功能以将内核的长度截断为 3 个扇区时 - 代码开始工作。

    mov dl, 0x80            ; 80 - FF => HardDisk
    mov ah, 0x42
    mov si, .kernelStruct
    int 0x13

...

.kernelStruct:

    dw 16               ; byte of structure length + empty byte
    dw sectorsForLoad       ; sectors for load count
    dd Kernel               ; out address
    dq 1                    ; start sector

...

times 510-($-$$) db 0
dw 0xAA55

; kernel code from 0x7E00

times 512 - (($-$$) % 512) db 0
sectorsForLoad equ ($-$$-512) / 512

为什么以及我能做什么?谢谢。

【问题讨论】:

    标签: assembly kernel nasm ram


    【解决方案1】:

    两件事:

    • 堆栈 (SS:SP) 位于何处?也许你从硬盘读取时覆盖了堆栈!例如,如果堆栈位于 0000:8500,就会出现这种情况。
    • 我看到 BIOS 要求 ES 具有与控制结构中给出的地址相同的值,因此 ES 必须等于 [DS:SI+6] 处的字

    【讨论】:

      猜你喜欢
      • 2022-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      相关资源
      最近更新 更多