gpt4 book ai didi

assembly - 启动过程中 SP 应该使用哪个值?

转载 作者:行者123 更新时间:2023-12-02 19:25:55 24 4
gpt4 key购买 nike

BIOS 中的 Bootstrap 序列会将其找到的第一个有效 MBR 加载到计算机物理内存的地址 0x7C00 处。

启动过程中 SP 应该使用哪个值?

org 7c00h      ; set location counter.
mov ax, XXX ; What is XXX?
mov sp, ax
; Now PUSH an POP are safe

最佳答案

0000:0500 至 0007:FFFF 保证免费使用。正确的初始化如下所示:

org 0x0600
...

cli
xor ax, ax
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0x7C00

; relocate itself
mov si, sp
mov di, 0x0600
mov cx, 256
rep movsw

; make sure we'are at 0000:0600+x
jmp 0:.reloc
.reloc:
push 2
popf ; flags with all off

我使用7C00,堆栈向下,代码向上。您可以将 7C00 替换为提到的任何有效范围,只需确保不要覆盖您自己的代码/数据。

顺便说一句,大多数 MBR 按照传统会将自身重新定位到 0000:0600,并将 VBR 链式加载到 7C00。

还要注意 jmp .reloc,一些有问题的 BIOS 以 07C0:0000 启动 MBR,因此那里的 jmp 确保 CS=0

关于assembly - 启动过程中 SP 应该使用哪个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10598802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com