既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
计算机语言的发展经历了面向机器的机器语言和汇编语言、面向问题的高级语言。其中高级语言的发展真正促进了软件的发展,它经历了从科学计算和工程计算的 FORTRAN、结构化程序设计的 PASCAL到面向对象的C++和适应网络环境的Java。
同时,直接影响计算机系统性能提升的各种系统软件也有了长足的发展,特别是操作系统,如 Windows、UNIX、 Linux等。
1.1.3 计算机的分类与发展方向
可以分为:
- 电子模拟计算机和电子数字计算机。
数字计算机又可以按照用途分为:
- 专用计算机和通用计算机
- 通用计算机又分为:巨型机、大型机、中型机、小型机、微型机和单片机6类。
按照指令和数据流可以分为:
- 单指令流和单数据流系统(SISD),即传统的冯·诺依曼体系结构。
- 单指令流和多数据流系统(SIMD),包括阵列处理器和向量处理器系统。
- 多指令流和单数据流系统(MISD),这种计算机实际上不存在。
- 多指令流和多数据流系统(MIMD),包括多处理器和计算机系统。
1.2 计算机系统层次结构
1.2.1计算机系统的组成
计算机系统由硬件系统和软件系统共同构建起来
1.2.2 计算机硬件的基本组成
1.早期的冯·诺依曼机
美籍匈牙利科学家冯·诺依曼最先提出“程序存储”的思想,并成功将其运用在计算机的设计之中,根据这一原理制造的计算机被称为冯·诺依曼结构计算机。由于他对现代计算机技术的突出贡献,因此冯·诺依曼又被称为“现代计算机之父”。
什么是存储程序原理?按此原理,计算机应具有哪几大功能?
“程序存储”:指令以代码的形式事先输入到计算机的主存储器中,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。即按地址访问并顺序执行指令
计算机按照此原理应具有5大功能:数据传送功能、数据存储功能、数据处理功能、操作控制功能、操作判断功能
- 冯诺曼体系结构特点:
- 计算机硬件系统由五大部件组成(存储器、运算器、控制器、输出设备、输入设备)
- 指令和数据以同等地位存于存储器,可按地址寻访
- 指令和数据用二进制表示
- 指令由操作码和地址码组成
- 存储程序
- 以运算器为中心
早期的冯·诺依曼机以运算器为中心,且是单处理机,最根本的特征是采用“存储程序”原理,基本工作方式是控制流驱动方式!
2.现代计算机的组织结构
3.计算机的功能部件
主机:主存、运算器、控制器
五大部分:
- <1> 输入设备,是指将外部信息以计算机能读懂的方式输入进来,如键盘,鼠标等
- <2> 输出设备,就是将计算机处理的信息以人所能接受的方式输出出来,比如显示屏,打印机。
- <3> 存储器,存储器分为 主存储器(内存储器,CPU能直接访问)和 辅助存储器(外存储器,协助主存储器记忆更多的信息,辅助存储器的信息需要导入到主存储器中,才可以被CPU访问)。
主存储器的工作方式是按存储单元的地址进行存取,这种存取方式称为按地址存取方式(相联存储器既可以既可以按照地址寻址,又可以按照内容寻址,为了与传统存储器区别,又称为内容寻址的存储器!)
主存储器是由地址寄存器(MAR),数据寄存器(MDR),存储体,时序控制逻辑,地址寄存器存放访存地址,经过地址译码后找到所选的存储单元。数据寄存器,是存储器与其他部件的中介,用于暂存要从存储器读或写的信息。时序控制逻辑用于产生存储器操作所需的各种时序信号。在现代CPU,MAR和MDR是在CPU中的。
- <4> 运算器,是计算机的运算单元,用于算术运算和逻辑运算
运算器的核心单元是算术逻辑单元(ALU)
- <5> 控制器,控制器是计算机的指挥中心,有其指挥各部件自动协调第进行工作,现代计算机将运算器和控制器集成到一个芯片上,合成为中央处理器,简称CPU。有程序计数器(PC)、指令寄存器(IR)和控制单元(CU)。
一般将运算器和控制器集成到同一个芯片上,称为中央处理器(CPU)。CPU和主存储器共同构成主机,而除主机外的其他硬件装置(外存、I/O设备等)统称为外部设备,简称外设。
图1.4所示为冯・诺依曼结构的模型机。CPU包含ALU、通用寄存器组GPRs、标志寄存器、控制器、指令寄存器IR、程序计数器PC、存储器地址寄存器MAR和存储器数据寄存器MDR。图中从控制器送出的虚线就是控制信号,可以控制如何修改PC以得到下一条指令的地址,可以控制ALU执行什么运算,可以控制主存是进行读操作还是写操作(读/写控制信号)。
CPU和主存之间通过一组总线相连,总线中有地址、控制和数据3组信号线。MAR中的地址信息会直接送到地址线上,用于指向读/写操作的主存存储单元;控制线中有读/写信号线,指出数据是从CPU写入主存还是从主存读出到CPU,根据是读操作还是写操作来控制将MDR中的数据是直接送到数据线上还是将数据线上的数据接收到MDR中。
1.2.3 计算机软件的分类
1.系统软件和应用软件
计算机软件,一般分为系统软件和应用软件
- 系统软件包括 操作系统,数据库管理系统,语言处理系统(比如编译器),分布式软件系统,网络软件系统,标准库系统,服务性系统(比如连接程序)。
- 应用软件包括各种科学计算类程序,工程设计类程序,数据统计与处理程序。
注意:数据库管理系统和数据库系统是有区别的。数据库管理系统是系统软件。而数据库系统一般是由数据库,数据库管理系统,数据库管理员和应用系统构成。所以只能说它里面有系统软件,但并不能说它为系统软件。
2.三个级别的语言
- 1)机器语言。又称二进制代码语言,需要编程人员记忆每条指令的二进制编码。机器语言是计算机唯一可以直接识别和执行的语言。
- 2)汇编语言。汇编语言用英文单词或其缩写代替二进制的指令代码,更容易为人们记忆和理解。使用汇编语言编辑的程序,必须经过一个称为汇编程序的系统软件的翻译,将其转换为计算机的机器语言后,才能在计算机的硬件系统上执行。
- 3)高级语言。高级语言(如C、C++、Java等)是为方便程序设计人员写出解决问题的处理方案和解题过程的程序。通常高级语言需要经过编译程序编译成汇编语言程序,然后经过汇编操作得到机器语言程序,或直接由高级语言程序翻译成机器语言程序。
由高级语言转换到汇编语言的过程叫做编译,由汇编语言转换到机器语言的过程叫做汇编,边翻译边执行的叫做解析。
机器语言是唯一可以控制cpu的语言,因为它的符号不利于人识别和书写,为了方便理解和记忆,将机器语言换一些通俗易懂的符号,这就变成了汇编语言。一般来说在在编译器中高级语言先转换为汇编在转换为机器语言,也有直接转换为机器语言的情况。
机器语言是计算机唯一可以直接执行的语言,汇编语言用助记符编写,以便记忆。而正则语言是编译原理中符合正则文法的语言。
解释程序的特点是翻译一句执行一句,边翻译边执行:由高级语言转化为汇编语言的过程称为编译,把汇编语言源程序翻译成机器语言程序的过程称为汇编。
1.2.4 计算机的工作过程
2.指令执行过程的描述(点击链接,视频20min处有详细讲解)
IR存放当下欲执行的指令;PC存放下一条指令的地址;
MAR存放欲访问的存储单元地址;MDR存放从存储单元取来的数据!
地址译码器是主存的构成部分,不属于CPU;地址寄存器虽然一般属于主存,但是现代计算机中绝大多数CPU内集成了地址寄存器!
关于CPU存取速度的比较:寄存器(CPU内部)> Cache(高速的SRAM) > 内存 (SDRAM)
上图是计算机的工作流程,首先PC将指令地址发送给MAR,MAR根据地址在存储体中找到指令数据存放在MDR中,之后MDR将指令存放在IR中,取指令结束,之后指令中的操作码进入CU中,地址码重复上述取指令步骤,将数据发送到ACC中,执行指令结束。注意区分指令和数据的依据:指令周期的不同阶段
1.3 计算机性能指标
- 机器字长
计算机的位数(机器字长),表示计算机进行一次整数运算(即定点整数运算)所能处理的二进制数据的位数。计算机字长通常选定为字节(8位)的整数倍,通常是2,4,8倍。不同的计算机,字节可能不同
机器字长、指令字长、存储字长的区别和联系是什么?
- 机器字长:计算机能直接处理的二进制数据的位数,机器字长一般等于内部寄存器的大小,它决定了计算机的运算精度。
- 指令字长:一个指令字中包含的二进制代码的位数。
- 存储字长:一个存储单元存储的二进制代码的长度。等于MDR的位数, 它们都必须是字节的整数倍。
- 数据字长:数据总线一次能传送信息的位数,它可以不等于MDR的位数。
指令字长一般取存储字长的整数倍,若指令字长等于存储字长的2倍,则需要2次访存来取出一条指令,因此取指周期为机器周期的2倍;若指令字长等于存储字长,则取指周期等于机器周期。
早期的计算机存储字长一般和机器的指令字长与数据字长相等,因此访问一次主存便可取出一条指令或一个数据。随着计算机的发展,指令字长可变,数据字长也可变,但它们必须都是字节的整数倍。
请注意64位操作系统是指特别为64位架构的计算机而设计的操作系统,它能够利用64位处理器的优势。但64位机器既可以使用64位操作系统,又可以使用32位操作系统。而32位处理器是无法使用64位操作系统的。
- 数据通路带宽
数据总线一次所能传送信息的位数。 - 主存容量
MAR的位数反映存储单元的个数,如MAR为16位,表示存储单元为216 = 64K;若MDR为32位,则存储容量为216x32.
- 运算速度
吞吐量,指系统在单位时间内处理请求的数量 ;从用户观点看,它是评价计算机系统性能的综合参数!
响应时间,指从用户向计算机发送一个请求,到系统对该请求做出响应并获得所需结构的等待时间。
CPU时钟周期。通常为节拍脉冲或T周期,即主频的倒数,它是CPU中最小的时间单位,每个动作至少需要1个时钟周期。
主频(CPU时钟频率)。机器内部主时钟的频率,是衡量机器速度的重要参数。
- CPU周期又称为机器周期,由多个时钟周期组成!
- 指令周期>CPU周期>时钟周期
CPI(Clock cycle Per Instruction),即执行一条指令所需的时钟周期数。
CPU执行时间,指运行一个程序所花费的时间。
CPU执行时间 = CPU时钟周期数/主频 = (指令条数xCPI)/主频
CPU的性能取决于三个要素:主频、CPI 、指令条数
IPS(Instructions Per Second) =主频/平均CPI,每秒执行多少指令
MIPS(Million Instructions Per Second)=即每秒执行多少百万条指令。
MFLOPS(Mega Floating-point Operations Per Second)=浮点操作次数/(执行时间x106),即每秒执行多少百万次浮点运算。
GFLOPS(Giga Floating-point Operations Per Second)=浮点操作次数/(执行时间x109),即每秒执行多少十亿次浮点运算。
TFLOPS(Tera Floating-point Operations Per Second)=浮点操作次数/(执行时间x1012),即每秒执行多少万亿次浮点运算。
1.4本章开头提出的问题回答
1) 计算机由哪几部分组成?以哪部分为中心?
- 1)计算机由哪几部分组成?以哪部分为中心?
计算机由运算器、控制器、存储器、输入设备及输出设备五大部分构成,现代计算机通常把运算器和控制器集成在一个芯片上,合称为中央处理器。
而在微处理器面世之前(早期的冯·诺依曼机),运算器和控制器分离,而且存储器的容量很小,因此设计成以运算器为中心的结构,其他部件都通过运算器完成信息的传递。
随着微电子技术的进步,同时计算机需要处理、加工的信息量也与日俱增,大量IO设备的速度和CPU的速度差距悬殊,因此以运算器为中心的结构不能满足计算机发展的要求。现代计算机已经发展为以存储器为中心,使IO操作尽可能地绕过CPU,直接在IO设备和存储器之间完成,以提高系统的整体运行效率。
2) 主频高的CPU一定比主频低的CPU快吗?为什么?
- 2)主频高的CPU一定比主频低的CPU快吗?为什么?
衡量CPU运算速度的指标有很多,不能以单独的某个指标来判断CPU的好坏。CPU的主频,即CPU内核工作的时钟频率。CPU的主频表示CPU内数字脉冲信号振荡的速度,主频和实际的运算速度存在一定的关系,但目前还没有一个确定的公式能够定量两者的数值关系,因为CPU的运算速度还要看CPU的流水线的各方面的性能指标(架构、缓存、指令集、CPU的位数、 Cache大小等)。由于主频并不直接代表运算速度,因此在一定情况下很可能会出现主频较高的CPU实际运算速度较低的现象
来看看小编的配置,感受一下,以后计算机组成原理中的Cache和主频等
3)翻译程序、汇编程序、编译程序、解释程序有什么差别?各自的特性是什么?
- 3)翻译程序、汇编程序、编译程序、解释程序有什么差别?各自的特性是什么?
翻译程序是指把高级语言源程序翻译成机器语言程序(目标代码)的软件。
翻译程序有两种:一种是编译程序,它将高级语言源程序一次全部翻译成目标程序,每次执行程序时,只需执行目标程序,因此只要源程序不变,就无须重新翻译,请注意同一种高级语言在不同体系结构下,编译成目标程序是不一样的,目标程序与体系结构相关,但仍不是计算机硬件能够直接执行的程序。另一种是解释程序,它将源程序的一条语句翻译成对应的机器目标代码,并立即执行,然后翻译下一条源程序语句并执行,直至所有源程序语句全部被翻译并执行完。所以解释程序的执行过程是翻译一句执行一句,并且不会生成目标程序。
汇编程序也是一种语言翻译程序,它把汇编语言源程序翻译为机器语言程序。汇编语言是种面向机器的低级语言,是机器语言的符号表示,与机器语言一一对应。
编译程序与汇编程序的区別:若源语言是诸如C、C++、Java等“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,则这样的一个翻译程序称为编译程序。若源语言是汇编语言,而目标语言是机器语言,则这样的一个翻译程序称为汇编程序。
4)不同级别的语言编写的程序有什么区别?哪种语言编写的程序能被硬件直接执行?
- 4)不同级别的语言编写的程序有什么区别?哪种语言编写的程序能被硬件直接执行?
机器语言和汇编语言与机器指令对应,而高级语言不与指令直接对应,具有较好的可移植性。其中机器语言可以被硬件直接执行。
1.5 常见问题
1.同一个功能既可以由软件实现又可以由硬件实现吗?
- 1.同一个功能既可以由软件实现又可以由硬件实现吗?
软件和硬件是两种完全不同的形态,硬件是实体,是物质基础;软件是一种信息,看不见、摸不到。但在逻辑功能上,软件和硬件是等效的。因此,在计算机系统中,许多功能既可以由硬件直接实现,又可以在硬件的配合下由软件实现。
一个最大的区别就是,硬件实现比软件实现的速度快很多,但是成本也高!所以,芯片在流片之后,如果发现bug可以用软件修复就用软件修复!
例如,乘法运算既可用专门的乘法器(主要由加法器和移位器组成)实现,也可用乘法子程序(主要由加法指令和移位指令等组成)来实现。
2.翻译程序、汇编程序、编译程序、解释程序的区别和联系是什么?
- 见本章开头提出的问题
3.什么是透明性?透明是指什么都能看见吗?
- 3.什么是透明性?透明是指什么都能看见吗?
在计算机领域中,站在某类用户的角度,若感觉不到某个事物或属性的存在,即“看”不到某个事物或属性,则称为“对该用户而言,某个事物或属性是透明的”。这与日常生活中的“透明”概念(公开、看得见)正好相反。
例如,对于高级语言程序员来说,浮点数格式、乘法指令等这些指令的格式、数据如何在运算器中运算等都是透明的;而对于机器语言或汇编语言程序员来说,指令的格式、机器结构、数据格式等则不是透明的。
在CPU中,IR、MAR和MDR对各类程序员都是透明的。
4.机器字长、指令字长、存储字长的区别和联系是什么?
- 4.机器字长、指令字长、存储字长的区别和联系是什么?
- 机器字长:计算机能直接处理的二进制数据的位数,机器字长一般等于内部寄存器的大小,它决定了计算机的运算精度。
指令字长:一个指令字中包含的二进制代码的位数。
存储字长:一个存储单元存储的二进制代码的长度。等于MDR的位数, 它们都必须是字节的整数倍。
数据字长:数据总线一次能传送信息的位数,它可以不等于MDR的位数。
指令字长一般取存储字长的整数倍,若指令字长等于存储字长的2倍,则需要2次访存来取出一条指令,因此取指周期为机器周期的2倍;若指令字长等于存储字长,则取指周期等于机器周期。
早期的计算机存储字长一般和机器的指令字长与数据字长相等,因此访问一次主存便可取出一条指令或一个数据。随着计算机的发展,指令字长可变,数据字长也可变,但它们必须都是字节的整数倍。
请注意64位操作系统是指特别为64位架构的计算机而设计的操作系统,它能够利用64位处理器的优势。但64位机器既可以使用64位操作系统,又可以使用32位操作系统。而32位处理器是无法使用64位操作系统的。
5.计算机体系结构和计算机组成的区别和联系是什么?
- 5.计算机体系结构和计算机组成的区别和联系是什么?
计算机体系结构是指机器语言或汇编语言程序员所看得到的传统机器的属性,包括指令集、数据类型、存储器寻址技术等,大都属于抽象的属性。
计算机组成是指如何实现计算机体系结构所体现的属性,它包含对许多对程序员来说透明的硬件细节。例如,指令系统属于结构的问题,但指令的实现即如何取指令、分析指令、取操作数如何运算等都属于组成的问题。因此,当两台机器指令系统相同时,只能认为它们具有相同的结构,至于这两台机器如何实现其指令,完全可以不同,即可以认为它们的组成方式是不同的。例如,一台机器是否具备乘法指令是一个结构的问题,但实现乘法指令采用什么方式则是一个组成的问题。(简言之,看有没有这个属性,就是结构问题;看怎么实现,就是组成问题)
许多计算机厂商提供一系列体系结构相同的计算机,而它们的组成却有相当大的差别,即使是同一系列的不同型号机器,其性能和价格差异也很大。例如, IBM System/370结构就包含了多种价位和性能的机型。
6.基准程序执行得越快说明杺器的性能越好吗?
- 6.基准程序执行得越快说明机器的性能越好吗?
一般情况下,基准测试程序能够反映机器性能的好坏。但是,由于基准程序中的语句存在频度的差异,因此运行结果并不能完全说明问题。
第二章 数据的表示与运算
【复习提示】
本章内容较为繁杂,由于计算机中数的表示和运算方法与人们日常生活中的表示和运算方法不同,因此理解也较为困难。纵观近几年的真题,不难发现 unsigned、shot、int、long、foat、 double等在C语言中的表示、运算、溢出判断、隐式类型转换、强制类型转换、IEEE754浮点数的表示,以及浮点数的运算,都是考研考查的重点,需要牢固掌握。
在学习本章时,请读者思考以下问题:
- 1)在计算机中,为什么要采用二进制来表示数据?
- 2)计算机在字长足够的情况下能够精确地表示每个数吗?若不能,请举例说明。
- 3)字长相同的情况下,浮点数和定点数的表示范围与精度有什么区别?
- 4)用移码表示浮点数的阶码有什么好处?
请读者在本章的学习过程中寻找答案,本章末尾会给出参考答案。
2.1 数制与编码
还是要系统学习一下,不然之前的0x1010还查了好久!
2.1.1 进位计数制及其相互转化
知识点回顾与重点考点(如果知道了,就不用看了)
- 四级网络工程师考试,就用这个方法,妙!
知识回顾与重点考点
2.1.2 BCD码(Binary-Code Decimal码)
注意:这是为了表示0和9,所以1010~1111都是违法的,以前都没在意!
知识回顾与重要考点
2.1.4 字符与字符串
1.字符编码ASCII码
字符串
知识回顾与重要考点
2.1.5 校验码
任意两个码字之间最少变化的二进制位数称为码距,码距大于等于2的数据校验码开始具有检错的能力。码距越大,检错、纠错能力越强。奇偶校验码的码距等于2,可以检测出一位错误(或奇数位错误),但不能确定出错的位置,也不能检测出偶数位错误;海明码的码距大于2,因此不仅可以发现错误,还能指出错误的位置。仅靠增加奇偶校验位的位数不能提高正确性,还要考虑码距。
具有检、纠错能力的数据校验码的实现原理:在编码中,除合法码字外,再加入一些非法码字,当某个合法码字出现错误时,就变为非法码字。合理安排非法码字的数量和编码规则就能达到纠错的目的。
1.奇偶校验码
原编码上加一个校验位,码距等于2!
知识回顾与重要考点
2.海明(汉明)校验码
3. 循环冗余校验(CRC)码
终于知道了《UVM实战》中的CRC校验是什么回事了!
CRC校验码是可以纠错的,前面这个是因为信息位太长
2.2 定点数的表示和运算
2.3 浮点数的表示与运算
2.4 算数逻辑单元(ALU)
2.5 本章开头提出的问题回答
1)在计算机中,为什么要采用二进制来表示数据?
- 1)在计算机中,为什么要采用二进制来表示数据?
从可行性来说,采用二进制,只有0和1两个状态,能够表示0、1两种状态的电子器件很多,如开关的接通和断开、晶体管的导通和截止、磁元件的正负剩磁、电位电平的高与低等,都可表示0、1两个数码。使用二进制,电子器件具有实现的可行性。
从运算的简易性来说,二进制数的运算法则少,运算简单,使计算机运算器的硬件结构大大简化(十进制的乘法九九口诀表有55条公式,而二进制乘法只有4条规则)从逻辑上来说,由于二进制0和1正好和逻辑代数的假( false)和真(true)相对应,有逻辑代数的理论基础,用二进制表示二值逻辑很自然。
2)计算机在字长足够的情况下能够精确地表示每个数吗?若不能,请举例说明。
- 2)计算机在字长足够的情况下能够精确地表示每个数吗?若不能,请举例说明。
计算机采用二进制来表示数据,在字长足够时,可以表示任何一个整数。而二进制表示小数时只能够用1(2)的和的任意组合表示,即使字长很长,也不可能精确表示出所有小数,只能无限逼近。例如0.1就无法用二进制精确地表示。
3)字长相同的情况下,浮点数和定点数的表示范围与精度有什么区别?
- 3)字长相同的情况下,浮点数和定点数的表示范围与精度有什么区别?
字长相同时,浮点数取字长的一部分作为阶码,所以表示范围比定点数要大,而取一部分作为阶码也就代表着尾数部位的有效位数减少,而定点数字长的全部位都用来表示数值本身,精度要比同字长的浮点数更大。
4)用移码表示浮点数的阶码有什么好处?
- 4)用移码表示浮点数的阶码有什么好处?
移码的两个好处
①浮点数进行加减运算时,时常要比较阶码的大小,相对于原码和补码,移码比较大小更方便。
②检验移码的特殊值(0和max)时比较容易。阶码以移码编码时的特殊值如下。0:表示指数为负无穷大,相当于分数分母无穷大,整个数无穷接近0,在尾数也为0时可用来表示0:尾数不为零表示未正规化的数。max:表示指数正无穷大,若尾数为0,则表示浮点数超出表示范围(正负无穷大);尾数不为0,则表示浮点数运算错误
2.6 常见问题
1.如何表示一个数值数据?计算机中的数値数据都是二进制数吗?
- 1.如何表示一个数值数据?计算机中的数値数据都是二进制数吗?
在计算机内部,数值数据的表示方法有以下两大类。
①直接用二进制数表示。分为无符号数和有符号数,有符号数又分为定点数表示和浮点数表示。无符号数用来表示无符号整数(如地址等信息);定点数用来表示整数;浮点数用来表示实数。
②二进制编码的十进制数,一般都采用8421码(也称NBCD码)来表示,用来表示整数。
所以,计算机中的数值数据虽然都用二进制来编码表示,但不全是二进制数,也有用十进制数表示的。后面一章有关指令类型的内容中,就有对应的二进制加法指令和十进制加法指令。
2.在高级语言编程中所定义的 unsigned/short/int/long/float/double型数据是怎么表示的?什么称为无符号整数的“溢出”?
- 2.在高级语言编程中所定义的 unsigned/short/int/long/float/double型数据是怎么表示的?什么称为无符号整数的“溢出”?
unsigned型数据就是无符号整数,不考虑符号位。直接用全部二进制位对数值进行编码得到的就是无符号数,一般都用补码表示。
int型数据就是定点整数,一般用补码表示。int型数据的位数与运行平台和编译器有关,一般是32位或16位。例如,真值是-12的int型整数,在机器内存储的机器数(假定用32位寄存器寄存)是1111-1111-1111-1111-1111-1111-1111-0100.
long型数据和short型数据也都是定点整数,只是位数不同,分别是长整型和短整型数,通常用补码表示。
float型数据是用来表示实数的浮点数。现代计算机用IEEE754标准表示浮点数,其中32位单精度浮点数就是float型,64位双精度浮点数就是 double型。
需要注意的是,C语言中的int型和 unsigned型变量的存储方式没有区别,都按照补码的形式存储,在不溢出范围内的加减法运算也是相同的,只是int型变量的最高位代表符号位,而unsigned型中的最高位表示数值位,两者在C语言中的区别体现在输出时到底是采用%d还是采用%u。
对于无符号定点整数来说,若寄存器位数不够,则计算机运算过程中一般保留低n位,舍弃高位。这样,会产生以下两种结果。
①保留的低n位数不能正确表示运算结果。在这种情况下,意味着运算的结果超出了计算机所能表达的范围,有效数值进到了第n+1位,称此时发生了“溢出”现象
②保留的低n位数能正确表达计算结果,即高位的舍去并不影响其运算结果。
3.如何判断一个浮点数是否是规格化数?
- 3.如何判断一个浮点数是否是规格化数?
为了使浮点数能尽量多地表示有效位数,一般要求运算结果用规格化数形式表示。“规格化浮点数的尾数小数点后的第一位一定是个非零数。因此,对于原码编码的尾数来说,只要看尾数的第一位是否为1就行:对于补码表示的尾数,只要看符号位和尾数最高位是否相反。需要注意的是,IEEE754标准的浮点数尾数是用原码编码的。
4.对于位数相同的定点数和浮点数,可表示的浮点数个数比定点数个数多吗?
- 4.对于位数相同的定点数和浮点数,可表示的浮点数个数比定点数个数多吗?
不是,可表示的数据个数取决于编码所采用的位数。编码位数一定,编码出来的数据个数就是一定的。m位编码只能表示2m个数,所以对于相同位数的定点数和浮点数来说,可表示的数据个数应该一样多(有时可能由于一个值有两个或多个编码对应,编码个数会有少量差异)。
5.浮点数如何进行舍入?
- 5.浮点数如何进行舍入?
舍入方法选择的原则是:①尽量使误差范围对称,使得平均误差为0,即有舍有入,以防误差积累。②方法要简单,以加快速度。
IEEE754有4种舍入方式。
①就近舍入:舍入为最近可表示的数,若结果值正好落在两个可表示数的中间,则一般选择舍入结果为偶数。
②正向舍入:朝+∞方向舍入,即取右边的那个数
③负向舍入:朝-∞方向舍入,即取左边的那个数。
④截去:朝0方向舍入,即取绝对值较小的那个数
6.现代计算机中是否要考虑原码加减运算?如何实现?
- 6.现代计算机中是否要考虑原码加减运算?如何实现?
因为现代计算机中浮点数采用IEEE754标准,所以在进行两个浮点数的加减运算时,必须考虑原码的加减运算,因为IEEE754规定浮点数的尾数都用原码表示。
原码的加减运算可以有以下两种实现方式
1)转换为补码后,用补码加减法实现,结果再转换为原码。
2)直接用原码进行加减运算,符号和数值部分分开进行(具体过程见原码加减运算部分)。
7.长度为n+1的定点数,按照不同的编码方式,表示的数值范围是多少?
- 7.长度为n+1的定点数,按照不同的编码方式,表示的数值范围是多少?
各编码方式的数值范围见表2.8
8.设阶码和尾数均用补码表示,阶码部分共K+1位(含1位阶符),尾数部分共n+1位(含1位数符),则这样的浮点数的表示范围是多少?
- 8.设阶码和尾数均用补码表示,阶码部分共K+1位(含1位阶符),尾数部分共n+1位(含1位数符),则这样的浮点数的表示范围是多少?
浮点数的表示范围见表2.9。
第三章 存储系统
【复习提示】
本章是历年考査的重点,特别是有关 Cache和存储器扩展的知识点容易出综合题。此外,存储器的分类与特点,存储器的扩展(芯片选择、连接方式、地址范围等),低位交叉存储器,Cache的相关计算与替换算法,虚拟存储器与快表也容易出选择题。读者应在掌握基本原理和理论的基础上,多结合习题进行练习复习,以加深和巩固。另外,读者还需掌握存在 Cache和TLB的计算机中的地址翻译与 Cache映射问题,该问题在《操作系统考研复习指导》中有详细说明。
本章有两个难点:一是 ache映射规律、容量计算及替换特性;二是交又存储器访问时间和访问效率。二者都可与第5章的大题综合,或与第6章总线访问内存时间的计算问题综合。
在学习本章时,请读者思考以下问题:
- 1)存储器的层次结构主要体现在何处?为何要分这些层次?计算机如何管理这些层次?
- 2)存取周期和存取时间有何区别?
- 3)在虚拟存储器中,页面是设置得大一些好还是设置得小一些好?
请读者在学习本章的过程中寻找答案,本章末尾会给出参考答案。
3.1 存储器概述
3.1.1 存储器的分类
相联存储器的基本原理是把存储单元所存内容的某一部分作为检索项(即关键字项)去检索该存储器,并将存储器中与该检索项符合的存储单元内容进行读出或写入。所以它是 按内容或地址进行寻址的,价格较为昂贵。 一般用来制作TLB、相联 Cache等。
按在计算机中的作用对存储器分类:
- 1> 主存储器,简称主存。CPU可以直接随机地对其进行访问,也可以和高速缓存器及辅助存储器交换数据。
- 2> 辅助存储器,简称辅存,不能与CPU直接相连,用来存放当前暂时不用的程序和数据
- 3> 高速缓冲存储器,位于主存和CPU之间,用来存放正在执行的程序段和数据
按存储介质分类:
- 磁表面存储器(磁盘,磁带),磁心存储器半导体存储器(MOS型存储器,双极存储器)和光存储器(光盘)。
按存取方式分类:
- 1> 随机存储器(RAM)。存储器的任何一个存储单元的内容都可以随机存取,而且存取时间与存取单元的物理位置无关,主要用作主存或高速缓冲存储器。
- 2> 只读存储器(ROM)。存储器的内容只能随机读出而不能写入。。即使断电,内容也不会丢失。
- 3> 串行访问存储器。对存储单元进行读/写操作时,需按其物理位置的先后顺序寻址,包括顺序存取存储器(如磁带)与直接存取存储器(如磁盘)。
按信息的可保存性分类:
- 断电后,存储信息即消失的存储器,称为易失性存储器,如RAM。断电后信息仍然保持的存储器,称为非易失性存储器,如ROM,磁表面存储器和光存储器。若某个存储单元所存储的信息被读出时,原存储信息被破坏,则称为破坏性读出;若读出时,被读单元原存储信息不被破坏,则称为非破坏性读出。具有破坏性读出性能的存储器,每次读出操作后,必须紧接一个再生的操作,以便恢复被破坏的信息。
3.1.2 存储器的性能指标
存储器的性能指标,有3个主要的性能指标,存储容量,单位成本和存储速度
- 1> 存储容量:存储字数*字长
- 2> 单位成本:每位价格=总成本/总容量
- 3> 存储速度:数据传输率=数据的宽度/存储周期
存取时间:存取时间时指从启动一次存储器操作到完成该操作所经历的时间,分为读出时间和写入时间。
存取周期:它是指存储器进行一次完整的读写操作所需的全部时间,即连续两次独立访问存储器操作(读或写操作)之间所需的最小时间间隔。
主存带宽:主存带宽又称数据传输率,表示每秒从主存进出信息的最大数量,单位为字/秒,字节/秒
存取时间不等于存储周期,通常存储周期大于存取时间。因为任何一种存储器,在读写操作之后,总要有一段恢复内部状态的复原时间。
3.2 存储器的层次结构
3.3 半导体随机存储器
3.3.1 SRAM和DRAM
3.3.2 只读存储器
3.3.3 主存的基本组成(存储系统)
3.4 主存储器与CPU的连接
3.4.2 主存容量的扩展
1.位扩展
2.字扩展
原来译码器的功能在这里可以使用!
3.字位同时扩展法
设CPU有16根地址线,8根数据线,并用MREQ作为访存控制信号(低电平有效),用WR作为读/写控制信号(高电平为读,低电平为写)。现有下列存储芯片:1K×4位RAM,4K×8位RAM,8K×8位RAM,2K×8位ROM,4K×8位ROM,8K×8位ROM及74LS138译码器和各种门电路。画出CPU与存储器的连接图,要求:
1)主存地址空间分配:6000H~67FFH为系统程序区;6800H~6BFFH为用户程序区。
2)合理选用上述存储芯片,说明各选几片?
3)详细画出存储芯片的片选逻辑图。
补充:系统程序区用ROM,用户程序区用RAM
MAR和MDR是直接做在CPU芯片上面的!
3.5 双端口RAM和多模块存储器
3.5.1 双端口RAM
3.5.2 多模块存储器
交叉存储器实际上是一种模块式的存储器,它能并行执行多个独立的读/写操作。
3.6 高速缓冲存储器
3.6.1 程序访问的局部性原理
3.6.2 Cache的基本工作原理
直接好家伙!
3.6.4 Cache中主存块的替换算法
- 随机算法(RAND):随机地确定替换的 Cache块。它的实现比较简单,但没有依据程序访问的局部性原理,故可能命中率较低
- 先进先出算法(FIFO):选择最早调入的行进行替换。它比较容易实现,但也没有依据程序访问的局部性原理,可能会把一些需要经常使用的程序块(如循环程序)也作为最早进入 Cache的块替换掉。
- 近期最少使用算法(LRU):依据程序访问的局部性原理选择近期内长久未访问过的存储行作为替换的行,平均命中率要比FFO要高,是堆栈类算法。
LRU算法对每行设置一个计数器, Cache每命中一次,命中行计数器清0,而其他各行计数器均加1,需要替换时比较各特定行的计数值,将计数值最大的行换出。 - 最不经常使用算法(LFU):将一段时间内被访问次数最少的存储行换出。每行也设置一个计数器,新行建立后从0开始计数,每访问一次,被访问的行计数器加1,需要替换时比较各特定行的计数值,将计数值最小的行换出。
Cache例题
3.7 虚拟存储器
3.7.1 虚拟存储器的基本概念
3.7.5 段页式虚拟存储器
把程序按逻辑结构分段,每段再划分为固定大小的页,
主存空间也划分为大小相等的页,
程序对主存的调入、调出仍以页为基本传送单位。
每个程序对应一个段表,每段对应一个页表
虚拟地址:段号+段内页号+页内地址
3.7.3 快表(TLB)
页表、段表存放在主存中,收到虚拟地址后要先访问主存,査询页表、段表,进行虚实地址转换。
放在主存中的页表称为慢表(Page)
提高变换速度→用高速绥沖存储器存放常用的页表项 → 快表(TLB)
3.8 本章开头提出的问题回答
1)存储器的层次结构主要体现在何处?为何要分这些层次?计算机如何管理这些层次?
- 1)存储器的层次结构主要体现在何处?为何要分这些层次?计算机如何管理这些层次?
存储器的层次结构主要体现在 Cache-主存和 主存-辅存这两个存储层次上。
Cache-主存层次在存储系统中主要 对CPU访存起加速作用,即从整体运行的效果分析,CPU访存速度加快,接近于 Cache的速度,而寻址空间和位价却接近于主存。
主存-辅存层次在存储系统中主要 起扩容作用,即从程序员的角度看,他所使用的存储器的容量和位价接近于辅存,而速度接近于主存。
综合上述两个存储层次的作用,从整个存储系统来看,就达到了速度快、容量大、位价低的优化效果。
主存与 Cache之间的信息调度功能全部由硬件自动完成。而主存与辅存层次的调度目前广泛采用虚拟存储技术实现,即将主存与辅存的一部分通过软/硬结合的技术组成虚拟存储器,程序员可用这个比主存实际空间(物理地址空间)大得多的虚拟地址空间(逻辑地址空间)编程,当程序运行时,再由软/硬件自动配合完成虚拟地址空间与主存实际物理空间的转换。因此,这两个层次上的调度或转换操作对于程序员来说都是透明的。
2)存取周期和存取时间有何区别?
- 2)存取周期和存取时间有何区别?
存取周期和存取时间的主要区别是:存取时间仅为完成一次操作的时间;而存取周期不仅包含操作时间,而且包含操作后线路的恢复时间,即存取周期=存取时间+恢复时间。(这是不是也可以解释,为什么IC前端,时序分析中有建立时间和保持时间吧)
3)在虚拟存储器中,页面是设置得大一些好还是设置得小一些好?
- 3)在虚拟存储器中,页面是设置得大一些好还是设置得小一些好?
页面不能设置得过大,也不能设置得过小。因为页面太小时,平均页内剩余空间较少,可节省存储空间,但会使得页表增大,而且页面太小时不能充分利用访存的空间局部性来提高命中率;页面太大时,可减少页表空间,但平均页内剩余空间较大,会浪费较多存储空间,页面太大还会使页面调入/调出的时间较长
3.9 常见问题
1.存取时间Ta就是存储周期Tm吗?
- 1.存取时间Ta就是存储周期Tm吗?
不是。存取时间Ta是执行一次读操作或写操作的时间,分为读出时间和写入时间。读出时间是从主存接收到有效地址开始到数据稳定为止的时间;写入时间是从主存接收到有效地址开始到数据写入被写单元为止的时间。
存储周期Tm是指存储器进行连续两次独立地读或写操作所需的最小时间间隔。所以存取时间Ta不等于存储周期Tm。通常存储周期Tm大于存取时间Ta。
2. Cache行的大小和命中率之间有什么关系?
- 2.Cache行的大小和命中率之间有什么关系?
行的长度较大,可以充分利用程序访问的空间局部性,使一个较大的局部空间被一起调到Cache中,因而可以增加命中机会。但是,行长也不能太大,主要原因有两个:
1)行长大使失效损失变大。也就是说,若未命中,则需花更多时间从主存读块。
2)行长太大, Cache项数变少,因而命中的可能性变小
3.发生取指令 Cache缺失的处理过程是什么?
- 3.发生取指令 Cache缺失的处理过程是什么?
1)程序计数器恢复当前指令的值。
2)对主存进行读的操作。
3)将读入的指令写入 Cache中,更改有效位和标记位。
4)重新执行当前指令。
4.关于 Cache的一些小知识
- 4.关于 Cache的一些小知识。
1)多级 Cache。现代计算机系统中,一般采用多级的 Cache系统。CPU执行指令时,先到速度最快的一级 Cache( LI Cache)中寻找指令或数据,找不到时,再到速度次快的二级Cache(L2 Cache)中找…最后到主存中找。
2)指令 Cache和数据 Cache。指令和数据可以分别存储在不同的 Cache中( LI Cache一般会这么做),这种结构也称哈佛 Cache,其特点是允许CPU在同一个 Cache存储周期内同时提取指令和数据,由于指令执行过程取指和取数据都有可能访问 Cache,因此这一特性可以保证不同的指令同时访存。
第四章 指令系统
【复习提示】
指令系统是表征一台计算机性能的重要因素。读者应注意扩展操作码技术,各种寻址方式的特点及有效地址的计算,相对寻址有关的计算,CISC与RISC的特点与区别。本章知识点出选择题的概率较大,但也有可能结合其他章节出有关指令的综合题。2014年、2015年已连续两次出现指令系统和指令流水线的大题。指令系统格式和指令寻址方式与CPU指令执行过程部分紧密结合,希望读者引起重视。
在学习本章时,请读者思考以下问题
- 1)什么是指令?什么是指令系统?为什么要引入指令系统?
- 2)一般来说,指令分为哪些部分?每部分有什么用处?
- 3)对于一个指令系统来说,寻址方式多和少有什么影响?
请读者在本章的学习过程中寻找答案,本章末尾会给出参考答案。
4.1 指令格式
4.1.1 指令的基本格式
4.2 指令寻址方式
4.2.1 指令的寻址方式
4.2.2 常见的数据寻址方式
隐含寻址
立即寻址
直接寻址
间接寻址
寄存器寻址
寄存器间接寻址
偏移寻址
堆栈寻址
4.3 CISC和RISC的基本概念
4.4本章开头提出的问题回答
1)什么是指令?什么是指令系统?为什么要引入指令系统?
- 1)什么是指令?什么是指令系统?为什么要引入指令系统?
指令就是要计算机执行某种操作的命令,一台计算机中所有机器指令的集合,称为这台计算机的指令系统。引入指令系统后,避免了用户与二进制代码直接接触,使得用户编写程序更为方便。另外,指令系统是表征一台计算机性能的重要因素,它的格式与功能不仅直接影响到机器的硬件结构,而且也直接影响到系统软件,影响到机器的适用范围。
2)一般来说,指令分为哪些部分?每部分有什么用处?
- 2)一般来说,指令分为哪些部分?每部分有什么用处?
一条指令通常包括操作码字段和地址码字段两部分。其中,操作码指出指令中该指令应该执行什么性质的操作和具有何种功能,它是识别指令、了解指令功能与区分操作数地址内容的组成和使用方法等的关键信息。地址码用于给出被操作的信息(指令或数据)的地址,包括参加运算的一个或多个操作数所在的地址、运算结果的保存地址、程序的转移地址、被调用子程序的入口地址等。
3)对于一个指令系统来说,寻址方式多和少有什么影响?
- 3)对于一个指令系统来说,寻址方式多和少有什么影响?
寻址方式的多样化能让用户编程更为方便,但多重寻址方式会造成CPU结构的复杂化(详见下章),也不利于指令流水线的运行。而寻址方式太少虽然能够提高CPU的效率,但对于用户而言,少数几种寻址方式会使编程变得复杂,很难满足用户的需求。
4.5常见问题
1.简述各常见指令寻址方式的特点和适用情况
- 1.简述各常见指令寻址方式的特点和适用情况
立即寻址操作数获取便捷,通常用于给寄存器赋初值。
直接寻址相对于立即寻址,缩短了指令长度
间接寻址扩大了寻址范围,便于编制程序,易于完成子程序返回。
寄存器寻址的指令字较短,指令执行速度较快
寄存器间接寻址扩大了寻址范围。
基址寻址扩大了操作数寻址范围,适用于多道程序设计,常用于为程序或数据分配存储空间。
变址寻址主要用于处理数组问题,适合编制循环程序。
相对寻址用于控制程序的执行顺序、转移等。
基址寻址和变址寻址的区别:两种方式有效地址的形成都是寄存器内容+偏移地址,但是在基址寻址中,程序员操作的是偏移地址,基址寄存器的内容由操作系统控制,在执行过程中是动态调整的;而在变址寻址中,程序员操作的是变址寄存器,偏移地址是固定不变的。
2.一个操作数在内存可能占多个单元,怎样在指令中给出操作数的地址?
- 2.一个操作数在内存可能占多个单元,怎样在指令中给出操作数的地址?
现代计算机都采用字节编址方式,即一个内存单元只能存放一字节的信息。一个操作数(如char、int、foat、 double)可能是8位、16位、32位或64位等,因此可能占用1个、2个、4个或8个内存单元。也就是说,一个操作数可能有多个内存地址对应。
有两种不同的地址指定方式:大端方式和小端方式。
大端方式:指令中给出的地址是操作数最高有效字节(MSB)所在的地址
小端方式:指令中给出的地址是操作数最低有效字节(LSB)所在的地址。
3.装入/存储(Load/ Store)型指令有什么特点?
- 3.装入/存储(Load/ Store)型指令有什么特点?
装入/存储型指令是用在规整型指令系统中的一种通用寄存器型指令风格。这种指令风格在RISC指令系统中较为常见。为了规整指令格式,使指令具有相同的长度,规定只有 Load/Store指令才能访问内存。而运算指令不能直接访问内存,只能从寄存器取数进行运算,运算的结果也只能送到寄存器。因为寄存器编号较短,而主存地址位数较长,通过某种方式可使运算指令和访存指令的长度一致。
这种装入/存储型风格的指令系统的最大特点是,指令格式规整,指令长度一致,一般为32位。由于只有 Load/Store指令オ能访问内存,程序中可能会包含许多装入指令和存储指令,与ー般通用寄存器型指令风格相比,其程序长度会更长。
第五章 中央处理器
【复习提示】
中央处理器是计算机的中心,也是本书的难点。其中,数据通路的分析、指令执行阶段的节拍与控制信号的安排、流水线技术与性能分析易出综合题。而关于各种寄存器的特点、指令执行的各种周期与特点、控制器的相关概念、流水线的相关概念也极易出选择题。
在学习本章时,请读者思考以下问题
- 1)CPU分为哪几部分?分别实现什么功能?
- 2)指令和数据均存放在内存中,计算机如何从时间和空间上区分它们是指令还是数据?
- 3)什么是指令周期、机器周期和时钟周期?它们之间有何关系?
- 4)指令周期是否有一个固定值?为什么?
- 5)什么是微指令?它和第4章谈到的指令有什么关系?
- 6)什么是指令流水线?指令流水线相对于传统计算机体系结构的优势是什么?如何计算指令流水线的加速比?
请读者在本章的学习过程中寻找答案,本章末尾会给出参考答案。
【复习提示】
中央处理器是计算机的中心,也是本书的难点。其中,数据通路的分析、指令执行阶段的节拍与控制信号的安排、流水线技术与性能分析易出综合题。而关于各种寄存器的特点、指令执行的各种周期与特点、控制器的相关概念、流水线的相关概念也极易出选择题。
在学习本章时,请读者思考以下问题:
- 1)CPU分为哪几部分?分别实现什么功能?
- 2)指令和数据均存放在内存中,计算机如何从时间和空间上区分它们是指令还是数据?
- 3)什么是指令周期、机器周期和时钟周期?它们之间有何关系?
- 4)指令周期是否有一个固定值?为什么?
- 5)什么是微指令?它和第4章谈到的指令有什么关系?
- 6)什么是指令流水线?指令流水线相对于传统计算机体系结构的优势是什么?如何计算指令流水线的加速比?
请读者在本章的学习过程中寻找答案,本章末尾会给出参考答案。
5.1 CPU的功能和基本构造
5.1.1 CPU的基本功能
CPU的功能:
- 指令控制:完成取指令、分析指令和执行指令的操作,即程序的顺序控制。
- 操作控制:一条指令的功能往往是由若干操作信号的组合来实现的。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作。
- 时间控制:对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信号。
- 数据加工:对数据进行算术和逻辑运算。
- 中断处理:对计算机运行过程中出现的异常情况和特殊请求进行处理。
5.1.2 CPU的基本结构
1.运算器
- 算术逻辑单元ALU
- 累加寄存器ACC
- 程序字状态寄存器PSW
- 计数器CT
- 暂存寄存器
- 通用寄存器组
- 移位器
通用寄存器供用户自由编程,可以存放数据和地址。而指令寄存器是专门用于存放指令的专用寄存器,不能由通用寄存器代替。
2.控制器
- 程序计数器PC:存放下一条指令在主存中的地址,具有自增功能。
- 指令寄存器IR:存放当前正在执行的指令。
- 指令译码器
- 存储器地址寄存器MAR
- 存储器数据寄存器MDR
- 时序系统
- 微操作信号发生器
条件转移指令执行时,需要对标志寄存器的内容进行测试,判断是否满足转移条件。
转移指令时,需要判断转移是否成功,若成功则PC修改为转移指令的目标地址,否则下一条指令的地址仍然为PC自增后的地址。指令包括操作码字段和地址码字段,但指令译码器仅对操作码字段进行译码,借以确定指令的操作功能。
注意:CPU内部寄存器大致可分为两类:一类是用户可见的寄存器,可对这类寄存器编程,如通用寄存器组、程序状态字寄存器;另一类是用户不可见的寄存器,对用户是透明的,不可对这类寄存器编程,如存储器地址寄存器MAR、存储器数据寄存器MDR、指令寄存器IR。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
址寄存器MAR
- 存储器数据寄存器MDR
- 时序系统
- 微操作信号发生器
条件转移指令执行时,需要对标志寄存器的内容进行测试,判断是否满足转移条件。
转移指令时,需要判断转移是否成功,若成功则PC修改为转移指令的目标地址,否则下一条指令的地址仍然为PC自增后的地址。指令包括操作码字段和地址码字段,但指令译码器仅对操作码字段进行译码,借以确定指令的操作功能。
注意:CPU内部寄存器大致可分为两类:一类是用户可见的寄存器,可对这类寄存器编程,如通用寄存器组、程序状态字寄存器;另一类是用户不可见的寄存器,对用户是透明的,不可对这类寄存器编程,如存储器地址寄存器MAR、存储器数据寄存器MDR、指令寄存器IR。
[外链图片转存中…(img-f1ZiRcNC-1715188777786)]
[外链图片转存中…(img-W7hO0u5p-1715188777786)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!