汇编程序设计与计算机体系结构,《汇编程序设计与计算机体系结构:软件工程师教程》 —2.8 作业...

2023-11-11

2.8 作业

2.8.1 内存

有这样一个算式:taxableIncome = salary - exempts - percent401k / 100 * salary ,其中的变量 salary = 50000,exempts = 7000,percent401k = 4.5。

在配有 Intel Core i7 处理器的系统中,taxableIncome 的值在内存中是怎样表示的?假设该值是从  0x013A32A8h 这一地址开始存放的。

2.8.2 指令执行

假设某程序有 220 条指令。如果把它放在下列三个处理器中运行,那么分别需要多少个时钟周期才能执行完毕?

不支持指令流水线技术的3阶段式处理器

配有 3 层指令流水线的处理器

配有 15 层指令流水线的处理器

2.8.3 输入/输出(挑战题)

如果在 Linux 系统的 /dev/ 目录里执行 ls -la 命令,那么就会输出一份长清单,其中包含一些特殊文件,用以表示连接到该系统的每一个设备,这些文件均带有重要的信息。请通过上网搜索来研究这份清单看看其中涉及几种 I/O 设备,每种设备都是怎样表示的。

第1章与第2章补充材料

与体系结构有关的更多细节

程序加载

第 1 章说过,程序是由一个叫作程序加载器的工具来加载的。加载进来之后,CPU(主要是说它的 eip/rip 寄存器)指向程序的入口点,这个入口点可能叫作 main 或 start 等。下面描述启动程序的一般步骤。当用户开启程序(例如用鼠标双击程序的图标)时:

1. 操作系统把文件的大小以及该文件在磁盘中的物理位置等信息获取出来。

2. 操作系统在内存中寻找合适的地点分配空间,并把必要的信息放在描述符表(descriptor table)中(第 10 章会讲解描述符)。

3. 操作系统开始执行程序的第一条指令(也就是位于入口点的那条指令)。这使程序变为进程,并获得由系统所赋予的 ID。

4. 该进程自行运作,而操作系统则会对进程所发出的资源请求予以响应。

5. 进程结束并让出它所占据的内存。

提高存储器访问速度的措施

第 2 章说过,从主存(也就是 RAM)中读取数据不如从寄存器里读取快,因为后者更接近 ALU,然而程序不太可能把所有数据都放在寄存器里,它还是需要读取主存中的数据,于是,这些年来就产生了下列措施,旨在用更好的办法来执行指令并访问数据,以提升速度。

缓存,可以缓解内存的访问速度较慢这一问题。如果要获取的指令或数据能在缓存中找到,那么就出现了缓存命中现象;若是不能,则称为缓存未命中。此外,指令可以成批地移入缓存或是从缓存里移出。

预取算法(prefetching algorithm)可以根据计算机访问内存的模式把将来有可能需要的指令与数据填充到缓存及预取缓冲中。当前大多数 CPU在流水线里都安排有预解码这一环节。

集成式内存控制器(integrated memory controller)技术把内存控制器整合到 CPU 中,使其与 RAM 之间无须再通过前端总线及北桥来通信。

多核心/多处理器技术使得系统能够把有待执行的指令分布到这些核心及处理器上。

对 CPU 起支持作用的处理器及组件

计算机系统中,有很多处理器及组件负责执行一些特殊的任务以支持 CPU 的工作。下面列出几个值得注意的组件:

浮点运算器(Floating-Point Unit,FPU)。它通常与 CPU 相整合(参见第 6 章)。

时钟发生器:为 CPU 产生时钟信号。

可编程中断控制器(Programmable Interrupt Controller,PIC):处理由键盘、硬盘及其他硬件设备所产生的中断(参见第 10 章)。

可编程间隔计时器:每秒钟把系统中断 18.2 次,用以更新系统时间与时钟、控制系统扬声器,并负责刷新主存。

图形处理器(Graphical Processing Unit,GPU):经过特别设计的处理器,能够高效地处理矩阵及向量并将可视数据显示到屏幕上。

指令流水线技术与多单元的处理器技术

第 2 章说过,指令流水线技术可以同时推进很多条指令处理流程从而提升执行速度。CPU 中通常包含许多单元,例如取指单元、解码单元、执行控制单元、寻址单元、内存控制器、乘法器、移位器、ALU、FPU等。当前的 CPU一般会在每个处理器及内核中配备多个单元。因此,考虑到硬件环境方面的因素,指令流水线技术可以用多种形式来实现。

标量(scalar)处理器每次只处理一份数据(在这里指的是一条指令),因此,执行指令的平均速度大约和时钟的速度一样。

超标量(superscalar)处理器可以同时获取多条指令,并将其派发到多个功能单元上分别执行。这样处理指令的速度要大于时钟的速度。

下面举几个多单元处理器的例子。在处理器的发展过程中,产生了很多种这样的处理器,这里所举的只是其中的几种而已。

范例1:PowerPC 970 有两个 ALU,两个 FPU,两个加载/存储单元,两个 SIMD 单元,而且配有 10 ~ 16 层流水线,各单元的具体层数有所不同。

范例2:Pentium 3处理器有 3 个 ALU,Pentium 4 处理器有两个 ALU(然而每一个的时钟频率都是 P3 ALU 的两倍)。这两种处理器都有 1 个 FPU。

范例3:AMD Athlon 处理器有 3 个 ALU、3 个 AGU(Address-Generation Unit,地址生成单元)及 1 个 FPU。

范例4:Haswell 架构的 Intel Core i7 处理器支持 HyperThreading(超线程)技术,这意味着每个内核在逻辑上相当于两个处理器。4 核 i7 处理器的执行单元共有 8 个“端口”,因此每个时钟周期能够执行 8 条微操作(micro-op)。这种处理器有 4 个 ALU。

输入/输出系统

开发者如果能多了解一些与硬件及设备有关的知识,就可以更好地利用其特性来编写程序并优化程序代码。一般来说,I/O 分为以下三个层级。

应用程序层(Application Level):高级语言的程序库与 API(Application Programming Interface,应用程序编程接口)。

系统层(System Level):用汇编指令来执行系统调用。

UEFI 层(UEFI Level):UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)是一种底层软件,能够直接与硬件通信并提供启动及运行期服务。UEFI 是新式的解决方案,用来替代 BIOS(Basic Input/Output System,基本输入输出系统),它比后者更加先进。

设备驱动程序(Device Driver)包含一些例程,使得操作系统能够直接与硬件通信。

下面举一个例子来演示信息是怎样在整个 I/O 体系的各个层级之间交换的。

1. C++ 程序里有一条用高级语言写成的语句,它调用库函数以便向标准输出端写入字符串,这条语句可以是: cout << “This is string”;。

2. 库函数调用系统例程并把相关的参数(例如字符串的地址与大小)传过去。

3. 系统在执行该例程的时候反复调用设备驱动程序或 UEFI 子例程,并把每个字符的 ASCII/Unicode 码及其颜色传过去。

a.设备驱动程序或 UEFI 子例程收到字符,将其与字体对应起来并把它发送给与视频控制器相连的硬件端口。

b. 视频控制器通过定时的硬件信号把该字符打印到屏幕上。在此过程中,它要控制每个像素应该怎样显示。

c. 系统调用另一个设备驱动程序或 UEFI 子例程将光标推进到下一个位置。

汇编语言很强大,它能够灵活地游走于各个层级。开发者可以在应用程序层调用库函数以执行控制台式的 I/O 或基于文件的 I/O。也可以在操作系统层中通过调用内核来完成这些 I/O 操作。此外,还能在 UEFI 层/设备驱动层中调用相关的函数,以控制与具体设备有关的特性。开发者需要在效率、结果与可移植性等因素之间权衡,以决定自己究竟应该在哪个层面上执行 I/O 操作。本书第 10 章将会讨论这个话题,还会讲解应用程序层面与系统层面的调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汇编程序设计与计算机体系结构,《汇编程序设计与计算机体系结构:软件工程师教程》 —2.8 作业... 的相关文章

  • opencv_contrib-master/modules/xfeatures2d/src/boostdesc.cpp:654:20: fatal error: boostdesc_bgm.i: No

    Hello i have downloaded opencv master and opencv contrib then tried to build opencv contrib using this command cmake DOP
  • Springcloud五大组件

    1 什么是springcloud springcloud是一系列框架的有序集合 它利用springboot的开发便利性巧妙地简化了分布式系统基础设施的开发 如服务发现注册 配置中心 消息总线 负载均衡 断路器 数据监控等 都可以用sprin
  • 提高代码阅读能力的7种方法

    原文 7 Ways to Improve Your Code Reading Skills 作者 A N M Bazlur Rahman 翻译 无阻我飞扬 摘要 随着越来越多的公司使用敏捷开发 能够阅读别人的代码比以往显得更重要 这就需要学
  • Python小项目:利用tkinter开发AI对战井字棋游戏

    文章目录 1 前言 2 代码分模块介绍 2 1 导入需要的库 2 2 定义全局变量 2 2 定义玩家类 2 3 定义页面类 2 4 定义页面变化类以及玩家与AI轮流转换下子权限 2 5 定义判断胜负类 2 6 定义智能AI下子类 3 整体代
  • java util.function.Supplier

    Interface Supplier
  • Java-模板方法设计模式

    Java 模板方法设计模式 1 概念 2 code举例 package p2 public class TemplateTest public static void main String args Template t new SubT
  • Web API-BOM- 操作浏览器

    Window对象 BOM Browser Object Model 是浏览器对象模型 window 对象下包含了 navigator location document history screen 5个属性 即所谓的 BOM 浏览器对象
  • h5手机端及pc端标准文档结构

    pc端
  • 为什么阻抗等于实加虚部呢?为什么有虚部呢,虚部是什么啊?

    为什么阻抗等于实加虚部呢 为什么有虚部呢 虚部是什么啊 2012 09 25 17 16 江山八秀 分类 物理学 浏览372次 提问者采纳 2012 09 25 17 40 电阻用实部表示 电抗用正的虚部表示 电容用负的虚部表示 一个器件的
  • 系列一、Fate简介及基于Docker的单机部署

    一 Fate简介 Fate是一个工业级联邦学习框架 所谓联邦学习指的就是可以联合多方的数据 共同构建一个模型 与传统数据使用方式相比 它不需要聚合各方数据搭建 数据仓库 联邦学习在联合计算建模的过程中 多方机构之间的数据是不会进行共享的 实
  • C++ ofstream和ifstrem

    原文出自 比特网 转载请保留原文链接 http soft chinabyte com database 460 11433960 sh ofstream是从内存到硬盘 ifstream是从硬盘到内存 其实所谓的流缓冲就是内存空间 在C 中
  • 【问题解决】ElasticSearch分页查询时数据顺序错乱/不一致的问题

    问题解决 ElasticSearch分页查询时数据顺序错乱 不一致的问题 问题描述 使用ElasticSearch分页查询时 每次输入同样的分页参数以及查询条件 得到的结果不一致的问题 问题分析 ElasticSearch中索引可能是由多个
  • mysql in 的两种用法

    简述MySQL 的in 的两种用法 他们分别是在 in 关键字后跟一张表 记录集 以及在in后面加上字符串集 先讲后面跟着一张表的 首先阐述三张表的结构 s sno sname sex age dept 学生信息表 c cno cname
  • 并发编程 三 synchronized

    多线程编程中 有可能会出现多个线程同时访问同一个共享 可变资源的情况 这个资源我们称之其为临界资源 这种资源可能是 对象 变量 文件等 由于线程执行的过程是不可控的 所以需要采用同步机制来协同对对象可变状态的访问 实际上 所有的并发模式在解
  • 双线性插值(超级易懂的)

    双线性插值 简介 在两个方向分别进行一次线性插值 首先在一个方向上使用线性插值 然后再在另一个方向上使用线性插值执行双线性插值 尽管每个步骤在采样值和位置上都是线性的 但是插值总体上不是线性的 而是在采样位置上是二次的 作用 一般用于重新采
  • 手把手带你用PyQt5做小型桌面应用

    导语 想制作属于自己的桌面应用程序吗 今天Disen带你手把手入门 桌面应用 什么是桌面应用 即在操作系统的可视化的桌面上 可以运行的程序 比如说QQ 微信 爱奇艺等这些都是桌面应用 早期开发桌面应用 都用哪些语言呢 桌面应用软件 在操作系
  • SpringMVC + ajaxfileupload的多文件上传

    最近做一个springmvc ajax多文件上传 倒腾了下 查阅了部分资料搞定了 现在分享 1 Spring mvc a xml配置

随机推荐

  • 线性代数的本质(Essense Of Linear Algebra)[1]

    论文转载自https blog csdn net wenzhunpu article details 77871631 最近学习了B站上一个关于线性代数的视频Essense Of Linear Algebra 主要从几何方面去讲解 非常形象
  • Hbase集成到Hadoop的一些注意事项

    安装 部署hadoop和hbase的文章网上已经很多了 这里说下自己安装 部署时遇到的 一些问题 1 hadoop env sh的文件里添加 export HADOOP CLASSPATH HBASE HOME hbase 0 20 3 j
  • 华硕主板怎么进入bios

    bios是电脑的基本输入输出系统 有一些电脑系统设置等需要在bios系统内完成 比如说cpu电压 温度等参数设置 磁盘模式修改 硬盘启动项顺序修改等等都是需要bios内完成 有使用华硕电脑的用户不知道华硕主板怎么进入bios 下面小编就教下
  • 联合Java攻城狮社区,推出Java技能树有奖征文活动,期待你的加入

    目录 一 立志存高远 笃行践初心 二 如何学习Java 三 哪吒造Java技能树 1 CSDN官方技能树 2 哪吒造山寨版Java技能树 3 技能树评委 4 通过打榜赢取精美礼物 5 如何参与Java技能树征文活动呢 四 社区版每日一题活动
  • 用户忠诚度:小程序积分商城的用户保持方法

    随着移动互联网的蓬勃发展 小程序积分商城已经成为了许多企业私域营销的热门选择 这个商城不仅可以吸引用户参与 还可以提高用户的忠诚度 进一步加深用户与品牌的互动关系 然而 要实现用户的忠诚度 需要一系列的策略和方法 本文将深入探讨如何通过小程
  • 源码解析Collections.sort ——从一个逃过单测的 bug 说起

    本文从一个小明写的bug 开始 讲bug的发现 排查定位 并由此展开对涉及的算法进行图解分析和源码分析 事情挺曲折的 因为小明的代码是有单测的 让小明更加笃定自己写的没问题 所以在排查的时候 也经历了前世的500年 去排查排序后的list改
  • 【OpenCV】读入数字图像基础操作学习笔记

    目录 读入数字图像 窗口中显示图像 将图像保存到本地 窗口销毁 打开窗口就要销毁 以免影响后续十月 等待输入 读入数字图像 cv2 imread 所需读入的图像的完整路径 若图像在程序下的文件夹下也可直接输入图像名称 读入图像的形式 读入图
  • 深刻理解JNDI

    JNDI是J2EE的核心技术之一 JNDI的功能简单说就是可以简单的方式去查找某种资源 比如在Tomcat中配置了一个JNDI数据源 那么在程序中之需要用Java标准的API就可以查找到这个数据源 以后数据源配置发生变化了 等等 程序都不需
  • 【菜鸟教程】Kafka消息队列入门中(生产者、消费者、数据一致性)

    工作流程 如下图 topicA是一个3分区2副本的topic 2副本表示leader和follower加起来一共为2 注意leader和follower是不在一个broker的 即不在一台服务器 否则服务器故障时会一起挂掉 备份将没有意义
  • 区块链相关术语(中英对照)

    原文链接 https wiki learnblockchain cn bitcoin en zh html 说明 阅读英文文档是编程开发过程中最常做的一件事 英文阅读也是一个程序员的基本能力 区块链刚刚起步 每天各种新概念层出不穷 为方便大
  • springboot 实现切面校验请求参数

    1 定义切面类 package com aa aa pp interceptor import com alibaba fastjson JSON import com alibaba fastjson JSONObject import
  • 二叉树经典题目

    1 判断一个节点是否在一棵二叉树中 先判断是否在左子树 若在 则不再去右子树中寻找 若不在 再去右子树中寻找 要注意递归的条件判断 bool IsInTree Node root Node node if root NULL node NU
  • aardio - 利用web.view2库编写多标签浏览器

    web view2 为风行者封装 请下载最新版本使用 暂时还不是很完善 运行过程中偶尔会出现闪退现象 运行效果 示例代码 import win ui DSG var winform win form text aardio form rig
  • 内网安全-黄金票据和白银票据

    文章目录 前言 黄金票据 原理 应用场景 应用条件 防御 白银票据 原理 应用条件 黄金票据和白银票据的区别 前言 前置知识是需要熟悉Kerberos协议的认证流程 可以看前一篇文章 黄金票据 原理 在熟悉了Kerberos协议的认证流程后
  • java毕业设计球迷信息交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试

    java毕业设计球迷信息交流论坛源码 lw文档 mybatis 系统 mysql数据库 调试 java毕业设计球迷信息交流论坛源码 lw文档 mybatis 系统 mysql数据库 调试 项目架构 B S架构 开发语言 Java语言 开发软
  • WIN11如何设置环境变量

    在win11系统中运行环境 比如node js的时候 我们需要进行额外的参数设置 才能继续进行操作 而这个参数设置就是常说的环境变量设置 那么win11系统的环境变量到底怎么进行配置呢 1 键盘输入 win R 打开运行框 2 输入命令 c
  • (十六)Mybatis整合EhCache缓存框架用法详解

    这篇文章主要讲述Mybatis整合EhCache缓存框架用法详解 写的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着小编来一起学习学习吧 目录 什么是EhCache 代码示例 1 导入第三方缓存包 2 配置缓存元
  • 关于javamail的一些笔记

    1 为什么要学习javamail 企业中系统 经常需要信息通知 和 信息校验 2 利用telnet实现邮件收发 注册sina和sohu账户 yuyang94895 sina com yuyang94895 sohu com 密码 1qaz2
  • unityhub登录不上,登录界面刷新不出来, 或检测不到Unity

    如果是登录界面白屏的话 或 检测不到Unity 可以尝试 1 关闭hub 右下角也要退出 找不到的可以直接任务管理器退出 2 删除 UserProfile AppData Roaming 里面的 UnityHub Cache和 Unity
  • 汇编程序设计与计算机体系结构,《汇编程序设计与计算机体系结构:软件工程师教程》 —2.8 作业...

    2 8 作业 2 8 1 内存 有这样一个算式 taxableIncome salary exempts percent401k 100 salary 其中的变量 salary 50000 exempts 7000 percent401k