【问题标题】:Which C compiler should I use for creating my own simple OS?我应该使用哪个 C 编译器来创建自己的简单操作系统?
【发布时间】:2012-05-09 20:19:34
【问题描述】:

本教程展示了如何编写我自己的简单操作系统:

编写自己的操作系统教程http://joelgompert.com/OS/TableOfContents.htm


一切都很好,但开发语言是汇编。我想用 C 编程语言开发我的简单操作系统。

我想要一个将我的 C 源代码转换为汇编源代码的 C 编译器,然后我使用 NASM 编译汇编文件。

编译器应该可以创建由NASM编译的汇编文件。

使用 GCC (gcc -S OS.c masm=intel) 转换为汇编源文件的 C 源文件在我使用 NASM 编译它们时失败。

我不使用任何 C 标准库,即使是 stdio.hmath.h。 我想要一个编译器,

  • 将 C 源代码转换为汇编源代码。
  • 或从 C 源代码创建平面二进制文件(如 NASMFASM 输出)的编译器。

我应该使用哪个 C 编译器来创建自己的简单操作系统?

【问题讨论】:

  • 在某些时候你会需要汇编程序...有些操作在 C 中实现比在汇编程序中更棘手...(例如进程之间的上下文切换)

标签: c compiler-construction operating-system nasm


【解决方案1】:
【解决方案2】:

根据定义,编译器会将您的高级代码编译为机器语言,即汇编程序。如果您希望能够查看汇编程序,可以使用 GCC 开关来生成汇编程序。使用 GCC 编译 C 代码时,只需使用 -S 开关即可。

【讨论】:

    【解决方案3】:

    如果您想用 c 编写自己的操作系统,请在 YouTube 上查找 Pritam Zope。他很聪明,有很多关于用 c 和 asm 编写自己的内核和引导加载程序的视频。我也对编写自己的操作系统感兴趣,我做了一些研究,并决定最好在 asm 中工作。如果您对使用 asm 而不是 c 感兴趣,还可以查看 theMike97。这是我在 asm 中编写的一个简单的引导加载程序,包含您感兴趣的内容。它只是打印 hello world。

    org 0x7c00
    mov si, message       ;The message location *you can change this*
    call print            ;CALL tells the pc to jump back here when done
    jmp $
    print:
      mov ah, 0Eh         ;Set function
    
    .run:
      lodsb               ;Get the char
    ; cmp al, 0x00        ;I would use this but ya know u dont so use:
      cmp al, 0           ;0 has a HEX code of 0x48 so its not 0x00
      je .done            ;Jump to done if ending code is found
      int 10h             ;Else print
      jmp .run            ; and jump back to .run
    
    .done:
      ret                 ;Return
    
    message           db  'Hello, world', 0 ;IF you use 0x00
    ;message          db  'Hello, world', 0x00
    
    
    times 510-($-$$) db 0
    dw 0xaa55
    ~
    

    将此代码保存在名为 main.asm 的文件中 用nasm -fbin main.asm -o main.bin 编译它 用qemu-system-x86_64 main.bin运行它

    【讨论】:

      猜你喜欢
      • 2011-10-07
      • 2014-04-04
      • 1970-01-01
      • 2018-03-31
      • 2021-09-15
      • 1970-01-01
      • 2012-04-24
      • 2011-04-06
      • 1970-01-01
      相关资源
      最近更新 更多