gpt4 book ai didi

c - 从引导加载程序运行 C 代码

转载 作者:行者123 更新时间:2023-12-04 00:46:20 27 4
gpt4 key购买 nike

到目前为止,我有一个汇编脚本,可以让您从中启动并将 hello world 写入屏幕。现在我希望能够编写一些 C 代码并能够让我的汇编脚本以某种方式运行它。我为我的编译器使用 mingw gcc。这是我在汇编中的引导加载程序:

 org 7C00h
jmp short Start
Msg: db "Hello, world" EndMsg: Start: mov bx, 000Fh
mov cx, 1
xor dx, dx
mov ds, dx
cld Print: mov si, Msg

Char: mov ah, 2
int 10h
lodsb


mov ah, 9
int 10h
inc dl
cmp dl, 80
jne Skip
xor dl, dl
inc dh
cmp dh, 25
jne Skip
xor dh, dh
Skip: cmp si, EndMsg
jne Char
jmp Print times 0200h - 2 - ($ - $$) db 0
dw 0AA55h

我的问题是如何编译c代码以便汇编脚本执行它?另外,我将如何编辑我当前的引导加载程序以便这成为可能?

最佳答案

首先,您应该选择要使用的编译器并研究其细节。 C 程序可以针对假定标准初始化、main() 作为入口点和标准库的“托管”环境以及不提供此类保证的“独立”环境进行编译。要调用 C 代码,您应该在引导加载程序中进行适当的环境设置(堆栈、数据段等)。这方面的详细信息是特定于编译器的。将目标代码转换为适合您的引导加载程序的形式也可能是个问题。对于 16 位代码,至少有 Turbo C 和 Watcom C 可供免费使用。 Watcom 更加进步和现代,并且现在是开源的。请注意,标准库在此类设置中不可用,因此应专门为您的环境编写 C 代码;这包括水下石头,例如32 位 long 的乘法通常在库中实现,尽管您不编写库调用。

[总的来说,我对您要求精确使用 C 感到困惑;一旦 bootloader 不太可能需要执行速度,使用更适合此类上下文的东西更合适,例如 Forth。已准备好使用实现(请参阅 FreeBSD 引导加载程序)。]

关于c - 从引导加载程序运行 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9677864/

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