CPU 体系结构相关的问题

news/2024/7/23 22:07:39 标签: 单片机

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

    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) 可以说是最没有规律和难以理解的架构之一,但是仍然在使用,当前最流行。


http://www.niftyadmin.cn/n/1005399.html

相关文章

浅谈基于分项计量的校园能源监管平台解决方案设计

张心志 关注acrelzxz 安科瑞电气股份有限公司 上海嘉定 201801 摘要:伴随着我国经济的飞速发展,国家机关办公建筑和大型公共建筑高耗能的问题日益突出,如何解决建筑能耗己成为一个国家总能耗的重要组成部分。学校是肩负着教育、科研和社会服…

C语言求鸡兔同笼问题案例讲解

前言: 作者本人在今年4月份参加了一个C语言考试,编程大题里有一道鸡兔同笼问题;本来以为简简单单,几分钟搞定,拿个满分;结果翻车了,因为我在考场的时候想着,母鸡到底有几只脚呢&…

git bash下修改GOROOT或GOPATH

参考 goroot和gopath - 哔哩哔哩 goroot标准库路径 gopath依赖库路径 在git bash下可以通过如下命令修改GOROOT和GOPATH go env -w GOROOT"E:/data/code/go"

springboot球赛管理小程序

球赛管理系统 springboot球赛管理系统小程序 java球赛管理小程序 技术: 基于springbootvue小程序球赛管理系统的设计与实现 运行环境: JAVA版本:JDK1.8 IDE类型:IDEA、Eclipse都可运行 数据库类型:MySql(…

基于SpringBoot+vue前后端分离的相机销售系统

文章目录 项目介绍主要功能截图:首页相机详情个人中心 部分代码展示设计总结项目获取方式 🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你…

Service 基础

今天开始来分享Service 的基础知识,后续我们可以慢慢打磨,分享 Service 的进阶知识和原理 Service 基本概念 Service 是 K8S 最核心的概念了 我们可以通过创建 Service ,为一组具有相同功能的容器应用提供一个统一的入口地址,并…

【Linux | Shell命令】Linux 环境变量

目录 一、概述二、什么是环境变量2.1 全局环境变量2.2 局部环境变量 三、设置用户自定义变量3.1 设置局部用户自定义变量 四五 一、概述 Linux 系统中,很多程序和脚本通过环境变量来获取系统信息、存储临时数据和配置信息,了解去哪里设置相应的环境变量很…

2022年系统架构师论文(回忆版)

2022年11月6日,全国计算机等级下半年考试,在疫情压力下如期举行。 北京市软件架构师考试地点在北京市工贸技师学院(机电分院),地址:海淀区北四环北路132号(金泰海博大酒店北侧) 查看…