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

时间:2012-05-09 20:19:35

标签: c compiler-construction operating-system nasm

本教程介绍如何编写自己的简单操作系统:

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


每件事都没问题,但开发语言就是汇编。我想用C编程语言开发我的简单操作系统。

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

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

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

我甚至不使用任何C标准库stdio.hmath.h。 我想要一个

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

答案 2 :(得分:0)

如果要使用c编写自己的操作系统,请在YouTube上查找Pritam Zope。他精采,并有许多视频介绍如何使用c和asm编写自己的内核和引导加载程序。我也对编写自己的操作系统感兴趣,我进行了一些研究,并决定尽最大努力在asm中工作。如果您有兴趣在asm而不是c中工作,请访问theMike97。这是我在asm中写的一个简单的引导加载程序,以包裹您的兴趣。它只是打印出你好世界。

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

运行