计算机常识汇总

2018-03-18  本文已影响0人  gaosiyan

硬件结构框架

  PC中最重要的三个部件分别是CPU,内存,I/O控制器;基于C或者汇编语言写底层程序时,需要了解这三部分(对于更高级的程序语言,比如java等是基于一个抽象的虚拟机进行编程的,物理机器的相关细节甚至包括操作系统都通过虚拟机进行了屏蔽).

三个部件的组织形式.

  早期的PC,CPU和内存的工作频率基本一致,并且也没有太多的IO设备,所以所有设备通过一条总线挂在一起,如下图:



  后来由于CPU频率不断提升,导致内存频率跟不上CPU的频率,所以产生了和内存频率(即CPU的外频)一样的系统总线,同时图形设备也需要和CPU以及内存进行大量的数据交换.另外相对于这些高速设备还有一些低速设备,比如磁盘,USB等设备.如果这些设备和前面一样直接连接在一条总线上,硬件设计就会很复杂,所以对总线进行了分级设计,就是南北桥设计.南桥用于高速设备,基于PCI结构,北桥用于低速设备,基于ISA结构.如下图:


操作系统

操作系统的作用:

很多复杂性的工程问题,都可以通过分层的思想来降低复杂度。操作系统也是类似。操作系统和应用软件以及硬件的关系如下图:


发展过程:

CPU的大小端模式

大小端模式是CPU的硬件属性,Inter是小端模式,一般嵌入式是大段模式。大段模式和小段模式的CPU,存放数据方式如下:



对于32bit数据0x12345678,的实际存放如上图,16bit数据类似,但是8bit数据没有区别。也就是说:
小端模式,低地址存放低有效位,更符合逻辑;
大段模式,低地址存放高有效位,查看内存更为方便,因为内存低地址在前面。

函数调用过程

IA32中用程序栈来支持函数(过程)调用,栈主要特性是“后进先出”的一个单向队列,只能对栈顶进行操作,数据压入栈顶,弹出栈顶的数据。并且在IA32中,栈顶是低地址,栈底是高地址,esp寄存器永远指向栈顶。如下为一个栈的原始结构:

用pushl %eax,将%eax寄存器中的内容压入栈中(注意pushl是32bit压栈),执行效果如下:


对于上面的单个压栈指令pushl %eax,实际上等同于,下面两条指令:

subl $4,%esp ;栈顶指针%esp = %esp-4
movl %eax,(%esp) ;数据移动

popl出栈指令,与压栈指令的过程刚好相反。

上一篇下一篇

猜你喜欢

热点阅读