【问题标题】:NASM memory not being accessed correctly?NASM 内存没有被正确访问?
【发布时间】:2015-06-15 20:17:20
【问题描述】:

所以我试图在实模式下使用 NASM 打印一个简单的 hello world 字符串。正如您可能通过 org 0000:7C00 定义的那样,它是一个测试引导加载程序。但是,由于某种原因,“Hello World”没有正确打印。在 VirtualBox 和真实硬件中尝试过。

运行时,它最终打印出一堆随机的形状和图形,与真实的字母没有任何相似之处,更不用说“Hello World”了。我认为这与我的段寄存器设置不正确有关,因为我注意到移动 MESSAGE 的定义会改变正在打印的值。我看了这个问题:

Simple NASM "boot program" not accessing memory correctly?

但是我的问题没有答案,我确实将 ds 设置为 0。有什么想法吗?

另外值得注意的是,我正在将它编译成一个平面二进制文件。它最后打印“L”的原因是我知道在它工作之前应该打印的所有内容。或者,我猜在这种情况下,没有。

BITS 16

org 0x0000:7C00

start:
        mov ax, 0
        mov ds, ax
        mov es, ax
        mov fs, ax
        mov gs, ax

        mov ss, ax ;Puts 0 into the segment pointer, we are using real memory.
        mov sp, 0000:7C00 ;Moves 7C00 into the stack pointer, so that all data <7C00 is stack.

        call print_string ;Calls print string.
        jmp Exit


;Prints the test string for now.
print_string:

        mov si, MESSAGE

    .nextChar:

        mov ah, 0x0E
        mov al, [si]
        cmp al, 0x0
        je .end

        int 10h
        add si, 1
        jmp .nextChar
    .end:
        ret


    MESSAGE db "Hello world!", 0

Exit:
    mov ah, 0x0E
    mov al, 'L'
    int 10h  


times 510-($-$$) db 0   ; Pad remainder of boot sector with 0s
dw 0xAA55      ; The standard PC boot signature

【问题讨论】:

  • org 0x0000:7C00 不是有效的语法,尽管 nasm 没有抱怨。你想要的是org 0x7c00mov sp, 0000:7C00 也无效,至少我的 nasm 确实 抱怨这一点。你想要mov sp, 0x7c00 那里。
  • 啊,是的,问题是我正在写这个,因为我现在远离源代码。我知道我的 NASM 根本没有抱怨,所以很可能这就是真正的源代码所说的。我现在编辑它。 (仍然没有解决我遇到的问题,但感谢您的反馈!)
  • 更新后的代码在这里有效。
  • 是的,也许我回家后只能重试。不过,我之前在我的机器上尝试过非常相似的代码,我知道这会打印随机垃圾,这意味着 [MESSAGE] 可能没有指向我认为的内存。如前所述,我确实从内存中编写了这段代码,并且我相当肯定这与家里的代码基本相同。 (除了你提到的错误xD)

标签: memory assembly x86 nasm bootloader


【解决方案1】:

尝试这个来真正停止程序,而不是在最后一个 int 10h

之后执行垃圾
Exit:
mov ah, 0x0E
mov al, 'L'
int 10h

EndlessLoop:
jmp EndlessLoop

【讨论】:

    猜你喜欢
    • 2011-05-16
    • 2011-10-02
    • 2017-12-12
    • 2015-08-07
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    相关资源
    最近更新 更多