screen_ 计算机组成与体系结构 _ 第 4 周 _ 星期四 _ 第 2 大节 _ 原文 2026 年 01 月 01 日 16:52 有大学教育费发展全校都是一。行,就试一下,因为我们人多。
好,咱们开始上课。在国庆节前我们用了两次课,六个学时,把第一章和第二章很快速的办案复习办讲一些关键内容,我们做了一个快速的学习,作业也布置了,那么哪几个班交,今天咱们就三个放到墙上来。向大家注意一下。尽管我们第一章和第二章我们是以复习性形式进行学习,但是我们考核的时候,就期末考试我们是有习题的,却有考题的,是吧?考哪一些内容,凡是我上课我都给大家能说过,我可能从哪些考点这种细节的东西,只有我在上课的时候会说,我说这个考点我会考的是吧?期末总复习没有这些内容,向大家注意一下好吧?这是第一章第二章的情况。
那么今天咱们开始了咱们这个计算机组织体系结构的第三章的学习。从第三章开始,我们就进入到咱们的主要学习内容。首先咱们解决什么?二进制在计算机内部进行有效信息的表示的方法。也就是说驱动一个硬件计算机它的依赖的东西,也就是说我们的指令性,也就是说我们。大家注意下这个责任系统到什么级别。并不是说咱们 C 语言编程所对应的指令,或者是引用汇编祝继福写的汇编程序,这些都不算是指令是吧?虽然有的老师,有的教科书把这块都算指令。
我们这里讲的指令系统特定指的是什么?CPU 级的指令。也就是说英特尔 CPU 它有它的指令,以及基于 ARM 架构的这个处理器,也有 M 架构的整理企业。现在咱们国内主推的是什么 risk five risk 这种处理器,它也有它的这个引体。咱们就看一下针对这种 CPU 级别的指令或者指令及首先咱们看一下它这个指令结构是怎么样的,然后我们看一下,如果你设计指令又会怎么样。
过去我们讲第三章的时候,我们觉得大家去设计指令是一个遥不可及的一件事。但是到了 2025 年的今天我觉得有可能你们在座各位未来会做这件事,为什么呢?因为过去在我上课讲计算机组成一起学过这二十多年。
我们过去讲的是英特尔 X86 架构的 CPU。那你想英特尔 X86 在过去二十几年,它是属于竞争中的最顶尖的一款,很少能有这种可能性。但是随着穿戴设备、移动设备、嵌入设备的使用,会衍生出很多新的硬件设备。也就是说我们的宏观点评叫嵌入式性。也就是说什么叫嵌入式性?在一块板子上具有处理器,也有存储器,也有 IO 设备等等等等。在这种嵌入设备的条件下,每一个相关的从业者都有可能会根据实际需求设计什么处理器的指令性。
过去是遥不可及,现在极有可能跟你未来所从事的工作密切相关。因为现在这个发展态势来说,应该是软硬结合。纯软件戏不大是吧?软硬结合可能是未来发展的一个趋势或者方向?因此咱们一起来看一下指令系统。
刚才我们说过了,指令系统用这一张图我们就很清楚的给出了指令系统对应的位置。就是对于我特定的处理器进行操作的信号,或者它的这个指令。也就是说这个指令系统只能存在于什么 CPU 内部是吧?CPU 以外的我们不讨论这点,希望大家注意一下。像这个里的软件,按照现在来看的话,这个软件就对应的我们的 OPPO s 操作系统是吧。今天是 10 月 11 号,再过三四天,windows 10 可能就不能用了是吧?这这里的这个软件是特指操作系统,对吧?操作系统最终我要区动处理器完成各种各样的事情。
那我们看一下我们 CPU 所使用的这个指令系统。首先咱们看一下这一组 01012 进制信息,它代表什么含义,它的结构是什么样?好,首先咱们看第一件事,指令的结指令的格式。
宏观的来说,所谓的一条指令是机器语言中的一种一个领域,是一组具有特定含义的二进制的基本结构。指定的基本结构实际上就一分为二,OP 和地址这个操作码字段和地址码字段。操作码字段我们称为 OP 对吧?Operation 什么 OP 地址码字段指的是操作数的地图?
在咱们 C 员工一开始给大家讲什么,我们讲什么变量?常量。那么变量指的是什么东西?指的是我给储存空间分配个临时地址,临时存储空间?存储空间里面存放各种各样的信息。对于一个测试空间,我要指定它的数据类型?
在新源中我们还学过指针?地址空间存储存空间的地址信息。事实上在我们的机器指令中,我们就没有变价这个概念,实际上用的是指针的这个概念。当然大家都觉得在 C 语言中,C 加语言中指针是比较费事。但实际上我们在这儿,我们的底层用的是指针的东西?这个就解释了这个 CM 的为什么?一说进去跟大家都沟通,我们只能到机器层使用,没有变量的概念,只有什么地址的概念。
因此我们说我们的机器指令这一组这一串二中的代码,我们把它按照它所代表的含义分成两部分。一部分我们称为操作码字段。操作码字段描述这条指令完成什么样的操作。比如说加减乘除,移位传输等等等等,描述它的功能。那么地址码字段描述的什么?执行这个操作数的对应的地址,说白了就是指证。
大家看一下地震指的是操作数的地址。特只有极特殊情况下,这部分是给的操作数的本身地址。完毕看一看操作数的地址,用 C 语言大白话讲,就是 C 语言当中我们所讲的指针的概念是吧?
这个以前说实话 C 零我还学了很多年,二三十年了,前两天又捡起来了。可能讲睡眠的时候,我不会说这只是干什么,在这就告诉你指定是怎么回事。也是我们指令就是这么用的。
好,我们说那么一条指令,它的长度是由哪几块所决定的?第一包括的操作字段的长度。第二操作数的个数以及它的长度。第一它是操作码字段的长度,这个是什么来决定的?这个操作码字段我们怎么进行设计?实际上对于操作码的设计,就操作码的设计,我们将来会在第三章指令系统会讲一些内容。到了第七章中央处理器讲这一章的时候,我们针对高 P 操作码部分会做进一步的学习。就是有关操作系有关指令系统?指令系统的设计我们在两章里面进行学习。
第一个是第三章,我们有宏观的指认系统的设计,这是第一块。然后在第七章针对 OP 操作码我们展开扩展与讨论,然后大家一定要弄清楚,宏观的讲指令的长度我们是有要求的。第一尽可能短,第二等于字节的整数倍,那么尽可能转我想大家都很清楚,因为我们的这个操作系统是有是是有要求的。比如说现在主流是 64 位操作系统?默认一条指令 64 位,那么一条指令总的长 64 位,那你 OP 分多少是吧?怎么怎么?这都有很多。我打开的时候我们现但是宏观的要求只能的长度尽可能短。
第二是字节的整数费,只有指令的长度是字节的整数倍,才能有效利用存储空间。你要不是这个指令不是字节的整数倍的话,你有可能浪费空间,好吧?那么这类长度可以等于机器磁场,也可以大于或者小于。
在我们计算机的发展的不同阶段,这三种可能性都有。就是最早最简单就是指令的长度等于机器字长?然后发展一段时间,指令的长度大于 G 时长,还有小于的,这个就在不同的时期,大家知道一下就可以了。
现在计算机这个职位到底怎么回事,长什么样?回头大家可以调研一下。前两天因为我前两天看到就是昨天看到英特尔已经推出了基于 1.8 纳米的处理器是吧。过去像咱们这个,他很长时间停留在 14 那里。这最新就昨天和前天,就是刚国庆期间,英特尔推出了 1.8 万是吧?但是这个会怎么样,你现在不知道。
因此我们根据一个指令系统中所有指令所对应的二进制的字节数的差别,我们给出了定长指令字结构和变长指令字结构。所谓的定长指令字结构是指所有指令的长度都相等,比如说都是 64 位,都是 32 位,对吧?这是一种。还有一种。指令的长度根据指令功能的不一样,有的在这个指令系统中有的指令是 16 位,有的指令是 32 位,有的指令是 48 位。不同的指令设计者的风格不一样,它对于指令的设计各有区别。
这个在咱们第三章的教学过程中,我们有相应的内容给大家去建立。这个也就说就是说我们计算机组成一体结构这门课优点是什么?有讲一些计算机的发展史,讲都是白讲,将来你从事这方面实际工作的时候,拿过来借鉴一下。你想做定常整体结构,看看这前辈优秀的作品长什么样,想看明白了,想明白了自己再下手也很难。
在我们的发展史,计算机指令系统设计的发展史中有定长指令结构和变长的分子结构两种形式。定长和变长指的是总的职位长度,指的是总的指令的所占的二进制特征。你是 32 位还是 64 位,还是多少多位,这个也行,这个相当于这是定长和变长的概念。
好,下面咱们分别针对指令结构中的操作码和地址码分别展开讨论和学习。首先咱们看一下这个地址码结构,我们先从地址码这块看一下咱们目前常见的指令的设计方式。我们会从四地址指令学到开始学四个操作数地址开始,四地址、三地址、二地址、一地址、零地址五种形式我们都会跟大家讨论。
首先咱们是以一个最常见的双操作数的指令为例进行讨论。双操作数这最常见的,比如说加减乘除,这些都是需要两个操作数,你一个操控你做不了是吧?那么咱们就最最常见的双操作就是力为例。我们进行讨论。那么大家注意下,因为我们这小节里面只是讨论地址码结构,而操作码结构我们不讨论是吧?你要同时讨论这种排列组合可能性就很多了?咱们先简化问题对吧?我们就默认了双层数就加减乘除,你随便挑一个。
我们刚才我们说了,我们会最开始我们会给的四个地址指令,就有四个操作数地址的指令。A1、A2、A3、A 四大家可以看一下这四个操作数的这四个操作数地址代表的含义,大家可以看一下。A1A2 描述的是我进行某种运算的这两个操作数则?A 三存放结果,A 四下一条将要执行的责任机制。
有人觉得这 A4 没必要,肯定是有必要的,为什么呢?你要保证计算机能够自动高速,不需要人为干预的进行执行。你这条指令执行完了以后,下一条将执行的指令的地址,你不告诉我它怎么自动来执行的。因此我们说 A4 在这里面是一定要有,是吧?就是说这 A 四是非常重要,只有你 A 四存在了,你才能保证什么指令的自动执行,否则的话做不了是吧?也就是说对于一个双操作数的指令,你要完成操作就要具备这四个方面的地址信息。
好,那么我们说 A 一、A2、A3、A 四这些异议信息可以在指令中直接给出。对于这种形式我们稍微写地址。还有一种可能,这 A1、A2、A3、A44 个地址信息以某种隐含方式的形式。给你给出对应的地址,地址说白了 AAA1、A2、A3、A 四这四个地址信息。任何一个操作数指的指令必须要有,但是看你怎么给了是吧?有的同学说显一直很最直接最简单,但是你想一下一个 64 位操作,一个 64 位的指令吧?
假定这个指令跟我们操作过程,基本上自肠机器质量是三个,不是四个。你想你一个地址你能分多少位?60 44 位的指令是吧?64 除以 4 不用不算 OP 操作码一个 D 最高分 16 是吧?那你肯定是不够的。我们要想办法在有限的指令长度下,保证所有信息能够有效给出。也就是说我们 A 一、A2、A3、A4,我们通过隐蔽的手段逐步进行削减。
好,下面我们以这个 4D 指令大家可以看一下 OPAA2、A3、A4。那么这四个地址大家可以看一下它执行的操作。A 一个括号,OPA2 括号,然后指向 A3,这是有讲究的?刚才我说了 A1、A2、A3,这都是地址是吧?这就相当于 C 语言,C 加 I 中的指针是吧?指针。就是个 D 那么加个括号就对应的是这个地址对应的值存储空间存放的信息是吧?这两个是有本质的区别的。
A 一是地址加个括号对应的这个 A 地址对应的储存空间,存储空间里面所存放的有真实信息,一定要弄清楚。有人说咱们 C 语言学的指针学起来挺费事,这就用到了,只不过到咱们计算机组成其结构,我们不谈指针的概念而已?为什么 C 源有指针?后面的比如 java、python 都没有。因为 C 语言是上个世纪 70 年代出现的所谓的高级语言?这属于面向硬件直接编程到高级编程的一个货物阶段。大家注意下,大家看一下我 A 一对应的这个内容与 A2 对应的存储空间内容做一个 OB 运算,结果是存放到 A3 所指定的存储单元里面。
下一条将要执行的指令的地址由 A 四给出,那么我们把它形象化。比如说这样的一条指令,我从主中间第 52 单元里面取出一条指令。大家可以看一下,这条指令是加 100 200 300 400。其中这个加号表示我要执行的加法运算。第一个操作数存放在主中间,第 100 号单元存放的是 5,第 200 号单元里面存放的三是吧?然后运算 325 加 39 等于 8,存在一个第 300 号单元。下一条加入执行指令硬币的指令放在第 400 号单元来看一下。
这件事儿。首先我分析第一个 A1,那么取出它对应一个操作是五。然后 A2 取出 3,做指定的 OP 加法结果是 8。然后把它写入到第 300 号单元下一条将要执行的指令,指令的地址在 400 号单元里 OK OK 当他发现这个四地支巳地支指令是我们在没有简化问题时候的最理论的设计。
大家注意一下这种形式,就四级指令在实际的指令系统中是找不到的。这种指令是在大家作为一个指令性的设计者,首先把问题分析清楚是吧?分析清楚以后,我搞明白这四个地址的作用之后,我在进行什么简化。因此我们说我们这里讲的四地区指令存在于指令设计者的草稿上是吧?同样 4D 指令,由于我指令的总的长度是有限的,我肯定是要想办法把 A1、A2、A3、A41 个 1 个想办法把它精简下去,是吧?那么就得到了第一个讲话形式。
大家读一下 4D 指令只存在于指令系统设计者的草稿纸上,剩下的三地址、二地址、一地址、零地址都是真实有效的指令的时候?这个相当于弄清楚。大家看一下 3D 值的指令,大家发现与 4D 指令相比较而言,它第一个是什么?A 四下一条将要执行的指令,定制他这个 A4 的这个信息,我做了某种处理,怎么说呢?三级指令与四级指令执行的操作都是一样的,A 一括号 OPA2 括号指向 A3,这个是没有问题。但是咱们看一下 A4,A4 为了替代 A4,下一条将要执行指令地址。
这个指令系统设计者干了一件什么事呢?PC 加 1PC 是我们 CPU 内部的一个专用寄存器,就是为了解决 A 四这个逻辑加上指向的下一条指令。因为这是每一条指令都要有个信息,为了化简它。CPU 的设计者在 CPU 内部专门给他增加了一个专用的。
寄存器我们称为它的作用。TC 就是什么程序技术仪器说不他是吧,就专门就是为了替代。这是什么软件硬化?其实这个从软件设计你完全能做,但我为了强化,如果要把这 A4L 去掉,就专门设计了一个专用的寄存器。通过这个寄存器不断的加一指向下一条将要执行的决定去。
同样我们还是大家看一下 PC 的内容是什么?存放当前的指令物质?PC 什么时候变?这件事就是 PC 我们说它存放当前的指令地址。那么到了我们后面第七章学习的时候,我会告诉你在一个指令的什么阶段,PEC 的内容是发生改变吧?PC 等于它它会改,就 PC 加 1,你觉得应该在什么时候完成是吧?就现在咱们在这给大家提一个小小的问题,你觉得 PC 加一指向下调将执行指令,就是 PC 内容的改变应该在什么阶段实现?答案会放在第七章。
好,同样我们还是以刚才那个加法运算,从第 52 单元取一条指令。此时第三条指令加到 100 230,那么就意味这个三级指令跟我们刚才的四级指令的功能是完全一样的。就是从 100 号 200 号取出我们的操作数做指定的运算结果放到这 100 号 200 号取出操作数,结果运算结果放在 300 号单元里面是吧?这是我们要处理的。这个操作过程跟前面是完全一样的,只不过下一条将要执行的指令地址由 CPU 内部这个专用寄存器 PC 来指向。由于 PC 我从第五个单元里面说,与之对应 PC 的值是 50,那么 50 加 1 下一个将执行指令就是第 51 号。
当然了,好吧,实际上我们在第一章我们在讲开始的时候,我们讲过两种结构是吧?两种结构一种是什么?就一级开始什么指令和数据是混在一起使用的?还有一种我们称为哈佛结构,正好你能保证 PC 加入,很快的就能执行。你要说你执行这件事儿,我们的硬件设计是与之匹配?因为我的一级开始,我的开始指令和数据分开的那你是不是 T 加一就能很流畅的指向下面,对吧?
上次我们说说起来这些都是联动的?这个加上我们在学那个我们会在最后一部分讲鲲鹏,就是华为鲲鹏处理器,会把这个宏观给大家讲一讲。但是有些东西咱们在上课期间会给它穿插的去说,你可能就这就相当于窗户一捅就破,是吧?好,下一条肯定是由 PC 来描述。
第 11 单元从第 51 号单元取出下一条将要执行的指令地址。那么大家看一下四地址变三地址,我们是通过在 CPU 内部增设一个专用寄存器 PC 来实现?有软件逻辑变成一个硬件设备的一个变化,这个就相当于这个 A,作用非常大。原来是软件去描述,现在直接用直接上映?这也是决定了我们 CPU 和因特 CPU 多少年的一个固定模式。
因为咱们目前咱们默认的这个国内,国内不是不不是不光是贾老师,国内只要是咱们中国人写的这个计算机组成或计算机组成原理计算机组成体系结构,那与系统结构的教科书都是以英特尔叉 86 结构为蓝本进行课程组织的?因为这跟过去的这四五十年英特公司在处理器的地位是密切相关的。可能未来再过五年或者十年,有可能计算组成与体系结构这个研究的处理器版本是五花八门?
那么有事实上如果不考虑什么什么考研的那那个了,事实上我们直接拿国外教材都没问题?但是说话听你讲拿国外教材可能大家就是非常辛苦?因为国外教材跟国内教材的区别,一个教学方式不一样?咱们的教学方式很传统,上课听讲,下课做工,作业都是纸面操作是吧?考试也是纸面操作。老外的对教科书我是都看过,也拿到了广大的抗病教材的。
那个 PPT 其实比咱们讲的简单,但是他的作业量,它的难度真大,是吧?一句话我讲一,你们要会 3。而且像是我讲一你们会三,越是。顶尖大学越来越大。这个咱们就说一个实际情况,你们如果觉得这个很容易过,咱们给你讲的弄点真东西。实际我们对大家考研是坦率讲,对你们还是心慈手软,对吧?
好,我们说我们执行一条三地址指令需要访问四次内存。这四次内存就执行一条 3D 指令要访问四次内存。这个隐隐含前提就是我们这条指令是从主存单元里面取出。但能不能把这四次访问主存,哪四次能不能说出来?
好,这个好像是某一年的考研题。咱这个回头再说,这四次是这么算出来。第一,取指令本身从 52 单元取指令本身是不访问一次内存。这第一次取两个操作数是不是分别需要两次,那就各需要一次,现在就是三次了?存放结果第四次。因此我们说这四次就是取脂类、取操作数,存放结果这四次完成,好吧,这个是。
指三地址指令缓存四次。同样二地址、一地址、零地址,什么访 1 指令执行,你访问的时间是多少?因为我们后来你们上个学期,去年应该学过数据结构,吧?一个指令结构的时间复杂性、空间复杂性,时间复杂性就出来了,对吧?我们到指令集,我愿意算它的时间复杂性 OK。
好,这是二地址。下面咱们看一下。刚才是 3D 下面咱们看一下二地址。那么二地址与三地址大家看一下,从指令结构上 OPAL,大家发现我们隐藏掉了 A 三是吧?隐含掉黑色。大家可以看一下,我们这里是这样设计的,A1OPA1 括号,OPA2 括号,然后结果存放到 A 里面吧?这是我们给大家的一个设计结果。
有的同学说,你现在把结果放到运算以后的结果放到 A 一里面,那你说能不能把它放到 A2 里面?也可以?这个设计是看大家怎么去设计。比如说我们简化问题直接写 A 一了,你要是说我非我那个我要一定要用 A2 也没问题。只要你设计出来,别人那你找你,你说出来你被单位认可,所有其他同志配合你没问题是吧?因此我们在这。
二地址指令是简化了 A3,为什么可以简化 A3 呢?他就是有一个说法,怎么说法呢?就是说我们两个数进行运算,运算之后我们只关心结果是吧?对于原始数据是什么我们不太关心。因此我们可以基于此这个原因,我们涉及这个 2D 指令。
你说二定制指令最大的特点是运算之后 A 一的存储内容将被,对吧?这个我们有个谈条件,说我们利用指令及执行预算以后,我们关心的是结果,而不关心运算前是哪两个数。因此我们可以设计 2DA 值是吧?当然有有的同学对我这种观点他不赞同是吧?那不赞成的话,那么你可以采用什么?3D 组三进制指令可以很好解决你的疑惑,对吧?这个千万注意一下。
有的人觉得我可以接受运算之后,原始的操作书内容被破坏掉,那那 OK 你就可以用 2D 是吧?那么由于 A1A2 所承担的作用不太一样,我们把 A 一称为目的操作数地址,A2 称为原操作数地址是吧?A 相当于运算以后要存放结果。
Ok 大家看一下,我们举这个例子,还是从第 52 单元取出一条指令是加到 100 200。大家可以看,那操作跟刚开始一样,从第 100 号单元元取出 5,第 220 单元取出 3,做加法运算等于 88。将来是写入了第 100 号的是吧?100 号的这个就是说看你接受不接受,你能接受 OK 就是 A 一的内容。A 一运算之前是存放运算数的吧,运算之后存放结果,你说能够接受这件事,二级主体使用是没有问题的。同样我们给出他的一个执行二级指令需要缓存四次?跟三组是完全一样,要休息分钟。对,你们把作业交一下。
我有一。
蛋糕还是。
好,那么咱们学习,刚才我们说了这个 21 指令,尽管我们少一个情形,存放未来运算结果 A3,但是它的访存的时间复杂度跟 3D 是一样的,也就是说还需要保存四次。好,下面咱们接着学习。我们刚才学习的 2D 掷 4,就刚才四定制、二定制、三定制、二定制。
下面咱们看一下一地址指令。一地址指令从这个结构上只有 OP 和 A1,那么对于一个双操作是双操作数指令来说,光谷的 A 一肯定是不够是吧?因为两个操作数,你光给一个操作数定制,那么就意味着我的第二个操作数地址需要隐含给出。
大家看一下 ACC。括号 OPA1,然后到 ACC。ACC 这有个概念,我们称为累加寄存器。这个累加寄存器 ACC 它是要你要让你整明白。你需要看一下咱们书上第七章指令结构,就是指不需要第七张。第四章下一张转角运算器是吧?其中这个 AMU 算术逻辑单元算器中,它有两个输入端。其中一个输入端会接一个累加寄存器,是临时存放这个运算数的。
那么大家看一下 ACC 累加寄存器是我们 CPU 内部的一个通用寄存器。当然我把它定为什么 ACC 是一个通用寄存器?ACC 它的名称 A 是哪家寄存器?大家发现用了 ACC 相当于是隐含的操作数,用什么样硬件的一个寄存器进行存放。而且大家发现这个一地址指令运算结果也是放到 ACC 这里面,是没写入到主存里面吧?这也是进一步优化它的运算性能。
就是我说执行一条指令,执行一条一级指令,它的时间复杂度是不是要降低是吧?你可以现在可以猜一下执行第一条一定指令,我的访问次数是吧?取指令。访问一次内存取 A 一对应的是一个操作数,在访问此内两次,不可能有第三次。因为什么?我结尾放在 ACC 里面,ACC 我刚才说的是 CPU 内部的专用寄存器在通用寄存器,通用寄存器又是硬件是吧?
同样大家可以看一下。你看加号 100,其中这个 100 里面放 100 号单元里面放 3。我从 ACC 里面取出我的操作数五与 128 元里面所存放的三做加法运算结果我是不放在主存里面,是直接放在预算,就直接相连一个专业户通用寄存器 ACC 因此我们就是它的访存是存器两次。
发现这个二三地址,二地址它的执行一条 3D 指令,执行一条 2D 指令,它的时间复杂度是一致的。只有变成一地址指令,它的时间复杂度才会降一些,是吧?降了多少呢?降了一半叫报警。
好,下面咱们看一下极端情况,零地主主义一定是指令,也是指令中只给你 OP 不告诉不给你任何操作数据。那么这个怎么去怎么去执行呢?大家很多人都有疑问,你前面几前面无论是理论的四地址、三地址、二地址、一地址,我都可以执行零地址指令,事实上这种临跌指令是比较特殊的。这种特殊的聆听指令跟存放数据的硬件结构,或者你的数据结构中所学的某种数据存储方案是密切相关的。
大应该是一年以前的,完全记不得,应该是大一大二大二。你们学过数据结构是吧?数据结构我们讲了各种数据的表示方法?数组、链表、队列,还有一种我不知道大家能想清楚,对这是吧?
堆栈我们是数据结构中是按照数据管理的角度去说它是什么后进先出?那么配合堆栈使用我们硬件,对于存储存空间我们也可以设计成。就说白了对于储存空间的存储操作的约定,我们就采用后期建筑就是实现堆栈操作。那么堆栈所对应的操作指令都是零地址指。也就是说这个临时指令是与堆栈这种数据结构密切相关。比如临界指令是专门为我堆栈这种结构而设计的指令,不属于这种通用型是吧?
好,这个到我们后面会讲堆栈,到时候我们再说。咱们数据结构里面讲的是软硅干,我们还有硬件,咱们待会儿这个奉献在这再说。刚才我说了,我们刚才花了一节课左右时间讨论了一下有关指令中的地址码的个数?四地址到零地址 5 种方案。到底你作为一个设计者,在进行一个处理器的指令系统设计的时候,采用哪种方案呢?没有统一的说法,一句话,仁者见仁,智者见智,这是第一点。
第二点,你要根据你这种操作,这种 CPU 的设计一定不是一个通用机型。不是通用 CPU 的设计一定是针对特定领域的处理器的设计。那么你就要考虑一下,你特定领域的处理器的设计,你追求的是什么?目标是高速还是强调稳定性?
比如说咱们 CPU,咱们的 CPU 现在美国对咱们国内封锁是封锁 14 纳米以下的工艺,对吧?就是 7 纳米、5 纳米、三钠纳米、两纳米以下的这种顶尖的这种处理器的制造工艺。国外在对咱们分析,这种处理器它的特点是什么?实现相同的操作,我的处理速度更快,功耗更低。但是你说你这处理器不追求高速,不追求不关心工号是吧,我只关心它的可靠性?
高可靠性什么叫高可靠性?比如当以前说的有什么什么段子,到冬梅零下二三十度抛出苹果手机,关机了,掏出华为手机怎么着?那么它反映了什么?我处理器的高可靠性?高温低温对于这个 CPU 的这运行都是有影响的对吧?你追求什么样的处理器的设计目标,你决定你用什么类型的指定设计,哪种指令有优势?
我是这个意思,就不同的追求的目标,你的选取的处理器的硬件设计的指令系统的指令结构都是有区别的。你还说所有的指令你都可以设计,都可以拿回来用。除了 4D 指令,就是存在于设计之设计师的草稿纸上。三地址、二地址、一地址、零地址你都可以拿来用。但是拿到底拿来拿哪一个用呢?就看你设计一套指令系统,你的追求目标是什么?高性能还是高可靠性,还是什么什么?我们就给出了一个。
从缩短程序长度来说,增加操作的便利性来说,3D 指标有效的。但是缩短指令长度,减少访存次数,简化硬件设计及地址比较好,给了两个极端。三地址怎么样一地址怎么样?一地址最大?就可以减少放松次数,简化硬件设计,用一级。
但是一级指令最大的一个现在一个不太好的一个方面是什么?指令的可读性差?指令可能性差。因为现在的咱们的硬件这个成本是快速降低,宏观的现在大家已经不关心我的主动空间有多大,我的态度有多大,在过去我上大学的时候,我们学第一版汇编,原因是我们一个十六十。刚才讲的是什么?8086 汇编一个存储空间就 64K 是吧?你在六四 K 里面去怎么怎么去做写文章,写什么的?现在这些都没有问题。
因此从现在来看,应该来说从指令的可阅读性、可识别性来说,3D 的指令,3DN 指令是比较好的是吧?比较好。当然我们说这个设计理念跟你的目标是密切相关的对吧?我只能说宏观,但到你微观你到底是你要干什么,那就另说了,对吧?
我们举了一个 A 乘 B 加 C 减 D 除以 E 加 F 这个小学生做的四则运算。如果我用分别三地址、二地址、一地址、零地址指令进行实现。大家可以看出来它的总的代码行数是多少,它的时间复杂度是多少?等等看一下这些指标。而且再看一下可程序的可读性。
对于三角形。大家可以看一下。其中 MUL 乘法 ABD 加上 SUB 是减法,DRV 是除法是吧?那么大家看一下,我用 3D 指令只需要五条指令就可以实现。每家准备返回四次,总共执行这四个运算,总共保存了二我。
如果用二级指令完成相同的工作,大家看一下。我写了七条指令,这个大家自己去看一下,我就不展开说了是吧?其中算术逻辑就是就四则运算,加减乘除是算术逻辑指令,每个人返回四次,目前是一个传输指令,它保存三次,总共同样完成这个四则运算需要保存 26 次,仿真 26 次。打开看一下,2D 指令可读性要比 3D 指令要差一些,而且对应的时间复杂度还高于,对不对?这是这个同理一级是指令,那么我们可以看一下。我用九条异地指令完成这四则运算,每条指令缓存 10 2 次左右,执行了 18 次访存操作。
一定指令大家发现可读性是最差的是吧?可能性最差,但是它的时间复杂度要小一点,对吧?这是看你怎么去追求。目前宏观来讲,主要你要没有什么大的特殊要求。
一般 3D 指令的设计什么比较好发?因为这个指令设计的可读性要强很多,这种就不太好。当然你说你要当黑客,做网安,可能这种越是别人看不明白的,估计就是吧。因为咱们学校也是有保安局的,是吧?这个估计对于他来说,这种的程序是最好。别人看不明白,我看不明白,我就可以当宾客?可以干干干事。
好,那么还有个留个小尾巴,就是零地址是吧?零地址是也可以实现这个运算。这个我们在讲完堆栈那一小节,就咱们后面咱们这个后面小节里面之后,我们再进行讨论。好,刚才我们讨论的是指令中的地址码的结构,从 004 地址讨论到零地址。那么从接着把地址码我放一边,我们单独讨论一下指令这个 OP 操作码,看他能够学习到什么是吧?
我们再看一下这一件事。首先大家说在责令系统中,每一条指令都有唯一的 OP 操作码。为了这个,像你说一条指令的操作,为到底谁来决定的?实际上有整个指令系统的整个指令系统的指令的总量来决定以 OP 的位数是吧?OP 的位数,然后我们这说起来都很抽象,我们举的例子都是四五十年以前的事儿?不是现在的宏观的讲,我们的指令的操作码设计分为规整型和非规整及两种形式。
什么叫规整型?规整型就指令的 OPOP 操作码的倍数。都是什么相同的,就不管指令总的程度,有的指令是 32 位和 64 位,有的是 128 倍是吧?我不管这指令的总的这个长度有长有短,但是无论是 32 位的指令,64 位的指令,128 位的指令,它的指令的操作码都是八位,都是 16 位。对于这种指令,我们称为规整型的操作法?我们的操作法指的是这个,归根指的是什么操作法,这数都是相同的。
其实要有两个不同的概念。对,一定跟我们刚才开始讲的什么定长整顿,次数变长整顿和规则非规程一定要区分开。定常和变长指的是总的指令的长度。
而我这里讨论的是什么指令中操作码是不是都是八位,都是 10 个 5 2 两个不同的事情,有可能是定场指定的一些结构,而采用非微整形的操作码设计?总的都是四位的指令。当然有的指令操作码是四位,有的指令是八位,我们 16 位是吧?还有的都是可能你看有 32 位指令,有 64 指令,有 128 种,128 位的。但是无论你是 32 位还是 64 位,还是 128 位,但是它的操作码都是八位,都是用为什么?那这就两个不同的区分的长驱区分的方式,这点一定要弄清楚。具体讲,规整型超过码字段的位置和位置是过去的。
假定指令系统有 M 条指令,那么指令中操作码字段为单位,他们之间的关系是吧?这个我也在座各位都很清楚,就相当于什么?2 的 N 次方就是单位,二进制数能够描述 2 的 N 次方的状态,要么大于等于 M 是不是这个意思是吧?那么你把它描述成。我是用指数,这是对数是吧?OK 就是这个东西大理?
那么说等于的话是最好,但是一般情况下肯定是大于对吧?大于能保证你所有的指令都有唯一的 OP 操作,而且你可以进行整理系统的扩展,对吧?然后我们这几年做整体的扩展也很少,都是自己搞一套,尤其是基于 C 叉 86 架构的,现在都是自己搞。比如说我们以上世纪 60 年代 RBM 最有名的大型机系统 RBURBM360370。
上个世纪 60 年代大星期大家可以看一下,它的字长是 32 位。他指的有 3 种长度,半字长 16 位,单字长 32 位,一个半字长 48 位。也就 RRBM370 的指令系统中,指令的总长度有 16 位的指令,32 位的指令、48 位的指令。但是这些指令的对的操作码一律是把位。一律是八位。
因为为什么呢?因为 RBM370 它的大型机,它的处理器总共设计了 183 条指令,就是 183 条机器指令。RM340 的处理器只有 183 条直,那么 183 条根据我们这个计算关系,2 的 8 次方 256 是吧,那他是啥了?
我们列出了 RBM370 这 16 位、32 位和 48 位指令来个结构。大家发现不论你宏观的讲这个指令系统,什么叫变成指令系统,但是它的 OP 操作的设计遵循了规整型的 OP 的设计。这个是一种形式是吧?这是我们阿平 370 的这个结构。宏观的价值。尽管我们总的责任程度有变化,但是由于 OP 操作是一个正常变化。这有什么好处呢?它可以简化硬件设计,减少一亩指令一码的时间。
这个可能大家说起来可能大家都说了,我只能说先给你抛个砖头,到第七章学 CPU 结构的时候我们再说是吧。那么事实上对于一个 01012 进制所表示的指令,我们 CPU 内部的控制器要把它翻译是吧?翻译什么?
我们把抽象的 0101 转变成具体的 CPU 内部的动力,什么 PC 加 1,什么哪个寄存器输入门打开,哪一个给加码器的某一个输入端去进行质疑等。我要给出具体的印这个第二次期间印鉴动作的最终的信号和命令是吧?这个需要把抽象的二进制转变成具体的电器部件的具体的操作。这就是我们计算机组成结构所要告诉大家?你说这是咱们你们所学的所有的课讲的所有理论,你要落地,要驱动计算机执行,是由咱们这门课告诉?怎么到底是怎么去变成这个?这个应电子器件的动作,就是想不能够告诉大家,我们先讲指令的结构?先告诉你只是我这个 CPU 我能够干这些加减运算,加减乘除的运算。
等到第七章干什么呢?拿出每一条机器指令,我把它剖析,剖析成什么?我的电子设备的具体动作不一样?好,非规整性指的是什么?
指令操作码字段的位置不固定。我们以 PDP 杠 11 这种上世纪很古老的一台机器为例。大家看一下 PDP 高幺这种机器是一个 16 位的微型机,它分为单次查。两字长和 3 字长分别对应的是 16 位、32 位和 48 位。而且它的操作码字段不规整,有的是四位,有的八位,有的 16 位。咱们可以看一下,这种形式由我们给它取开他的指令的结构图。由于操作了字段的位数和位置不固定,增加了指令的译码和分析难度?
这个肯定要比起我们归整型,你的一码复杂程度要高很多?使我们的控制器设计更加复杂。大家可以看一下我们 GDP 杠 11 这种指令,有 16 位的指令,有 32 位指令,有 48 位的值。大家可以看一下它的 OP 有四位的、八位的、十位的、13 位的、16 位看看。但是大家发现它是也是有有规律可循的,是吧?他是以 16 位单字长指令为主要进行 OP 的扩展。而 32 位和日和 48 位的指令,它的 OP 都是四是吧?
有变化的,没有变化的这也是一种问题讲话的一种手段。你说我把单子长城站四位、八位、10 10 位、13 个人,16 位放在 32 页到 48 页的指令员进行设置,情形也没问题。但是这事情就比较复杂了,是吧?我们肯定是不能把事情做的太复杂,太复杂了搞个计算机就没法做是吧?
而且现在有人说了,我们的硬件资源极大的丰富,因此我们尽量将武器,当然说当你遇到一个特殊的处理器设计,这就是一个钱给你的一些一些什么借鉴的材料?给你们设计这么多这种特别不一样的指令系统,对吧?那你起码有一个参考例子,对,你可以看到 PDP 杠 1 指令系统怎么设计。那么他对 PDP 杠 1 的处理器是怎么设计的,是吧?
这个软件关注一下,到了我们 CPU 级的指令系统的设计,大家一定要明确一点,是什么硬件决定软件的设计,就是你有怎样物理的硬件设计决定了你的指令系统的设计不是倒过来是吧?这个一定要弄清楚,倒过来也有倒过来的办法,但一般情况下我们是先有硬件再做软件,对吧?因为你要说是我设计完责任系统以后,你跟人家给我设计硬件行不行?大师级的没问题是吧?他说啥就是啥,但是你没有到那一步,一定是先有硬件,有怎样物理结构决定你有怎样的职能的设计,是倒过来。等你大师你问你世界就你权威是吧?那那倒过来你画两笔的将来就成了这个是吧?放在博物馆叫别人看不一样。
好,最常见的非规整型的 KM 我们对应的称为扩展操作麻烦。具体的讲让这个操作数地址个数比较多的指令对应的操作码短一些,让操作数地址个数比较少的对应的操作模长一些。根据也就说就是你 OP 长与短跟你的指令的是三级指令还是二级指令,还是一级指令是密切相关的?为什么我们先讲这个地址,然后反过来再讲操作码的原因就在这两个配合。如果你是三级指令,你对应的操作这个操作数的地址占用的存储空间多一些,那么我对应的给他 OP 分配的空间就小于。如果你是一级指令,你这个地址空间占的相对少一点,那么这个 OP 就多给他分一些,这两个是相辅相成的是吧?
好,这个就是讲我们宏观的指令系统和设计问题。在咱们教科书上我们有四大设计问题,这是第一段就指认系统的设计,这是第三章。第四章是有关运算器,运算器也有运算器的设计。这第四章第五章有存储器的设计,第七章有微指令系统的设计,这是咱们计算机组成的体系结构的四大设计。我们除了下一章第四章运算器的设计不要求,剩下都要求的。这个讲清楚是吧?
一说起这本书很厚,但是你要学明白,还是有名堂的。比如说第三章他就考个设计,考个计算。那你要想清楚这边的设计其实讲的什么东西,计算题讲的什么东西。
第三章指令系统设计就是讲的扩展操作码的设计。那么计算有效地址一 A 就是我给你在指令中我给你是操作数的?大家知道我们的 C 语言中学主动是吧一级指针、二级指针、三级指针?把那指针的那个套路拿过来,我们就有操作数有效地址一页计算题只是说第三章主考大结束就这两个。
第四章运算器二进制的乘法除法,就是这本书考什么?我就说我我的这个比如我的那个总部席,现在给大家一个问题,这都是什么?我上课给大家讲的,要求的就差不多。当然我们说的话好,咱们虽然是 985 院校,比起某些 985,咱们的要求我个人感觉低很多,真是听是吧?要真让你为难大家,我估计我能保证咱们有一半同学不忌讳。真想为难这是很容易的事是吧?那我们没没那么做的那么夸张是吧?
好,那么大家一起来看一下,就这道题我们说某一个机器它总的指令长度是 16 位,操作码字段是四位,有 4444 位地址码字段。根据这个题干我们画出了决定结构。希望大家录下在第三章在进行,无论进行什么指令的设计问题,还是只能计算问题。
第一件事要根据题干画出这个我们上课的时候,这张图是直接划给大家。事实上在座各位尤其在做第三章课后作业的时候,往往这张不是不给你的,你一定要根据题干的内容画出指令结构。大家可以看一下它这张图,我没有这个结构,你从题干我们读出来,大家可以看一下。
第一句话,某机的机器自长责任的长度为 16 位,就决定了这个总的框框是 16 位是吧。然后他告诉大家操作码字段是四位,你 OP 是四位是吧?三个四位立减码字段,A1、A2、A 三这三个地址,每一个地址是四个,总共是十多个是吧?也就是这个指令的结构图,我根据题干,我每个同学在草稿本上都能画上。考试的时候我是不给你的,是吧?这是我们教学部给你的,但是你从提提概念结构了。
好,如果按照传统的四位 OP 按照定长编码法,我只能设计出 16 条不同的 3D 指令。还说这个 16 位的指令采用定长编码法,我只能设计出 16 条 3 地址指令,十六条三节制。如果我采用非规整性就扩展编码法的话,那么大家可以看一下,当然大家注意一下,我既然讲到了这是一道设计题是吧?
一句话,咱们这个教授给我的名单里面是有 120 多位同学。可以这么说,每个人设计出就基于这个题干,设计出独属于自己的指挥系统。120 多位同学,人人个个不一样,都没有问题。我们说这个社的问题是千变万化,对吧?刚才我说了,咱们这个教学班里面有 120 多位同学,每个人设计出属于自己的东西都没有问题,这个都能做到是吧?只要你细细抠都没问题。那么我给大家给出的这个设计方案,只是其中最最普通通的或简化问题的一种方案。
大家可以看一下,首先我们看一下,默认情况下是 16 条、36 条三级指令是吧?假定我的 OP 这四位我只用。我只用什么十五种状态,那么这十五状态是连续变化,从 000 跳变成 1110。比如高四位,高四位的 OP 部分,我顺序变化 000 到 1110,就是说这种是十五种状态,我设计出 15 条 3D 留一个扩展状态,就留一个状态,就是说 OP 最后的变化状态,四个腰椎的状态,我不代表 3D 指。
大家看一下,我这里面只涉及了 15 条 31 条是吧?那么我留了一个 1111111 的状态去设计一个二地址指令。大家可以看一下,此时大家可以看到 OP 由四位变成八位,我的地形码变成两地址的指令。
我们进行扩展,这扩展的思路跟我刚才的设计思路是一样的,我也只设计 15 条 2009,大家看一下这十五条二级指令的特点是什么样的。这十五条二级指令的特点,OP 是八位,但这八位中高四位始终的是四个 1?这紧接着的四位是由 000 跳变顺序跳变成 1110,这是十五种状态,那么这我也设计出了 15 条 3D 指令,按这个思路是不是我也可以继续设计出 15 条 1 地址指令?这 15 条 1 级指令的特点是什么?ED 指令特点是什么?OP 是 12 位行驶地址,AD14 位,这 12 位 1 地域指令特点是什么?高八位权威音标是吧?
然后后面这四个请求不法一讲 9000 盗窃是 111,这是十五条。最后我设计出 16 条,另行继续执行。那么 16 条指令的特点是什么?高 12 位全为 1,最后四位 100 顺序并顺序跳变为 111。这种我设计出了 61 条,就这指示系统我设计总共一共有 61 条。好,咱们休息先。
我说一下咱们的教材,我想可能很多都拿到了。这里面教材它在不同位置上有那种二维码。那么刚才我扫了一下,应该是应该有对应的这一小节的什么,应该是贾老师的视频讲解。如果大家对这一小节有问题的话,你就扫咱们的教科书上对应章节的二维码。
刚才我扫了一下,直接就是对应这一节的讲解,估计是蒋老师我没听,因为刚才我没放,但是我就说大家可以好好利用一下这本书是吧?当然他讲的内容。跟我讲的应该差不多是吧?大同小异,有的可能粗一点。因为我过去说了,我当年跟蒋老师一起上这门课的时候,我借我第一年上 72 小时,现在是 48 学时是吧,过个国庆节又减三个学时是吧。咱们这还算好的了。我中关村有一门研究生课,32 学时,两次上门,周五晚上 32,火车站便当 16 小时是吧。也就这本书很多地方都有二维码,学不会可以扫二维码直接听蒋老师讲的,好吧?
这个书还是我觉得以前以上一节咱们还用的。是刚才我看有的人拿着就清华出的是吧?蓝皮儿配套教材都差不多,只不过就是把第五章我那天我翻了一下书,这是北邮给我发的证书,第五章他一分为二,剩下的变化不大,就是跟老的清华出那一套教材相比。一个是第五章分成了第五,第六章就把开始单独一章去学习。
然后把我们过去的第八章,万盛他和其他章节做了一个融合。其实万盛我们很多年我们都讲了。另外设他讲的什么 CRT,CRT 应急射线管理,那个显示器的工作原理,真是打自己机的工作原理,键盘打印自己机的键盘的工作?我很多年我们都不讲?没什么可学的。
而且过去我们讲蒋硬盘,蒋温切斯特基建,你现在就是看了你那些东西有什么好处,对吧?比如说这个回头大家我意思说什么呢?这上面的很多二维码你扫一扫能帮助你学习一些东西,是吧?既然贾老师有这样的教材,有这样的配套服务,你干了肯定了是吧?当然说抱歉讲我这个教材也都是开课之后很长时间我才拿到的是吧?你看我基本上都不用你了是吧?
好,刚才我就把说的事再给大家说一下。刚才我们只是设计了就比这道题我们设计了 61 条指是吧?那我这是什么?每一个比如说二级指一三级指令、二级指令、一级指令我分别留了一个扩展窗口,我设计出 61 条。那么你比如说三级指令,你留两个、三个或者窗口,是不是这结果就不一样了,对吧?因此我说了在座的总共有 120 多位同学,每一个设计出与别人完全不一样的指令系统都没有问题是吧?奥妙就在这,我的扩展窗口给几个,我现在简化问题,每一个只给你一个框窗口给你比划了一下。其实有的情况下我多设几个扩展窗口,是不是我指定总的条数就是一样的,是不是?对。
好。这是指令的结构,由指令结构就指令分为 OP 和地址码两部分。地址码我们讨论了 OP 我们讨论了。给出了什么?我们第三章第一个关键问题,指令系统的设置问题。
刚才我说了第二个问题是什么?有效地址 1A 怎么计算?就是我们对应的 3.2 这一节,咱们我先加入一下,我现在用的这个 PPT,应该是跟清华配套的说的 PPT,但是我觉得差不多,咱们教材我看一下,这些基本上变化不大。因为这个大数据给大数据上的王成老师也是参与了一部分编辑。我问了一下,他说变化不大,因此我也就 PPPPT。我忘了那个有我有最新版,如果大家觉得需要的话,你可以联系我,回个部,你给他发一下。其实这个不大好,咱们看一下第二节,就第三章里面第一节很重要,有个可能性的设计问题。
第二节寻址技术是我们第三章第二个问题,有关有效地址 EA 的操作码,操作数的有效地址计算问题。这个有个寻址方式,我们会讲 9 种方式。那么。寻址方式寻址。这里我们第三章 3.2 这一节讲的巡捕技术。
寻址的概念它事实上是宏观的讲,应该分成两个方面。一个是寻找操作数的地址,这是咱们重点学的。还有一个是寻找下一条将要执行的指令地址。因为大家注意一下,我们先说下一步,就是寻找下一家将执行地址。刚才我们说了 PC 加一就是下一家项目执行地址是吧?但是大家注意一下,PC 加一的那个一,我们是要打引号。PC 加一的一是要打打个引号的。某一年 408 考研真题就考到这里,咱们课后练习一道题完全一样。
也就是说现在说句不好听一点,这个命题老师是哪个?他什么风格是吧?大家有看网上都有老师说是吧?对,这都是比我们最大的一项是吧教师,他的很多风格我们都很清楚。那么大家都想要 PC 加一的这一是一个打引号的?咱们课后练习有一道题看一下。
67 页的是哪一道题?
68 页就是人就是就人有版的 68 页。第 18 题我们可以看一下,60 就是 69 页 3-18。这道题在咱们教科书上出现了,有 25,有一年这道题氧化成 408,正考虑到题,你们去看一下好吧。
那么这个就这个第十八题就是考核的寻址中寻找下一条将要执行的指令地址的问题。你们可以看一下。那么咱们重点是讨论的是什么?在第这一节重点讨论什么?寻找操作数的地址,而不是说下一条将军地址,下一条江路军地址,用个 PC 加一就 OK 了。但是 PC 加一如果要搞出花来,课后练习第 18 题就告诉你,给你搞搞坏了是吧?
这道题是一个应用小题,408 这个小题它是一道小题。好,下面咱们看一下第一个问题。讨论选址之前,我们先看一下存储器中计算机主存中存储单元的编制方式。你先搞清楚存储器中就是我们储存中每存储单元是怎么进行编制的。搞定这件事,你的荀子就好做了,停止学习。明白,这你要搞清楚编制。
在座各位都是咱们理工大学的学生是吧?你来理工大学以后,你一个同学每个同学有学号是吧?每个同学有学号,还有什么宿舍号是吧?一般咱们这个宿舍应该是四人间是吧?还有八号学苑什么什么学院多少班,他们应该是瑞信学院多少班是吧?有班号。你想你一个人是不是打了不同的标签,唯一的对应的号是学号,但是你还有宿舍号、班级号是吧?就是说同样一个人,他有不同在不同环节他有不同的号,这个跟我们编制是极其类似的,编制极其类似。
一般来说在计算机系统中需要给出地址的有 3 种类型的设备,一个是 CPU 内部的通用机器人。比如说我们学那个汇编语言,我们经常有什么充电仪器的编号,什么 ASAHAL、BSBHTL 那么这什么 AXAX、AHAL, 这就是我们通用寄存器的变化。AX 它是个 16 位的,分为高八倍 AH 和低八位 ALPX。同样这是我们 8086 汇编语言对于 CTU 内部通用寄存器的一种编号,这种编号就相当于它的?
除此之外我们还有主存储器,就我们的内存空间,我的地址打我们内存空间的地址这块我们讲的比较少,为啥呢?因为是你们。这个学期下学期学操心,你们这学期学操心了吗?没有是吧?
那就下学期学操作系统。因为咱们现在这个专业有几年是我们和操作系统老师一起同一个学一起看,有几年是我们线上操作系统上,咱们软工专业应该是分开,就下学期是你必须要操那计算机那个计算机科学技术专业是先学操作系统,然后再下学期再去报来了。咱们是咱们这门课再讲是吧?对于主存储器的存储空间的管理,我只讲一半,我只讲一个非常简单的一部分。大部分在你们下学期的操作系统这门课,OS 操作性这门课去学习。
这是主存储器,我只是讲一些很简单的填上硬件的东西。除此之外各有 IO 设备。现在设备比如说我的硬盘,我的这个软糖,或者其他的这种设备 IO 设备,它也有存储的需求,我进数据库传说,我比如说我的信息是从 U 盘里面读出的,这样显示出来的,或者是我在这做修改,是不是还要写那个 U 盘里。这个过程都需要外设的存储器件及工作?这个外设的这块内容我们会放在第八章讲我们外设对 CPU 和外设就 CPU 和外设。他可以帮可以看一下第八个,这是 CPU,这是外部设备。比如说这是一个基建引发。谁都直接和他进行通讯吗?
告诉你不是他这个需要通过一个控制器,我们称为金。Interface 是吧?接口的概念。这个概念千万别和你们的程序写程序那个接口对应起来。我们的接口是有专门的讲究的?应该来说是先有了我们硬件的接口,才有什么 java 源的或者派送员的,就加外源的这个。
这个接口事实上是 CPU 访问外设的中间文件。大家听清楚 CPU 不能直接访问,比如磁盘、显示器,一定要通过接口一个中间环节进行一个过渡。为什么 CPU 速度快,外部设备速度慢,你不可能用高速设备去等低速设备用一个接口这样一个部件做一个缓冲。
缓冲这里面有什么?数据?暂存器实际上对外设的胭脂,你以为真给他进行编辑?不是,是针对接口的数据缓存器件这些缓冲寄存器给他进行编,你要不进行优先,不给谁给,别弄了半天都学没学明白是吧?因为比如说我们的机械硬盘,我的固态硬盘,这个叫什么文件系统的,可又又又跟跟跟那个又不一样是吧?跟我们的这个内存空间处理的不一样,是用纸零件起的这个编制。首先大家一定要弄清楚,我编制给谁编制,别弄了半天没编明白是吧?
通常 CPU 内部的专用寄存的通用寄存器,现在我们发展成为什么样?开始高速完成寄存器,一级开始,二级开始,三级开始,这是由我们 CPU 内部的通用寄存器拓展出来。主存储器就我们内存空间和外设,就是我们的外设关联的这接口的这些器件。这些数据暂存的存储单元,这是要要给它进行地址编号的。
主存和外设接口的这些东西,这些存储空间地址是我整个个体编制还是分开进行编制,就引出了我们编制方式,独立编制和统一编制。比如 CPU,比如说英特尔 CPU 就是是独立编制?就 CPU 就 C 英特尔 CPU 是独立编制,但像 ARM 还有其他的一些架构,早期的就是统一编同一个。这个请大家注意一下,不同的处理器,它处理的方法不一样。其实你说你有什么区别,没啥区别,只不过是当时设计者就这么设计的,结果大家都认可这件事而已,对吧?
好,首先咱们先弄清楚,我给实际编制下一个编制单位。这里的编制单位我们讲三种,分别是自编指。编制单位就访问了。这是早期就是说我给你的地址,给你的字地址就意味着我数据访问的时候,把这一个地址中所有的存储单元的信息全部读出来?这是早期我们在 C 计算机在早期做科学计算的时候,我给你数据,我还嫌这单位这边的地址太小了,为什么?我因为我有时候我算的数很大,你给我空间小了,我还存不下来?因此在为了配合当时我们就有一个自愿者。
这是自编制。也就是说每一个编制单位所包含的信息量与 CU 进行一次读或者写寄存器或读取中所获得息量是一样的。早期计算机按照这种编制方式,那么这种自编制就相当于每个同学所拥有的八号。
我说咱们我会上课,上一次课要求几班同学交作业?你说你只要是这班的同学交这个交作业,那么自编制相当于于咱们学校的每个同学说对应的单号要听清楚是班号是吧?这是自定义。这就意味着咱们的班是不是你看都是不同的班,但是每个班的人数是一样的。因此我们说每一个字地址所包含的总的这个二进制比特位数是不一样的。这是自编,都是刚才我说了这个自编相当于这个自编制,相当于咱们的八号。
不同的花所包含的人数是不一样的,同样都是自编制,所含的量是不一样的,信息量是不一样的。就早期计算机之间,早期由于我们主要做科学计算,用这边有问题,但是后来我们要适应什么?这个非数值型数据就是非比如说非数值型数据处理需求,比如文本、声音、图像,我们就给出了字节制。这种字节编制主要为了解决计算机处理非数值型数据的需求,给出了资金编制,是目前我们主流的编制方式。
按照咱们这个学校的这种关系的话,字节编制就相当于大家的宿舍号。我默认所有宿舍都是本行校本科和硕士,这个是色间是吧?自己编制就相当于宿舍房。
在我们计算机里面为什么引入字节编制?主要是解决非数值型数据,叫什么字符、图像等等这些非数值型数据的处理。因为你像一个字符就是只需要一个字节是吧?你要去区分的话,那肯定要区分每个季节,就是自己编制。
通常如果按照字节的话,那么一般我们储存的仿生单元是编制单位或单位。比如说我们储存都是按照字节编制,但是我们操作系统,比如 64 位操作系统,它的一个存储字,一个字体是 64 位,那么它对应多少个字节?8 个 64 位对应八个字节,你说这个字地址包含了八个字节地址是吧?刚才我说了一个 64 位的,像我们家一般都是 64 位操作系统。我假定一个字迹是 64 位是吧?这种四位里面是包括八个字节,连续的八个字节。我现在就有个问题,你这八个字节,每个字节都有自己字节进去,那么你说字地址应该是这八个字节的中的哪一个字节的地址,对吧?这八个字节地址对应一个字母,那你说这个字迹应该是哪一个字体?
其实如果简化问题我就抓着,要么是这第一个字节地址,要么就后面你们就是连续的是八个字节是吧?连续八个字节的话,有同学你插空间行不行?可以,但你不觉得太烦了吗?对吧?就在跑 N 或者 N 加八是吧?
这个我们后面我说不是白说,但是我们还会问到这件事,就是字节编制还有一种极端情况下叫未编制。就给每一个座位都点这个位编,就相当于再做一个学号字字编制字节编制未编制对应的八号宿舍号学号 OK。这我把这个应该给大家说清楚。那么非常在计算机出现了非常早期的时候出现过未编,就给每个底特律我都编进去了是吧?
咱们看一下这个就是说指令中的地址码的位数。我看一下。
这块蒋老师也讲是吧?咱们的人人原有版的这个寻址方式就是 50 页寻址方式是有二维码。没错,可以不用讲,你可以听听蒋老师讲的就行了。但是这块大家注意一下指令中的地址码的位数。那么指令中在指令格式中,地址码的位数是与主存容量和最小选举单位直接关联的。储存容量越大,所对应的地址码位数就越长。相同容量的话,如果按照字节编制,你自己编认为修理单位的话,那么地址码要更长一些。在这儿我就不想去念这东西了,是吧?
我们给个例子是某机从这开始,这个需要大家注意一下,我们未来可能会考核大家这一点。设某机储存容量,为什么二的 20 次方的次级 22 次 20 次方的资金是多大?是不是一兆是吧?1K 是 20 次方一兆是二的 2 次方,二的 30 次方是。二的 40 次方是一 T 好吧,就咱们的这个 K 兆 G 是。对应的它有多少个次方?
比方说这一个某一个主机储存容量是一兆,机械词长是 32 位是吧?如果最小学生单位是 2.49,他的地址码是 25 位。如果最小学生单位是为四,那么地址码需要 18 个。这个能不能看明白?
这个我们是一个经典的考核的点。无论你是用字节编制还是用字编制,我们说他总是对于主动中间的整个信息上的一种主动中间是按照字节或者按照字长进行一个划分。因此比如说刚才我们说按照字节编址是二的 20 次方。二的 20 次方是包含的是这个主动空间所包含的自己无数,每个字节是多少倍?八位,22 次方乘以 8 是不是描述这个主机主存的所包含的总的二进制比特位,是不是 ok。此时我说了,我的停止方式变成什么?字那么乘乘了 2 的 X 乘以一个字是多少位?32。我列出了这个公式之外,大家发现我考核会考核什么样?我把我考核的点用红框框框出来。
按照题干,因为这题干里告诉大家是不是这个 X 应该是 18。
123。啥意思?这三个红框里面框的东西。刚才我们求的这这个十八?如果我让你求这个字长,或者是按照字节跟你的这个二进制的倍数能不能求出来,是吧?很好,这三个红框就意味着考试的时候我随便拉一个空,你给我填填上,明白我意思了吧?期末考试咱们看一下大家的水平是吧?这个计算过程我不讲是吧,以你们的水平没有任何问题,ok.
那么这个公式,这个计算等式原来由是什么?我说的很清楚。2 的 2 次方乘以 8 描述的是这个主机所能存放的总的二进制比特位的位数的总量。无论你是用八位为单位,还是以 32 位单位,还是多少位为单位,你的公司给出这个公式等价公式的是吧?也就这个公式里面,因为字节是 8 比特位,这是一般隐含的是吧?这不会考这三个红框框住的地方就是一个,就相当我挖什么坑,你给我填就行是吧?
OK 这个寻址方式,询问方需要我讲吗?那询问方式大家看一下,我们包括两块,主要是一个数据寻址是吧?数据寻址咱书上讲了。这个讲了 9 种是吧?9 种方式我不太打算讲了。咱们既然换了新书,咱就用一下是吧。
回头物上,我把这个教材上的这个二维码,我回头我拍个照,因为有同学我看用的是清华版的教材是吧?拍个照回头可以没有人用教材也没问题是吧?我把这个二维码发到咱们爱贝里的课程群里面,如果有需要的可以听一下蒋老师讲一些,我觉得这个比较简单,总共有 99 种寻址方式。
我们首先有两个概念,大家可以看一下这个 PPT 上有两个,一个是在我们指令中地址码部分出现的地,我们叫形式地址 A。利用他我跟我的这种方式找到这个操作是真实有效的证据。一 A 这个过程就要要根据,不能用这种方式来计算,因为德过程是吧?因此我们这有两个概念,形式,地址和有效地址 A 和 1A 那么如何由刑事地址到有效地址,就由我们的寻址购买地。咱们书上讲了九种,其实 9 种比较简单。
第一种是立即寻址,立即寻址是什么意思呢?就是在指令中的地址码部分直接给操作数,对吧?这种方式。现在计算机没有人给你设计指令,因为什么指令?什么是一种。为一个 CPU 提供强大处理功能的,你把这些都直接排给安排上数,是不是他的通用性就买卖?他只能完成用了这个指令,只能完成这个东西算了,那就失去了指令设计通用的价值,等于这种形式就没什么意思是吧?这是第一种,直接立即去处罚。
第二种称为直接寻址,分为寄存器直接和储存空间的直接寻址两种形式。寄存器直接寻址在咱们交通说法称为记忆存取是吧?就是说白了此时所谓直接行就是 EA 等于 A 就这么简单。这个过程我就不跟他啰嗦了,大家觉得这块如果有问题,扫二维码听蒋老师讲好吧。直接行使大家可以看到寄存器第二种我们称为制寄存器直接行使,第三种叫直接停止。
寄存器直接和这里直接存取区别在哪?寄存器之间就是 EH 等于一个寄存器的名称,而直接寻址是 EA 比 A 是吧?这就是当然我们说这种也称为绝对寻。这也是在我们现在计算机操作系统设计过程中,这都是大忌是吧?
绝对机会为什么呢?因为我们操作系统对于主从空间管理都需要动态变化?你直接把这个 EA 等于 A 直接给出物理的组织空间的,只能干这些事儿。健康险绝对不是不能这么干,对吧?好处不用巡视?
直接告诉你缺点与现代计算机储存空间的管理格格不入。什么现在操作现代计算机操作系统强调什么动态装载,今天我装到这一块,明天装到那块?我时时刻刻的变化。如果你要是直接去补的话,我怎么去完成这个动态装载,因为这个都寻觅你,因此跟我们现在计算机的这个需求是格格不入。
好,现在我们主要用的是间接循环,间接句是什么?指令中给出的地址不是操作数字的地址,而是存放操作数地址的地址。就相当于 C 语言中所讲的指针的指针指针的值是吧?那么 EA 等于 A 括号就间接选择权,同样还有寄存器间接这两种形式。
那么咱们怎么去弄呢?怎样区分这是直接循环还是间接循环区?一般来说我们在指令中的超过了这段会设置各种标记位。如果这一位为零,直接停止。唯一是鉴定是这这个鉴定行为标准是用一个圈黑什么,你说我也不知道该这样,该怎么叫是吧?有的是爱,有的说是爱情的事情,现一般叫圈 A 是吧?
这是一个标记位,通过这个标记位是零还是一来确定我当前这条指令取方式是直接还是间接。这个过程凡例子我都不讲,这个就还是我刚才说的,大家下去以后听你讲,我讲好吧,其实大家看就明白,间接我这是给你们是一级间接就指针的指针是吧?能不能出现指针的指针对吧?我们当时学这个指针的指针的指针比较牢固是吧?
同样我们的这个寻址可以有一级间接、二级间接、三级间接。一般计算机后。优点上就不啰嗦,这是符合现代计算机动态内容装载的需求。一般来说都是什么间接寻求。
也是多级间接的话,需要大家注意一下,需要在我们这个储存在储存空间里面存放地址的那个存储器的最高位设计标记位。如果这个最高位大家可以看一下,如果这个最高位为一的话,说明当前的这个地址不是最终的真实有效地址的这个间接吧?然后这位不为零,你要再去我们的下一步,只有这一个人说明找到多级间接。
那么这个答案我们现在是到了指令寻址这一题说的很透是吧?我记得大家应该是在学 C 里面是学指针,是不是指针的指针那个口就扔了是吧?当然也不明白为什么要学这个,现在告诉大家就在这对吧?我们现在计算机到只能是用真不用变量是吧?OK 具体的讲解到了,听蒋老师除此之外,这刚才是寄存器间接形式,还有刚才是存储器的间接寻址,对吧?还有寄存器的间接寻址,只不过是它给出的是一个寄通用寄存器的地址是吧?这个我很啰嗦了,这是前五种,后面还有什么变质寻址,后面还有 4 种,变址寻址、基址寻址、相对寻址这三种寻址方式公式都一样,都是 TC 加入三项,只不过是那个套路是就是套有区别。这个我们下节课花几分钟讲一讲,最后是什么页面是总共是九种,这九种方式我们期末的考试都是要求,好吧,今天课时间到我们就下课。
做我整个努力春晚的。但是像有的,比如说第六段那个写的对,第六章这都是考研问题,这个我们拿不了。那是第二张的话,基本上是交易差不多。内容也就是说第二章,比如第五。数串的不让做对。那看串的话不是有 BCD 吗?我们需要对加前面那个那个可能加我们。讲话个人不要。
奖品是这一套,还有蓝色的青花,咱们都有,咱们就去找了,这还用问我。
我有两个,第一个就是我,我记得上面。出具一个在他就是他就是帮助你二次发现,实在不行,我们把我们的证据迁移过去。后面怎么把车作为是吧?合计还调解所以这两个怎么分,谁为主,以谁为次是一部分,还有一部分就是前面这个环节的窗。但是现在他那个高铁的通信有问题,他用的模拟数据吧,这个分别 1 两三周看能不能改变,反正主要。