`
lobin
  • 浏览: 381101 次
  • 性别: 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下面那么容易,直接通过一个函数调用就能够修改中断。

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

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

    c语言编写单片机技巧

    1. C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言...

    操作系统(内存管理)

    void *malloc(long numbytes):该函数负责分配 numbytes 大小的内存,并返回指向第一个字节的指针。 void free(void *firstbyte):如果给定一个由先前的 malloc 返回的指针,那么该函数会将分配的空间归还给进程的...

    Visual C++ 编程资源大全(源码 系统)

    registry.zip 查询修改注册表源代码(40KB)<END><br>22,q1.zip 程序创建两个线程,第一个线程没有消息队列,主线程尝试给第一个线程发送一个消息,我们可以看到PostThreadMessage()返回FALSE,程序创建的第二个...

    计算机应用基础知识概述(1).doc

    第1章 计算机应用基础知识概述 第2讲 计算机应用基础知识概述(二) 教学目标及基本要求: 1、掌握计算机软件系统的构成,软件的概念、特点及分类 2、了解指令、语言、程序的概念。 3、掌握计算机的基本工作原理。 ...

    计算机应用基础知识概述(3).doc

    第1章 计算机应用基础知识概述 第2讲 计算机应用基础知识概述<二> 教学目标及基本要求: 1、掌握计算机软件系统的构成,软件的概念、特点及分类 2、了解指令、语言、程序的概念。 3、掌握计算机的基本工作原理。 教学...

    计算机应用基础知识概述(2).doc

    第1章 计算机应用基础知识概述 第2讲 计算机应用基础知识概述<二> 教学目标与基本要求: 1、掌握计算机软件系统的构成,软件的概念、特点与分类 2、了解指令、语言、程序的概念. 3、掌握计算机的基本工作原理. 教学...

    计算机应用基础知识概述.doc

    第1章 计算机应用基础知识概述 第2讲 计算机应用基础知识概述(二) 教学目标及基本要求: 1、掌握计算机软件系统的构成,软件的概念、特点及分类 2、了解指令、语言、程序的概念。 3、掌握计算机的基本工作原理。 ...

    北语15春《计算机科学导论》作业3.doc

    正确 -----------------选择: ----------------------- 北语15春《计算机科学导论》作业3全文共9页,当前为第1页。 北语15春《计算机科学导论》作业3全文共9页,当前为第2页。 北语15春《计算机科学导论》作业3...

    java堆栈的区别 -- 详解

    栈: 在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是...

    内存管理内存管理内存管理

    void *malloc(long numbytes):该函数负责分配 numbytes 大小的内存,并返回指向第一个字节的指针。 void free(void *firstbyte):如果给定一个由先前的 malloc 返回的指针,那么该函数会将分配的空间归还给进程...

    psp-developer-guide

    我可以推荐以下书来创建第一个应用程序 跑步 你可以使用很棒的或者当然是真实设备(只需将EBOOT.pbp复制到/PSP/GAME/YOUR_DIR/ )。 文档 PSPSDK 具有可用于生成文档的代码注释。 只需使用doxygen 。 如果你太懒,...

    love-rg350:Lua的RG-350框架

    当前状态:等待支持posix_spawn的新内核 LÖVE是一个很棒的框架,可用于在Lua中...使用源代码发行版时,已经运行了automagic,可以跳过第一步。 苹果系统 从下载所需的框架,并将其放在/Library/Frameworks/ 。 然后,

Global site tag (gtag.js) - Google Analytics