自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Cdreamfly的博客

学习是一种信仰

  • 博客(28)
  • 资源 (1)
  • 收藏
  • 关注

原创 中断和异常的处理与抢占式多任务

中断和异常的概述**中断(Interrupt)**中断包括硬件中断和软中断。硬件中断是由外围设备发出的中断信号引发的,以请求处理器提供服务。当I/O接口发出中断请求的时候,会被像8259A和I/O APIC这样的中断寄存器手机,并发送给处理器。硬件中断完全是随机产生的,与处理器的执行并不同步。当中断发生的时候,处理器要先执行完当前的指令(指的是正在执行的指令),然后才能对中断进行处理。软中...

2020-03-30 22:42:01 497

原创 分页机制和动态页面分配

分页机制概述  分页其实就是内存块的映射管理。在我们之前的章节中,我们都是使用的分段管理模式,处理器中负责分段的部件是段部件,段管理机制是Intel处理器最基本的处理机制,在任何时候都是无法关闭的。而当开启了分页管理之后,处理器会把4GB的内存分成长度相同的段,也就是说用长度固定的页来代替长度不一的段。页的分配由处理器固件来进行,可以实现非常高效的操作。页的最小单位是4KB,也就是说4GB的内存...

2020-03-30 22:41:12 476

原创 任务切换

任务切换的方法  第一个方法就是借助中断来进行任务切换,这是现代抢占式多任务的基础。在实模式下,内存最低端1KB是中断向量表,保存着256个中断处理过程的段地址和偏移地址。在保护模式下,处理器不再使用中断向量表,而是使用中断描述符表。中段描述符表和GDT,LDT是一样的,用于保存描述符,唯一不同的地方是,他保存的是门描述符,包括中断门,陷阱门和任务门。中断门和陷阱门允许在任务内实施中断处理,转...

2020-03-30 21:22:07 827

原创 任务的隔离和特权级保护

任务,任务的LDT和TSS  程序是记录在载体上的指令和数据,其正在执行的一个副本,叫做任务(Task)。如果一个程序有多个副本正在内存中运行,那么他对应多个任务,每一个副本都是一个任务。为了有效地在任务之间进行隔离,处理器建议每个任务都应该具有他自己的描述符表,称为局部描述符表LDT(Local Descriptor Table)。LDT和GDT一样也是用来储存描述符的,但是LDT是只属于某个...

2020-03-30 18:32:23 289

原创 程序的动态加载和执行

内核结构内核分为四个部分,分别是初始化代码,内核代码,内核数据段和公共例程段,主引导程序也是初始化代码的组成部分。初始化代码用于从BIOS那里接管处理器和计算机硬件的控制权,安装最基本的段描述符,初始化最初的执行环境。然后,从硬盘上读取和加载内核的剩余部分,创建组成内核的各个内存段。内核的代码用于分配内存,读取和加载用户程序,控制用户程序的执行。内核数据段提供了一段可读写的内存空间,供内...

2020-03-30 17:43:43 297

原创 存储器的保护

修改段寄存器时的保护  GDT的基地址和界限,都在寄存器 GDTR 中。描述符在内存中的地址,是用索引号乘以 8,再和描述符表的线性基地址相加得到的,而这个地址必须在描述符表的地址范围内。换句话说,索引号乘以 8 得到的数值,必须位于描述符表的边界范围之内。换句话说,处理器从 GDT 中取某个描述符时,就要求描述符的 8 个字节都在 GDT 边界之内,也就是索引号×8+7 小于等于边界。  ...

2020-03-30 13:13:23 430

原创 进入保护模式

全局描述符  和一个段有关的信息需要 8 个字节来描述,所以称为段描述符(Segment Descriptor),每个段都需要一个描述符。为了存放这些描述符,需要在内存中开辟出一段空间。在这段空间里,所有的描述符都是挨在一起,集中存放的,这就构成一个描述符表,最主要的描述符表是全局描述符表(Global Descriptor Table,GDT)。  为了跟踪全局描述符表,处理器内部有一个 4...

2020-03-26 13:32:40 437

原创 32位x86处理器编程架构

1. IA-32架构的基本执行环境1.1 寄存器的扩展  为了在汇编语言程序中使用经过扩展(Extend) 的寄存器:  在32位模式下,为了生成32位物理地址,处理器需要使用32位的指令指针寄存器。标志寄存器也扩展到32位,第16位和原先保持一致。  32位处理器依然需要以段位单位访问内存,即,只分一个段,段地基地址是0x00000000,段地长度(大小)是4GB。在这种情况下,可以...

2020-03-24 19:48:30 422

原创 中断和动态时钟显示

  中断就是打断处理器当前的执行流程,去执行另外一些和当前工作不相干的指令,执行完之后,还可以返回到原来的程序流程继续执行。外部硬件中断  顾名思义,外部硬件中断,就是从处理器外面来的中断信号。当外部设备发生错误,或者有数据要传送(比如,从网络中接收到一个针对当前主机的数据包),或者处理器交给它的事情处理完了(比如,打印已经完成),它们都会拍一下处理器的肩膀,告诉它应当先把手头上的事情放一放,...

2020-03-23 20:41:31 911 1

原创 硬盘的访问,程序重定位和加载

用户程序的结构  NASM编译器使用汇编指令 SECTION 或者 SEGMENT 来定义段。它的一般格式是:SECTION 段名称;或者SEGMENT 段名称  NASM对段的数量没有限制,不过Intel处理器要求段在内存中的其实物理地址起码是16字节对齐的。相应的在段定义使用:align=子句 ;用于定义某个SECTION的汇编地址对齐方式。  为了方便取得该段的汇编地址,N...

2020-03-23 17:11:29 439

原创 Bochs 调试指令

  Bochs就像一台真机一样,处理器在加电之后,要开始取指令并执行指令。jmpf f000:e05b ;转移目标位置ROM-BIOS  如图在左侧显示了该指令所在的物理内存地址 0x0000fffffff0。  但为什么是0x0000fffffff0?因为和8086不同,现代处理器在加电时,段寄存器CS的内容为,0xF000,指令指针寄存器IP的内容为0xFFF0,这就使得处理器地址线...

2020-03-21 17:28:08 817 2

原创 编写主引导扇区代码

主引导扇区  处理器加电或者复位之后,如果硬盘是首选的启动设备,那么,ROM-BIOS将试图读取硬盘的0面0道1扇区。传统上,这就是主引导扇区(Main Boot Sector,MBR)。  读取主引导扇区数据有512字节,ROM-BIOS程序将它加载到逻辑地址0x0000:0x7c00处,也就是物理地址0x07c00处,然后判断它是否有效。  一个有效的主引导扇区,其最后两个字节应当是0x...

2020-03-21 13:17:11 733

原创 Linux下Bochs,NASM安装和使用

安装环境以Ubuntu为例,先更新一下:sudo apt-get updatesudo apt-get upgrade然后安装Bochs环境:sudo apt-get install build-essential xorg-dev libgtk2.0-dev安装NASMNASM官网下载,这以nasm-2.14.02.tar.gz为例:用tar zxvf nasm-2.14....

2020-03-19 20:06:42 958

原创 计算机的加点和复位和硬盘的的工作原理

计算机的加点和复位  在处理器众多的引脚中,有一个是 RESET,用于接受复位信号。每当处理器加电,或者RESET 引脚的电平由低变高时①,处理器都会执行一个硬件初始化,以及一个可选的内部自测试(Build-in Self-Test,BIST),然后将内部所有寄存器的内容初始到一个预置的状态。  为了节约成本,并提高容量和集成度,在内存中,每个比特的存储都是靠一个极其微小的晶体管,外加一个同样...

2020-03-17 19:02:35 659

原创 处理器,内存和指令

寄存器和算数逻辑部件  处理器的底部或者四周,有大量的引脚,可以接受从外面来的电信号,或者向外发出电信号。这些引脚有很多,其中一部分用来将参数与运算的数字送入处理器的内部。有些引脚是用来复用的。...

2020-03-17 18:16:35 734

原创 进制转换

二进制到十进制的转换十进制有 0,1,2,3,4,5,6,7,8,9二进制有 0,1  由于所处的位置不同,每个数位都有一个不同的放大倍数,称为“权"。每个数位的权是这样计算的:从右向左开始,以基数为底,指数从0开始递增的幂。比如一个二进制数 10110001,它的基数是2,所以要这样计算它等值的十进制数:10110001 = 1×27^77+0×26^66+1×25^55+1×24^...

2020-03-17 12:20:33 2955

原创 汇编语言-使用BIOS进行键盘输入和磁盘读写

int9中断例程对键盘输入的处理  键盘输入将引发9号中断,BIOS提供了int9中断例程。CPU在9号中断发生后,执行int 9中断例程,从60h端口读出扫描码,并将其转化为相应的ASCII码或状态信息,存储在内存的指定空间(键盘缓冲区或状态字节)中。  一般的键盘输入,在CPU执行完int 9中断例程后,都放到了键盘缓冲区中。键盘缓冲区中有16个字单元,可以存储15个按键的扫描码和对应的A...

2020-03-16 21:18:24 1064

原创 汇编语言-直接定址表

表述了单元长度的标号assume cs:codecode segment a dw 1,2,3,4,5,6,7,8 ;a代表了code段的首地址code:00,由于dw,也代表了a开始的这一小段内存都是按照字单元存储的。 ;从code:[0]~code:[15],也就是,a[0]~a[15];a[si]代表了从code:00开始的偏移量为si的内存...

2020-03-16 21:02:49 1380

原创 汇编语言-外中断

  cpu在计算机系统中,除了能够执行命令,进行运算以外,还应该能够对外部设备进行控制,接收它们的输入,向它们进行输出。也就是说,cpu除了有运算能力外,还要有I/O能力。接口芯片和端口  在PC系统的接口卡和主板上,装有各种接口芯片。这些外设接口芯片的内部有若干寄存器,cpu将这些寄存器当作端口来访问。外设的输入不直接送入内存和cpu,而是送入相关的接口芯片和端口中。cpu向外设的输出也不是...

2020-03-16 20:10:38 1161

原创 汇编语言-端口

在PC机系统中,和CPU通过总线相连的芯片除了各种存储器外,还有以下3中芯片。各种接口卡(比如,网卡,显卡)上的接口芯片,它们控制接口卡进行工作;主板上的接口芯片,CPU通过它们对部分外设进行访问;其他芯片,用来存储相关的系统信息,或者进行相关的输入输出处理。这些芯片中,都有一组可以由CPU读写的寄存器。这些寄存器,它们在物理上可能处于不同的芯片中,但它们在以下两点上相同。都和CP...

2020-03-15 20:33:59 1510 1

原创 汇编语言-int指令

int 指令int 指令的格式为:int n,n为中断类型码,它的功能是引发终端过程。CPU执行int n指令,相当于引发一个n号中断的中断过程,执行过程如下。取中断类型码n;标志寄存器入栈,IF=0,TF=0;CS,IP入栈;(IP)=(N4),(CS)=(N4+2)从此转去执行n号中断的中断处理程序。int指令的最终功能和call指令相似,都是调用一段程序。...

2020-03-15 19:43:45 4296

原创 汇编语言-内中断

中断的意思是指CPU不在接着(刚执行的指令)向下执行,而是转去处理这个特殊信息,而这个特殊的信息我们可以称其为中断信息。中断信息是要求CPU马上进行某种处理,并向所要进行的该种处理提供了必备的参数的通知信息。内中断的产生对于8086CPU,当CPU内部有下面的情况发生的时候,将产生响应的中断信息。除法错误,比如,执行div指令产生的除法溢出;单步执行;执行into指令;执行int指令...

2020-03-15 18:55:58 787

原创 汇编语言-标志寄存器

8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW)。flag寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息。8086CPU的flag寄存器中的结构如图:ZF 标志flag的第6位是ZF,零标志位。它记录相关指令执行后,其结果是否为0.如果结果为0,那么zf=1;如果结果不为0,那么zf=0。在8086CPU的指令集中,有的指令的执...

2020-03-13 18:19:29 1938

原创 汇编语言-call和ret指令

call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被共同用来实现子程序的设计。ret 和 retfret指令用栈中的数据,修改IP的内容,从而实现近转移;retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移;CPU执行ret指令时,进行下面两步操作:(ip)=((ss)*16+(sp))(sp)=(sp)+2CPU执行retf指令时,进行下...

2020-03-12 17:57:55 1612

原创 汇编语言-转移指令

可以修改IP,或同时修改CS和IP的指令统称为转移指令。概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令。8086CPU的转移行为有以下几类。只修改IP时,称为段内转移,比如:jmp ax同时修改CS和IP时,称为段间转移,比如:jmp 1000:0。由于转移指令对IP的修改范围不同,段内转移又分为:短转移和近转移。短转移IP的修改范围为 -128~127。近转移IP...

2020-03-11 18:31:37 1088

原创 汇编语言-寻址和处理数据

and和or指令and 指令:逻辑与指令,按位进行与运算。例如:and al,11111110B ;将al的第0位设为0。or 指令:逻辑或指令,按位进行或运算。例如:or al,00000001B ;将al的第0位设为1。ASCll码ASCLL码就是一种编码方案所谓编码方案,就是一套规则,它约定了用什么样的信息来表示现实对象。比如说,我们按下键盘的 a 键,这个...

2020-03-08 15:16:30 614

原创 汇编语言-[bx]和loop指令和多个段

5.1 [BX]和内存单元的描述要完成描述一个内存单元,需要两种信息:内存单元的地址:可以用 [0] 表示一个内存单元, 0 表示单元的偏移地址,段地址默认在 ds 中;同样也可以用 [bx] 表示一个内存单元,它的偏移地址在 bx 中;内存单元的长度(类型):将一个内存单元的内容送入 ax ,这个内存单元的长度就为 2 字节(字单元),存放一个字;将一个内存单元的内容...

2020-03-03 22:50:18 466

原创 汇编语言-程序的前世今生

4.1 编程汇编语言程序中,包含两种指令:汇编指令:是有对应的机器码的指令,可以被编译为机器指令,最终为CPU所执行。伪指令:没有对应的机器指令,最终不被CPU执行,由编译器来执行,编译器根据伪指令来进行相关的编译工作。segment 和 ends 是一对成对使用的伪指令,这是在写可被编译的汇编程序时,必须要用到的一对伪指令。segment 和 ends 的功能是定义一个段,s...

2020-03-01 21:51:42 495

nasm-2.14.02.tar.gz

nasm汇编编译器,适用于

2020-03-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除