相关疑难解决方法(0)

寻找16位x86编译器

我正在研究一个嵌入式系统项目,并遇到了编译器的问题,该编译器以编程方式嵌入到Paradigm C++ IDE中.我希望能够自动化建设.

处理器是AMD186ES.我没有使用操作系统 - 只是裸机的东西.我需要从C++生成实模式16位8086机器代码.

我的谷歌搜索表明G ++可以构建这样的代码.

我的问题是:

可以配置g ++来构建这个机器代码吗?

还有其他C++编译器可以做到吗?

c++ compiler-construction embedded x86-16

12
推荐指数
6
解决办法
1万
查看次数

寻找x86的16位c编译器

我正在努力将uc/OS-II从DOS移植到x86(实模式).我需要:

__PRE__

我想知道是否有任何工具链可以做到这一点.

非常感谢

compiler-construction x86 real-mode

11
推荐指数
1
解决办法
7859
查看次数

在不使用C库的情况下在0xb8000处显示文本视频内存

我一直在用C编写内核.我一直在使用GCC交叉编译器,在Windows系统上编写并以16位实模式为目标.我没有可用于编写内核的C库.我已经开始使用一些代码来假设将字符直接打印到屏幕上.这是一个函数来自kernel.c:

int main()
{
  char *src = (char *)0xB8000000L;
  *src = 'M';
  src += 2;
  *src = 'D';
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用GCC编译了我的代码,并使用参数-m16生成将在实模式下运行的代码.我使用这些命令来生成我的kernel.bin:

gcc -ffreestanding -c -m16 kernel.c -o kernel.o
ld -Ttext 0x10000 -o kernel.pe kernel.o
objcopy -O binary kernel.pe kernel.bin
Run Code Online (Sandbox Code Playgroud)

Stack Overflow用户Michael Petch解决了我的链接器问题,但评论代码本身是不正确的.他发表了这样的评论:

除链接器问题外,您是否尝试将旧的TurboC/MSVC 16位代码转换为GCC?我发现(char*)0xB8000000L可疑.如果它是一个真正的16位C编译器,它可能是好的,如果它是(char far*)0xB8000000L.GCC不是一个真正的16位C编译器,并没有旧式远指针的概念.所以,即使你得到这个代码进行编译,这可能不会做你认为它做的,我假设从-m16选项与GCC你正在尝试创建一个实模式16位内核(而不是保护模式一个) )?

我一直在尝试printf在C中为我自己的操作系统实现自己的类似功能.我上面提供的代码只是我理解的一小部分.我在程序集中创建了一个bootloader(8086).

迈克尔是对的吗?如果是这样,我该如何解决这个问题并直接写入视频内存0xb8000

assembly kernel real-mode osdev x86-16

4
推荐指数
1
解决办法
1349
查看次数