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
相关推荐
本文所做的移植也只需要修改uC/OS-II处理器相关代码,一共包括3个文件:OS_CPU.H,...这是移植uC/OS-II到VC下第一个要考虑的问题。在windows的保护模式下不能像DOS下面那么容易,直接通过一个函数调用就能够修改中断。
网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的...
1. C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言...
void *malloc(long numbytes):该函数负责分配 numbytes 大小的内存,并返回指向第一个字节的指针。 void free(void *firstbyte):如果给定一个由先前的 malloc 返回的指针,那么该函数会将分配的空间归还给进程的...
registry.zip 查询修改注册表源代码(40KB)<END><br>22,q1.zip 程序创建两个线程,第一个线程没有消息队列,主线程尝试给第一个线程发送一个消息,我们可以看到PostThreadMessage()返回FALSE,程序创建的第二个...
第1章 计算机应用基础知识概述 第2讲 计算机应用基础知识概述(二) 教学目标及基本要求: 1、掌握计算机软件系统的构成,软件的概念、特点及分类 2、了解指令、语言、程序的概念。 3、掌握计算机的基本工作原理。 ...
第1章 计算机应用基础知识概述 第2讲 计算机应用基础知识概述<二> 教学目标及基本要求: 1、掌握计算机软件系统的构成,软件的概念、特点及分类 2、了解指令、语言、程序的概念。 3、掌握计算机的基本工作原理。 教学...
第1章 计算机应用基础知识概述 第2讲 计算机应用基础知识概述<二> 教学目标与基本要求: 1、掌握计算机软件系统的构成,软件的概念、特点与分类 2、了解指令、语言、程序的概念. 3、掌握计算机的基本工作原理. 教学...
第1章 计算机应用基础知识概述 第2讲 计算机应用基础知识概述(二) 教学目标及基本要求: 1、掌握计算机软件系统的构成,软件的概念、特点及分类 2、了解指令、语言、程序的概念。 3、掌握计算机的基本工作原理。 ...
正确 -----------------选择: ----------------------- 北语15春《计算机科学导论》作业3全文共9页,当前为第1页。 北语15春《计算机科学导论》作业3全文共9页,当前为第2页。 北语15春《计算机科学导论》作业3...
栈: 在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是...
void *malloc(long numbytes):该函数负责分配 numbytes 大小的内存,并返回指向第一个字节的指针。 void free(void *firstbyte):如果给定一个由先前的 malloc 返回的指针,那么该函数会将分配的空间归还给进程...
我可以推荐以下书来创建第一个应用程序 跑步 你可以使用很棒的或者当然是真实设备(只需将EBOOT.pbp复制到/PSP/GAME/YOUR_DIR/ )。 文档 PSPSDK 具有可用于生成文档的代码注释。 只需使用doxygen 。 如果你太懒,...
当前状态:等待支持posix_spawn的新内核 LÖVE是一个很棒的框架,可用于在Lua中...使用源代码发行版时,已经运行了automagic,可以跳过第一步。 苹果系统 从下载所需的框架,并将其放在/Library/Frameworks/ 。 然后,