MIT-CS6.828

real mode protected mode and segmentation

MIT-CS6.828

real mode protected mode and segmentation

前言 在操作系统启动时,会先进入实模式(Real Mode),然后再转换为保护模式(Protected Mode),为什么需要这么做?两种模式的寻址方式有何不同?本文通过Intel 8086和Intel 80286分段寻址的不同来解释这两种模式的区别。 Intel 8086 8086被设计为完全的16位处理器,所有的内部寄存器、内部及外部数据总线都是16位宽,不过它具有20位宽的外部地址总线,这意味着它能够寻址2^20=1,048,576个地址,也就是最大能够支持1MB的寻址空间。这里可能会有疑问,刚才不是说8086是16位处理器吗?怎么能够进行20位地址总线寻址呢?这是由于8086处理器支持分段机制(Segmentation),它能够通过16 * Segment + Offset的方式进行寻址,例如Segment为0xf000,Offset为0xfff0,则进行如下转换: 16 * 0xf000 + 0xfff0 = 0xf0000 + 0xfff0 = 0xffff0 Segment为16位的基地址被存储在段寄存器(Segment Registers),O

By FatTiger

MIT-CS6.828

MIT CS6.828-Lab 1: Booting a PC

Lab 1: Booting a PC 基础概念 处理器架构 * i386 i686 x86是同一套指令集,86指这一系列CPU,x则表示i3/i6是不同的处理器型号,x86即泛指i386 i686等,都是32位处理器 * x86_64则为x86的衍生,为x86的64位版本,另外amd64也是一样的东西 * aarch32指armv7处理器架构下的指令集 * aarch64指armv8处理器架构下的指令集 AT&T格式汇编指令介绍 * 基本格式command source, destination,AT&T将源操作数放在第一位,目标操作数放在第二位,这与Intel格式的汇编语法是相反的 * 在寄存器操作数前用%标记,立即操作数前用$标记 * testb/testw/testl s d * test表示对两个操作数进行AND操作,其结果如果为0则将CPU中的ZF标志寄存器设置为1否则清除ZF寄存器的值,即设置为0 * b/w/l为助记符,b用于8位字节值,w用于16位字值,

By FatTiger