CPU 体系结构相关的问题

连接器和加载器,以及编译器和汇编器,都需要考虑很多与体系结构配合的细节,包括硬件的体系结构细节,也包括目标代码运行环境的操作系统在体系结构方面的约定,本章中我们呢涉及很多计算机体系结构的知识。 硬件习题结构有两个方面的问题影响到了连接器,寻址方式和指令格式,连接器有一个很重要的任务就是修改内存数据和指令中的地址偏移,无论修改的是数据还是指令,连接器必须确保修改符号符合计算机使用的寻址方式,当修改指令时还需要进一步确保修改的结果不是一条无效指令。

    2.1 应用程序二进制接口

    每一个操作为运行在该系统上的应用程序提供一套应用程序二进制接口(ABI),ABI中描述了应用程序在这个系统上运行时必须遵守的编程约定,通常来说,ABI中会包含一系列的系统调用和使用这些系统调用的方法,可供程序使用的内存地址空间,以及处理器中寄存器的使用规定等等,从应用程序的角度来看,ABI描述了操作系统的约束又描述了硬件体系结构的结束。在很多情况下,连接器为了遵守ABI的约定需要进行一些重要的工作,有的系统ABI要求每个应用程序必须包含一个地址描述表,用于存储程序中函数使用到静态数据的地址,那么连接器必须创建这个表,扫描收集所有链接到程序中的模块,收集这些地址信息,ABI对连接器最大的影响事关于过程调用的标准格式定义。

2.2 内存地址

    每个计算机都有主存储器,主存是一块连续的存储空间,我们为每一个存储单元分配一个数字当作它的地址,从0开始,地址的最大值由地址线的位数决定。

字节序列和对齐

    每个存储单元都是由固定数量的二进制数位组成,在过去50年的发展中出现过多种多样的计算机系统,从1位为一个单元到由64位为一个单元的都有,所有的产品化的计算机都把8位当作一个字节,字节当作最小的编址单元。

   大端和小端。

   两种方案的优缺点引起了激烈的讨论,持续了很多年,一个新产品的字节序选择,主要考虑的是对旧的系统的兼容,因为在两台字节序相同的机器之间移植程序和迁移数据,显然要比不同字节序的机器容易得多。

   为了方便访问,多字节数据需要对齐到特定的边界上,比如4字节的数据需要对齐到4字节的边界上,2 字节也要对齐到2字节边界上,以此类推,另一种描述这个问题的说法是,任何N字节数据的地址至少要有log2N个低位位0,在某些系统上,x86, DEC VAX IBM,访问未对齐数据会导致程序故障,对于那些访问未对齐的数据不会导致系统故障,性能的损失非常大,因此我们需要在编译和链接阶段多话费一些精力来尽可能的保持地址对齐。

    很多处理器还要求程序指令放在对齐的低智商,例如多数RISC芯片要求指令也必须存放地址在4字节对齐的地址上。

    每种体系结构都定义一系列寄存器,寄存器是一些固定长度的高速存储单元,在编程过程中程序指令可以使用寄存器的名称来直接访问它们,某些RISC架构设计处理器有32个,寄存器的位数基本上会和程序地址的位数相同,就是说在一个32位地址的系统中寄存器通常是32位的,64位系统上,寄存器通常是64位的。

   2.3 地址构成规则

   计算机执行程序的过程,就是根据程序中的指令来读写内存中的数据的过程,而程序的指令本身也存储在内存中,但是程序的指令和数据会保存在内存的不同区域,逻辑上说,指令一般按照他们的存储顺序执行,但是有专门的指令用来跳转。在程序紫红会大量的用到地址,每个计算指令都可能用到地址,用来标识要加载的数据或者写入数据在内存中的位置,每个跳转指令都会用到地址,用来标识吓一跳指令在内存中的位置等。

   经过多年的研究,计算机的设计者们提出了各种不同的寻址策略,复杂度越来越高,但是大多数产品化的计算机使用了一套非常简单的寻址策略,我们主要对下面三种结构进行分析。

 IBM, 这是最古老的处理器架构,目前仍然在使用,虽然过去了35年,但是它的设计仍然简洁明了,并且实现出来的芯片仍然能与现代的RISC芯片性能相当。

SPARC V8和V9 V8使用32位寻址,v9使用64位,

Intel i386/486/Pentium(x86) 可以说是最没有规律和难以理解的架构之一,但是仍然在使用,当前最流行。

你可能感兴趣的:(单片机)