`
lobin
  • 浏览: 427741 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于os的一些整理:第一篇:汇编、C还是C++

 
阅读更多

 

C还是C++

编写os这种系统的话,能选择的编程语言不多,不像开发应用有很多高级高高级的编程语言可以选择。基本只有C和C++可以选择。

 

另外也有一些比较小众的选择,如D语言,这个是一个类C(C-like)语言。如Objective-C,这个是C语言的一个超集,如果采用这个来编写os(尤其是os内核)的话,还不如用C呢。

 

当然也有一些新的选择,如Rust,这个比较新,新出来的相关开发工具还不完善,而且Rust目前还只支持arm架构。

 

所以还是C和C++了。

 

C

这里选择C

 

 

 

汇编

 

GNU AS

 

当然也有其他可以选择的汇编,这里主要是汇编器的选择,如MASM,NASM。这里选择GNU AS。

 

C OOP

 

C-style 汇编

少量代码是需要通过汇编来实现的。包括有些比较核心的逻辑,可以用C实现,刻意使用汇编实现。这部分代码虽然采用汇编实现,也尽量保持C-style。主要包括堆栈维护,栈空间分配,指针参数引用操作(包括in/out),以及参数提升规则等。另外还有比如函数原型声明,结构类型定义,以及包括其他的一些定义,如micro,常量(micro),类型定义,声明等。

 

汇编代码可读性太差,不像C程序,比如函数,我们根据函数原型就基本有个大概了解,包括函数名,参数以及返回值。

 

为了使汇编代码可读性更好点,和C程序一样,有个C头文件,这个和C是一样的。

 

函数原型

 

结构类型定义

 

typedef enum 
{
  v01 = 0x01, 
  v20 = 0x20, 
  v21 = 0x21, 
  v30 = 0x30
} i13_eXver_t;

typedef struct 
{
  i13_eXver_t e_mVer;
  u2 e_support_bitmap;
} i13_eX_t;

 

int i13_eXt(u1 drive, i13_eX_t *e);

 

# param 1: 8(%ebp), drive
# param 2: 12(%ebp), a pointer to struct i13_eX_t, see struct i13_eX_t for details
_i13_eXt:
	pushl %ebp
	movl %esp, %ebp

	movl	8(%ebp), %eax

	movb %al, %dl

	mov $0x41, %ah
	mov $0x55aa, %bx

	int $0x13

	jnc i13_eXt_ok
	mov $1, %eax
	jmp i13_eXt_exit
	
i13_eXt_ok:
	mov 12(%ebp), %esi

	movzbl %ah, %edx
	movl	%edx, (%esi)

	movw %cx, 4(%esi)

	mov $0, %eax
i13_eXt_exit:
	leave
	ret

 

 

汇编 OOP

 

 

 

 

 

分享到:
评论

相关推荐

    ucos ii ucos2 移植到Visual C++ VC平台

    本文所做的移植也只需要修改uC/OS-II处理器相关代码,一共包括3个文件:OS_CPU.H,...这是移植uC/OS-II到VC下第一个要考虑的问题。在windows的保护模式下不能像DOS下面那么容易,直接通过一个函数调用就能够修改中断。

    动手写OS 源代码

    1. **引导加载器**(Bootloader):在操作系统启动时,引导加载器是第一个被执行的程序。它负责将操作系统加载到内存中,通常是通过BIOS或UEFI固件。编写引导加载器需要了解汇编语言和磁盘扇区的组织结构。 2. **...

    SylixOS实验指导书1

    1.5 SylixOS 第一个应用程序 "hello world" 编写"hello world"程序是学习新平台开发的常见做法.在SylixOS上,开发者需要创建一个新的Application工程,然后在源代码中添加打印"hello world"的函数,最后通过IDE进行...

    JFE AND GCC C /C++语言编译器

    标题"JFE AND GCC C/C++语言编译器"指的是一个用于Windows操作系统的C和C++编程工具,其中JFE可能是“Java Front End”的简称,而GCC则是GNU Compiler Collection(GNU编译器集合)的缩写。GCC是一个广泛使用的开源...

    gcc-c++工具rpm 安装包

    标题中的“gcc-c++工具rpm安装包”指的是在Linux系统中用于编译C++程序的GNU Compiler Collection (GCC) 的rpm格式安装包。GCC不仅支持C++,还支持C、Fortran、Ada和Go等多种编程语言,但在这里我们主要关注其C++...

    关于OS开发的小书The Little Book About OS Development

    虽然汇编语言在操作系统开发中占据重要位置,但现代操作系统开发往往还会用到其他高级编程语言,如C/C++。这些语言提供了更好的抽象能力和更高效的开发流程,适合用于编写内核模块、驱动程序等非核心部分。 #### 3....

    w3school c语言教程 飞龙整理 20141103

    在 1978 年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)制作了 C 的第一个公开可用的描述,现在被称为 K&R 标准。 C 语言的特点: * 易于学习 * 结构化语言 * 产生高效率的程序 * 可以...

    为什么做游戏开发要学C++.docx

    2. **《C程序设计》**:谭浩强的这本书是C语言的经典入门教程,掌握C语言是学习C++的基础。 3. **《数据结构(C语言版)》**:严蔚敏和吴伟民的书,深入讲解数据结构,这是所有编程语言中都必不可少的知识,对于...

    OS-dev-Windows-start:教程:在Windows上以汇编语言和CC ++(GCC)进行OS开发入门

    - 引导加载器是操作系统启动的第一部分,它负责加载内核到内存并启动执行。 - 在Windows上,可以使用NASM或MASM这样的汇编语言编译器编写引导加载器。 6. **链接器和装载器**: - 链接器将编译后的对象文件合并...

    C++工程编译选项详解

    ### C++工程编译选项详解 #### 概述 在C++开发过程中,为了更好地控制编译过程,提升编译质量以及程序性能,理解和掌握编译器提供的各种编译选项至关重要。本文旨在详细介绍C++编译器的常用选项及其含义,帮助...

    介绍uC/OS-II移植到VC的pdf

    由于 VC 支持在 C/C++ 代码中嵌入汇编指令,因此无需专门的汇编代码文件,`os_cpu_a.asm` 文件变得多余。因此,在 VC 环境下,我们主要关注 `os_cpu.h` 和 `os_cpu_c.c` 这两个文件。 移植过程中首先需要解决的关键...

    裸机编程指南(ARM微控制器)_C_C++_下载.zip

    2. **启动代码(Bootloader)**:系统上电后执行的第一段代码,负责初始化内存、设置堆栈、加载程序到内存并跳转到C语言的主函数。 3. **中断服务程序(Interrupt Service Routines, ISR)**:处理外部或内部事件的...

    H.264视频编码器的汇编程序级优化

    2. 提高代码的并行度:这与第一点相关联,主要是指在编写汇编代码时,尽可能让多条指令同时执行,减少因等待某一长时延指令而造成的空闲周期。 3. 流水线核心循环的时钟周期数最小化:流水线是处理器提升指令吞吐量...

    UCOS-II在PC上的移植.doc

    - uCOS_II.H、uCOS_II.C、OS_CORE.C、OS_TASK.C、OS_TIME.C、OS_FLAG.C、OS_MBOX.C、OS_MEM.C、OS_MUTEX.C、OS_Q.C、OS_SEM.C:构成UCOS-II核心的源文件。 - PC.C和PC.H:与PC平台相关的程序。 - INCLUDES.H和OS_CFG...

    unix-os教学课件第六章unix系统编程基础-automake.pptx

    - **GCC (GNU C Compiler)**: 是一款广泛使用的开源编译器,支持多种编程语言,包括C、C++等。 - **GCC的工作流程**: - **预处理**: 执行宏替换、条件编译等。 - **编译**: 将源代码转换为汇编代码。 - **汇编**:...

    os.rar_操作系统开发_C/C++__操作系统开发_C/C++_

    1. **引导加载器**:这是操作系统启动的第一部分,通常位于硬盘的MBR(主引导记录)中。它的任务是将操作系统的内核加载到内存并跳转执行。 2. **内核初始化**:内核启动后,会进行一系列的初始化操作,例如设置...

    网管教程 从入门到精通软件篇.txt

    网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的...

Global site tag (gtag.js) - Google Analytics