03 2020 档案

摘要:中断和异常的概述 中断(Interrupt) 中断包括硬件中断和软中断。硬件中断是由外围设备发出的中断信号引发的,以请求处理器提供服务。当I/O接口发出中断请求的时候,会被像8259A和I/O APIC这样的中断寄存器手机,并发送给处理器。硬件中断完全是随机产生的,与处理器的执行并不同步。当中断发生 阅读全文
posted @ 2020-03-30 19:27 放飞梦想C 阅读(654) 评论(0) 推荐(0)
摘要:分页机制概述 分页其实就是内存块的映射管理。在我们之前的章节中,我们都是使用的分段管理模式,处理器中负责分段的部件是段部件,段管理机制是Intel处理器最基本的处理机制,在任何时候都是无法关闭的。而当开启了分页管理之后,处理器会把4GB的内存分成长度相同的段,也就是说用长度固定的页来代替长度不一的段 阅读全文
posted @ 2020-03-30 18:56 放飞梦想C 阅读(552) 评论(0) 推荐(0)
摘要:任务切换 任务切换的方法 第一个方法就是借助中断来进行任务切换,这是现代抢占式多任务的基础。在实模式下,内存最低端1KB是中断向量表,保存着256个中断处理过程的段地址和偏移地址。在保护模式下,处理器不再使用中断向量表,而是使用中断描述符表。中段描述符表和GDT,LDT是一样的,用于保存描述符,唯一 阅读全文
posted @ 2020-03-30 18:47 放飞梦想C 阅读(453) 评论(0) 推荐(0)
摘要:任务,任务的LDT和TSS 程序是记录在载体上的指令和数据,其正在执行的一个副本,叫做 任务(Task) 。如果一个程序有多个副本正在内存中运行,那么他对应多个任务,每一个副本都是一个任务。为了有效地在任务之间进行隔离,处理器建议每个任务都应该具有他自己的描述符表,称为 局部描述符表LDT(Loca 阅读全文
posted @ 2020-03-30 18:32 放飞梦想C 阅读(615) 评论(0) 推荐(0)
摘要:内核结构 内核分为四个部分,分别是初始化代码,内核代码,内核数据段和公共例程段,主引导程序也是初始化代码的组成部分。 初始化代码用于从BIOS那里接管处理器和计算机硬件的控制权,安装最基本的段描述符,初始化最初的执行环境。然后,从硬盘上读取和加载内核的剩余部分,创建组成内核的各个内存段。 内核的代码 阅读全文
posted @ 2020-03-30 17:43 放飞梦想C 阅读(595) 评论(0) 推荐(0)
摘要:修改段寄存器时的保护 GDT的基地址和界限,都在寄存器 GDTR 中。描述符在内存中的地址,是用索引号乘以 8,再和描述符表的线性基地址相加得到的,而这个地址必须在描述符表的地址范围内。换句话说,索引号乘以 8 得到的数值,必须位于描述符表的边界范围之内。换句话说,处理器从 GDT 中取某个描述符时 阅读全文
posted @ 2020-03-30 13:12 放飞梦想C 阅读(394) 评论(0) 推荐(0)
摘要:全局描述符 和一个段有关的信息需要 8 个字节来描述,所以称为 段描述符(Segment Descriptor) ,每个段都需要一个描述符。为了存放这些描述符,需要在内存中开辟出一段空间。在这段空间里,所有的描述符都是挨在一起,集中存放的,这就构成一个 描述符表 ,最主要的描述符表是 全局描述符表( 阅读全文
posted @ 2020-03-26 13:32 放飞梦想C 阅读(395) 评论(0) 推荐(0)
摘要:1. IA 32架构的基本执行环境 1.1 寄存器的扩展 为了在汇编语言程序中使用经过 扩展(Extend) 的寄存器: 在32位模式下,为了生成32位物理地址,处理器需要使用32位的指令指针寄存器。标志寄存器也扩展到32位,第16位和原先保持一致。 32位处理器依然需要以段位单位访问内存,即,只分 阅读全文
posted @ 2020-03-24 19:48 放飞梦想C 阅读(623) 评论(0) 推荐(0)
摘要:中断 中断 就是打断处理器当前的执行流程,去执行另外一些和当前工作不相干的指令,执行完之后,还可以返回到原来的程序流程继续执行。 外部硬件中断 顾名思义,外部硬件中断,就是从处理器外面来的中断信号。当外部设备发生错误,或者有数据要传送(比如,从网络中接收到一个针对当前主机的数据包),或者处理器交给它 阅读全文
posted @ 2020-03-23 20:39 放飞梦想C 阅读(756) 评论(0) 推荐(0)
摘要:用户程序的结构 NASM编译器使用汇编指令 SECTION 或者 SEGMENT 来定义段。它的一般格式是: NASM 对段的数量没有限制,不过 Intel 处理器要求段在内存中的其实物理地址起码是 16 字节对齐的。相应的在段定义使用: 为了方便取得该段的汇编地址, NASM 编译器提供了以下的表 阅读全文
posted @ 2020-03-23 17:10 放飞梦想C 阅读(730) 评论(0) 推荐(0)
摘要:Bochs Bochs就像一台真机一样,处理器在加电之后,要开始取指令并执行指令。 如图在左侧显示了该指令所在的物理内存地址 0x0000fffffff0 。 但为什么是 0x0000fffffff0 ?因为和8086不同,现代处理器在加电时,段寄存器CS的内容为,0xF000,指令指针寄存器IP的 阅读全文
posted @ 2020-03-21 17:27 放飞梦想C 阅读(2150) 评论(0) 推荐(0)
摘要:主引导扇区 处理器加电或者复位之后,如果硬盘是首选的启动设备,那么,ROM BIOS将试图读取硬盘的0面0道1扇区。传统上,这就是 主引导扇区(Main Boot Sector,MBR) 。 读取主引导扇区数据有 512 字节, ROM BIOS 程序将它加载到逻辑地址 0x0000:0x7c00 阅读全文
posted @ 2020-03-21 13:16 放飞梦想C 阅读(863) 评论(0) 推荐(1)
摘要:安装环境 以Ubuntu为例,先更新一下: sudo apt-get update sudo apt-get upgrade 然后安装Bochs环境: sudo apt-get install build-essential xorg-dev libgtk2.0-dev 安装NASM NASM官网下 阅读全文
posted @ 2020-03-19 20:05 放飞梦想C 阅读(4929) 评论(2) 推荐(2)
摘要:计算机的加点和复位 在处理器众多的引脚中,有一个是 RESET ,用于接受复位信号。每当处理器加电,或者RESET 引脚的电平由低变高时①,处理器都会执行一个硬件初始化,以及一个可选的内部自测试(Build in Self Test,BIST),然后将内部所有寄存器的内容初始到一个预置的状态。 为了 阅读全文
posted @ 2020-03-17 19:02 放飞梦想C 阅读(449) 评论(0) 推荐(0)
摘要:寄存器和算数逻辑部件 处理器的底部或者四周,有大量的引脚,可以接受从外面来的电信号,或者向外发出电信号。这些引脚有很多,其中一部分用来将参数与运算的数字送入处理器的内部。有些引脚是用来复用的,假如现在要进行加法运算,那么我们要重复使用这些引脚,来依次将被加数和加数送入。 一旦被加数通过引脚送入处理器 阅读全文
posted @ 2020-03-17 18:16 放飞梦想C 阅读(448) 评论(0) 推荐(0)
摘要:二进制到十进制的转换 十进制有 0,1,2,3,4,5,6,7,8,9 二进制有 0,1 由于所处的位置不同,每个数位都有一个不同的放大倍数,称为“权"。每个数位的权是这样计算的:从右向左开始,以基数为底,指数从0开始递增的幂。比如一个二进制数 10110001,它的基数是2,所以要这样计算它等值的 阅读全文
posted @ 2020-03-17 12:22 放飞梦想C 阅读(1134) 评论(0) 推荐(0)
摘要:int9中断例程对键盘输入的处理 键盘输入将引发9号中断,BIOS提供了int9中断例程。CPU在9号中断发生后,执行int 9中断例程,从60h端口读出扫描码,并将其转化为相应的ASCII码或状态信息,存储在内存的指定空间(键盘缓冲区或状态字节)中。 一般的键盘输入,在CPU执行完int 9中断例 阅读全文
posted @ 2020-03-16 21:18 放飞梦想C 阅读(1042) 评论(0) 推荐(0)
摘要:表述了单元长度的标号 在其他段中使用数据标号 直接定址表 1. 自定义(映射)表 自定义(映射)表是一种巧妙的程序设计方法。在程序设计时,我们可以利用各种自定义(映射)表,在两个数据集合之间建立一种映射关系,使得我们可以利用查表的方法,根据给出的数据(输入)得到其在另一个集合中的对应数据(输出)。这 阅读全文
posted @ 2020-03-16 21:03 放飞梦想C 阅读(617) 评论(0) 推荐(0)
摘要:cpu在计算机系统中,除了能够执行命令,进行运算以外,还应该能够对外部设备进行控制,接收它们的输入,向它们进行输出。也就是说,cpu除了有运算能力外,还要有I/O能力。 接口芯片和端口 在PC系统的接口卡和主板上,装有各种接口芯片。这些外设接口芯片的内部有若干寄存器,cpu将这些寄存器当作端口来访问 阅读全文
posted @ 2020-03-16 20:10 放飞梦想C 阅读(439) 评论(0) 推荐(0)
摘要:端口 在PC机系统中,和CPU通过总线相连的芯片除了各种存储器外,还有以下3中芯片。 1. 各种接口卡(比如,网卡,显卡)上的接口芯片,它们控制接口卡进行工作; 2. 主板上的接口芯片,CPU通过它们对部分外设进行访问; 3. 其他芯片,用来存储相关的系统信息,或者进行相关的输入输出处理。 这些芯片 阅读全文
posted @ 2020-03-15 20:34 放飞梦想C 阅读(529) 评论(0) 推荐(0)
摘要:int 指令 int 指令的格式为:int n,n为中断类型码,它的功能是引发终端过程。 CPU执行int n指令,相当于引发一个n号中断的中断过程,执行过程如下。 取中断类型码n; 标志寄存器入栈,IF=0,TF=0; CS,IP入栈; (IP)=(N4),(CS)=(N4+2) 从此转去执行n号 阅读全文
posted @ 2020-03-15 19:43 放飞梦想C 阅读(2111) 评论(0) 推荐(0)
摘要:中断 中断 的意思是指CPU不在接着(刚执行的指令)向下执行,而是转去处理这个特殊信息,而这个特殊的信息我们可以称其为中断信息。 中断信息 是要求CPU马上进行某种处理,并向所要进行的该种处理提供了必备的参数的通知信息。 内中断的产生 对于8086CPU,当CPU内部有下面的情况发生的时候,将产生响 阅读全文
posted @ 2020-03-15 18:56 放飞梦想C 阅读(410) 评论(0) 推荐(0)
摘要:标志寄存器 8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW)。flag寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息。 8086CPU的flag寄存器中的结构如图: ZF 标志 flag的第6位是ZF,零标志位。它记录相关指令执行后,其结果是 阅读全文
posted @ 2020-03-13 18:19 放飞梦想C 阅读(683) 评论(4) 推荐(0)
摘要:call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被共同用来实现子程序的设计。 ret 和 retf ret指令用栈中的数据,修改IP的内容,从而实现近转移; retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移; CPU执行ret指令时,进行下面两步操作: 阅读全文
posted @ 2020-03-12 17:58 放飞梦想C 阅读(1688) 评论(0) 推荐(1)
摘要:转移指令 可以修改IP,或同时修改CS和IP的指令统称为转移指令 。概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令。 8086CPU的转移行为有以下几类。 只修改IP时,称为 段内转移 ,比如:jmp ax 同时修改CS和IP时,称为 段间转移 ,比如:jmp 1000:0。 由于转移 阅读全文
posted @ 2020-03-11 18:31 放飞梦想C 阅读(621) 评论(0) 推荐(0)
摘要:图 1. 图的定义 图(graph) 是由一些 点(vertex) 和这些点之间的连 线(edge) 所组成的;其中,点通常称为 顶点(vertex) ,而点到点之间的连线通常称之为 边 或者 弧(edge) 。通常记为G=(V,E); 要注意的是:线性表可以是空表,树可以是空树,图不可以是空图,图 阅读全文
posted @ 2020-03-11 11:03 放飞梦想C 阅读(1109) 评论(0) 推荐(0)
摘要:5.1 [BX]和内存单元的描述 要完成描述一个内存单元,需要两种信息: 内存单元的地址: 可以用 [0] 表示一个内存单元, 0 表示单元的偏移地址,段地址默认在 ds 中; 同样也可以用 [bx] 表示一个内存单元,它的偏移地址在 bx 中; 内存单元的长度(类型): 将一个内存单元的内容送入 阅读全文
posted @ 2020-03-10 11:35 放飞梦想C 阅读(346) 评论(0) 推荐(0)
摘要:程序的前世今生 4.1 编程 汇编语言程序中,包含两种指令: 汇编指令 :是有对应的机器码的指令,可以被编译为机器指令,最终为 CPU 所执行。 伪指令 :没有对应的机器指令,最终不被 CPU 执行,由编译器来执行,编译器根据伪指令来进行相关的编译工作。 segment 和 ends 是一对成对使用 阅读全文
posted @ 2020-03-10 11:34 放飞梦想C 阅读(230) 评论(0) 推荐(0)
摘要:3.1 字和数据段 1. 字在内存中存储时,要用两个地址连续的内存单元来存放,字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。 2. 用mov指令访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在DS寄存器中。 3. [address]表示一个偏移地址位addres 阅读全文
posted @ 2020-03-10 11:33 放飞梦想C 阅读(479) 评论(0) 推荐(0)
摘要:2.1 通用寄存器 AX, BX, CX, DX 这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。8086CPU这5个寄存器都可以分为两个可以独立使用的8位寄存器来用: AX 可分为 AH 和 AL ; BX 可分为 BH 和 BL ; CX 可分为 CH 和 CL ; DX 可分为 DH 阅读全文
posted @ 2020-03-10 11:32 放飞梦想C 阅读(439) 评论(0) 推荐(0)
摘要:汇编语言 1. 机器语言与机器指令 机器语言 是机器指令的集合。 机器指令 是一台机器可以正确执行的命令。 机器指令 有一串二进制数表示,如010101 汇编语言与汇编指令 汇编语言 的主题是汇编指令。 汇编指令 和机器指令的差别在于指令的表示方法上。 汇编指令 是机器指令便于记忆的书写格式。 汇编 阅读全文
posted @ 2020-03-10 11:31 放飞梦想C 阅读(253) 评论(0) 推荐(0)
摘要:Node.h Node.cpp CMap.h CMap.cpp 阅读全文
posted @ 2020-03-10 11:24 放飞梦想C 阅读(293) 评论(0) 推荐(0)
摘要:树 本质问题 树 不是线性表,是一种描述非线性 层次关系 的数据结构。描述的是一对多的数据结构。 1. 树的定义 树(Tree)的基本概念 树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能 阅读全文
posted @ 2020-03-10 11:23 放飞梦想C 阅读(242) 评论(0) 推荐(0)
摘要:Node.h Node.cpp 源.cpp 阅读全文
posted @ 2020-03-10 11:22 放飞梦想C 阅读(349) 评论(0) 推荐(0)
摘要:.h 文件: .cpp 文件: 阅读全文
posted @ 2020-03-10 11:20 放飞梦想C 阅读(710) 评论(0) 推荐(0)
摘要:cmd 输入输出 首先在编写如 : 生成 cmd.exe, 打开 cmd 并进入到 cmd.exe 的目录 我们可以再新建以个1.txt并在里面输入 123 在cmd窗口中输入: : 是将 1.txt 中输入的数据输出到 cmd.exe 正如代码中的 scanf() 接受 : 是将 cmd.exe 阅读全文
posted @ 2020-03-10 11:17 放飞梦想C 阅读(1132) 评论(0) 推荐(0)
摘要:and和or指令 and 指令:逻辑与指令,按位进行与运算。 例如:and al,11111110B ;将al的第0位设为0。 or 指令:逻辑或指令,按位进行或运算。 例如:or al,00000001B ;将al的第0位设为1。 ASCll码 ASCLL 码就是一种编码方案所谓编码方案,就是一套 阅读全文
posted @ 2020-03-08 15:20 放飞梦想C 阅读(243) 评论(0) 推荐(0)