下面将要介绍的是一组非常非常重要的寄存器,即 CS:IP . CS:IP 两个寄存器指示了 CPU 当前将要读取的指令的地址,其中 CS 为代码段寄存器,而 IP 为指令指针寄存器 . 什么叫做指示了 CPU 当前将要读取的指令呢?在 8086 CPU 中,为什么 CPU 会自动的执行指令呢? 这些指令肯定是存放在内存中的,但是 CPU 怎么知道这些指令存放在内存的那个位置呢? 比如,我有下面的两条指令要执行: MOV AX,1234H MOV BX,AX 而假设这两条指令在内存…
2.3 Registers 寄存器 The 80386 contains a total of sixteen registers that are of interest to the applications programmer. As Figure 2-5 shows, these registers may be grouped into these basic categories: 80386包含对应用程序有用的寄存器16个.正如图2-5所示的那样,这些寄存器可以被分成以下几类:…
不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 16 位代码,这个话题确实有点复古,所以能找到的资料也相应较少.要运行 x86 实模式的程序,目前我知道的只有两种方式,一种是使用 DOS 系统,另一种是把它写成引导扇区的代码,在系统启动时直接运行.很显然,许多讲自己实现操作系统的书籍都会讲到 x86 实模式,也只有自己实现操作系统引导的朋友需要…
Appendix B 附录 B Figure B-1 The relationship between logical, linear, and physical addresses. 图B-1:逻辑地址.线性地址以及物理地址的关系图 The boot loader 系统启动器 When an x86 PC boots, it starts executing a program called the BIOS, which is stored in non-volatile memory on…
Introduction 在这个实验中,我们将实现操作系统的一些基本功能,来实现用户环境下的进程的正常运行.你将会加强JOS内核的功能,为它增添一些重要的数据结构,用来记录用户进程环境的一些信息:创建一个单一的用户环境,并且加载一个程序运行它.你也可以让JOS内核能够完成用户环境所作出的任何系统调用,以及处理用户环境产生的各种异常. Part A: User Environments and Exception Handling 新包含的文件inc/env.h里面包含了JOS内核的有关用户环境(…
注:源代码参见我的github: https://github.com/YaoZengzeng/jos Part A : User Environments and Exception Handling User Exception: 1.kernel维护了以下三个全局变量和environment有关的全局变量 struct Env *envs = NULL; // All environments struct Env *curenv = NULL; // The current env --…