随笔分类 - 从实模式到保护模式
李忠x86汇编语言从实模式到保护模式
摘要:中断和异常的概述 中断(Interrupt) 中断包括硬件中断和软中断。硬件中断是由外围设备发出的中断信号引发的,以请求处理器提供服务。当I/O接口发出中断请求的时候,会被像8259A和I/O APIC这样的中断寄存器手机,并发送给处理器。硬件中断完全是随机产生的,与处理器的执行并不同步。当中断发生
阅读全文
摘要:分页机制概述 分页其实就是内存块的映射管理。在我们之前的章节中,我们都是使用的分段管理模式,处理器中负责分段的部件是段部件,段管理机制是Intel处理器最基本的处理机制,在任何时候都是无法关闭的。而当开启了分页管理之后,处理器会把4GB的内存分成长度相同的段,也就是说用长度固定的页来代替长度不一的段
阅读全文
摘要:任务切换 任务切换的方法 第一个方法就是借助中断来进行任务切换,这是现代抢占式多任务的基础。在实模式下,内存最低端1KB是中断向量表,保存着256个中断处理过程的段地址和偏移地址。在保护模式下,处理器不再使用中断向量表,而是使用中断描述符表。中段描述符表和GDT,LDT是一样的,用于保存描述符,唯一
阅读全文
摘要:任务,任务的LDT和TSS 程序是记录在载体上的指令和数据,其正在执行的一个副本,叫做 任务(Task) 。如果一个程序有多个副本正在内存中运行,那么他对应多个任务,每一个副本都是一个任务。为了有效地在任务之间进行隔离,处理器建议每个任务都应该具有他自己的描述符表,称为 局部描述符表LDT(Loca
阅读全文
摘要:内核结构 内核分为四个部分,分别是初始化代码,内核代码,内核数据段和公共例程段,主引导程序也是初始化代码的组成部分。 初始化代码用于从BIOS那里接管处理器和计算机硬件的控制权,安装最基本的段描述符,初始化最初的执行环境。然后,从硬盘上读取和加载内核的剩余部分,创建组成内核的各个内存段。 内核的代码
阅读全文
摘要:修改段寄存器时的保护 GDT的基地址和界限,都在寄存器 GDTR 中。描述符在内存中的地址,是用索引号乘以 8,再和描述符表的线性基地址相加得到的,而这个地址必须在描述符表的地址范围内。换句话说,索引号乘以 8 得到的数值,必须位于描述符表的边界范围之内。换句话说,处理器从 GDT 中取某个描述符时
阅读全文
摘要:全局描述符 和一个段有关的信息需要 8 个字节来描述,所以称为 段描述符(Segment Descriptor) ,每个段都需要一个描述符。为了存放这些描述符,需要在内存中开辟出一段空间。在这段空间里,所有的描述符都是挨在一起,集中存放的,这就构成一个 描述符表 ,最主要的描述符表是 全局描述符表(
阅读全文
摘要:1. IA 32架构的基本执行环境 1.1 寄存器的扩展 为了在汇编语言程序中使用经过 扩展(Extend) 的寄存器: 在32位模式下,为了生成32位物理地址,处理器需要使用32位的指令指针寄存器。标志寄存器也扩展到32位,第16位和原先保持一致。 32位处理器依然需要以段位单位访问内存,即,只分
阅读全文
摘要:中断 中断 就是打断处理器当前的执行流程,去执行另外一些和当前工作不相干的指令,执行完之后,还可以返回到原来的程序流程继续执行。 外部硬件中断 顾名思义,外部硬件中断,就是从处理器外面来的中断信号。当外部设备发生错误,或者有数据要传送(比如,从网络中接收到一个针对当前主机的数据包),或者处理器交给它
阅读全文
摘要:用户程序的结构 NASM编译器使用汇编指令 SECTION 或者 SEGMENT 来定义段。它的一般格式是: NASM 对段的数量没有限制,不过 Intel 处理器要求段在内存中的其实物理地址起码是 16 字节对齐的。相应的在段定义使用: 为了方便取得该段的汇编地址, NASM 编译器提供了以下的表
阅读全文
摘要:Bochs Bochs就像一台真机一样,处理器在加电之后,要开始取指令并执行指令。 如图在左侧显示了该指令所在的物理内存地址 0x0000fffffff0 。 但为什么是 0x0000fffffff0 ?因为和8086不同,现代处理器在加电时,段寄存器CS的内容为,0xF000,指令指针寄存器IP的
阅读全文
摘要:主引导扇区 处理器加电或者复位之后,如果硬盘是首选的启动设备,那么,ROM BIOS将试图读取硬盘的0面0道1扇区。传统上,这就是 主引导扇区(Main Boot Sector,MBR) 。 读取主引导扇区数据有 512 字节, ROM BIOS 程序将它加载到逻辑地址 0x0000:0x7c00
阅读全文
摘要:安装环境 以Ubuntu为例,先更新一下: sudo apt-get update sudo apt-get upgrade 然后安装Bochs环境: sudo apt-get install build-essential xorg-dev libgtk2.0-dev 安装NASM NASM官网下
阅读全文
摘要:计算机的加点和复位 在处理器众多的引脚中,有一个是 RESET ,用于接受复位信号。每当处理器加电,或者RESET 引脚的电平由低变高时①,处理器都会执行一个硬件初始化,以及一个可选的内部自测试(Build in Self Test,BIST),然后将内部所有寄存器的内容初始到一个预置的状态。 为了
阅读全文
摘要:寄存器和算数逻辑部件 处理器的底部或者四周,有大量的引脚,可以接受从外面来的电信号,或者向外发出电信号。这些引脚有很多,其中一部分用来将参数与运算的数字送入处理器的内部。有些引脚是用来复用的,假如现在要进行加法运算,那么我们要重复使用这些引脚,来依次将被加数和加数送入。 一旦被加数通过引脚送入处理器
阅读全文
摘要:二进制到十进制的转换 十进制有 0,1,2,3,4,5,6,7,8,9 二进制有 0,1 由于所处的位置不同,每个数位都有一个不同的放大倍数,称为“权"。每个数位的权是这样计算的:从右向左开始,以基数为底,指数从0开始递增的幂。比如一个二进制数 10110001,它的基数是2,所以要这样计算它等值的
阅读全文

浙公网安备 33010602011771号