问题的最大操作码是多少,答案是c选项,但我认为它是选项d,因为每个地址指定每个内存位置,共有16条地址线,这意味着2 ^ 16个地址,即2 ^ 16个存储位置。
因此,如果每个位置包含一个操作码,则总共2 ^ 16个位置包含2 ^ 16个操作码,这是操作码的最大数量,但是答案为c,即2 ^ 12。这怎么可能?
问题的最大操作码是多少,答案是c选项,但我认为它是选项d,因为每个地址指定每个内存位置,共有16条地址线,这意味着2 ^ 16个地址,即2 ^ 16个存储位置。
因此,如果每个位置包含一个操作码,则总共2 ^ 16个位置包含2 ^ 16个操作码,这是操作码的最大数量,但是答案为c,即2 ^ 12。这怎么可能?
Answers:
所有选项都是错误的。处理器可以执行的(唯一)操作码的最大数量不受总线宽度的限制。
通常,一个12位以上的CPU被设计为每个数据字具有一个命令,因此它可以一次读取大多数指令。因此,将普通CPU设计为2 ^ 12个操作码的限制。
现有的具有超过2 ^ 12 = 4096个操作码的CPU体系结构非常罕见,这仅仅是因为人们几乎不需要太多的东西-太多的东西要学习,太多的东西才真正有用,太多的东西浪费了昂贵的硅空间。
更新:正如评论中指出的,x86指令集的所有可能变体实际上可能总计超过6000个,具体取决于您的计数方式!不过,这更是一个例外。
但是,对于4位CPU,2 ^ 4 = 16条指令通常是不够的,因此许多此类处理器拥有更多指令。
CPU可能包含比数据总线更合适的操作码的多种方式和原因,包括:
处理器不需要在单个数据周期中读取命令-它可以使用多个相应的周期。实际上,大多数CPU并没有-尽管它更常用于指令自变量而不是扩展操作码空间。
示例:intel 4004只有4条线,它们复用为数据/地址线,4位数据字,但在8位指令中有40多个操作码。
(CISC)处理器可以根据需要具有任意数量的指令前缀和后缀。
这些指令以实际指令为前缀来更改其功能-稍微或完全改变。
这取决于您对“唯一操作码”的定义。如果将指令中没有数据的任何部分假定为操作码的一部分,则它们的总数将包括所有可能的变体。但是,有些人认为这些词缀是教学的不同部分。
示例:Intel x86 CPU实际上没有4M操作码。但是,如果将所有前缀都算作操作码的一部分,则现代CPU允许的指令最长为15 bYtes-这是很多可能的操作码。尽管许多人只会做同样的事情-所以这取决于他们“独特”的定义。
处理器可以具有多种操作模式,在其中可以具有完全不同的一组操作码。
示例:intel x86_64具有32位(真实/ v86 /受保护)和64位模式,它们具有不同的操作码。ARM CPU可以具有ARM 32位和Thumb 16位模式。
这些问题说明了“数据线”和“地址线”,但是内部数据总线和内部地址总线都可能比实际总线线宽。
多路复用的总线数据按顺序发送,即上半部分,然后下半部分。CPU将其存储到完整的内部寄存器中并对其进行操作。
通常这样做是为了降低成本和/或芯片物理尺寸。
例子包括intel 4004,LPC数据总线上的任何内容,以及NEC VR4300,Nintendo64的CPU仅具有32行数据总线。
作为上一点的延续,CPU甚至根本不需要公开并行总线。
CPU可能很容易只公开顺序总线,例如I2C,SPI等。
生产这样一个专用的CPU可能不是很划算,但是许多低引脚数的微控制器(包括CPU和内存)都是通过这种方式来节省那些宝贵的引脚,以备不时之需。例如,atmel ATTINY4 / 5/6/10芯片总共只有6个引脚,其中两个用于供电,一个用于复位,三个通用。指令通过专有的三线接口顺序发送。
根据您对微控制器的定义,可以将其视为微处理器,也可以将其编程为充当一个微处理器(即,使用一个或多个顺序总线来模拟专用CPU)。
这个问题清楚地表明某种数据总线是公开的,但不是并行总线。理论上,12线数据总线可以由一条串行数据线和11条辅助/接地/状态线组成,尽管这可能不是一个很明智的想法。
实际上,处理器甚至不需要在与数据相同的总线上接受指令。
当ALU是分立芯片而不是微处理器的一部分,但是现在大多数时候在经济上不可行时,很容易出现这种情况。
但是,没有什么可以阻止您使用专用线来实现CPU的功能,这些专用线仅用于指导。当必须对数据数组(SIMD)执行单个操作时,这种CPU可能会有用。
由于指令总线的宽度完全是任意的,因此最大可能的操作码数也是如此。
实际上,可以通过以下两种方式来考虑最大数量的操作码:
这可以从指令宽度而不是数据总线宽度收集。通常,操作码适合单个内存访问,然后答案为2 ^ 12。但是处理器可以实现多周期操作码解码过程,以将可能的操作码数量扩展到2 ^ 12以上。
处理器可以直接寻址的最大指令数(包含操作码)受地址总线宽度(2 ^ 16)限制。然而,处理器可以间接地寻址更多的存储器,例如,操作码可以促进页面交换或类似的操作以从另一个源获取指令。
您对这个问题感到困惑是正确的-它写得很差。
但是,我怀疑这个问题的目的是确定机器的指令字大小。考虑到所提供的数据非常不完整,这必须与数据总线的宽度相对应。地址总线的宽度决定了主存储器的最大容量。
实际上,给定机器指令的“操作码”字段通常比指令本身小很多,但指令可能比数据总线宽。
老式的Motorola 68008就是一个很好的例子-它是68000的降低成本版本,带有8位数据总线,但它使用相同的16位指令字,其中通常7位确定操作码(其余标识源寄存器和目标寄存器以及寻址模式,所有这些都应视为操作数,而不是操作码)。如果像某些操作一样在操作码中包括寻址模式位,则总共将形成10位操作码字段。在某些寻址模式下,实际指令可能会更长。
埃德森·德卡斯特罗(Edson DeCastro)设计的计算机几乎完全是PDP-8,它具有15条地址和12条数据线。
因此,发布的问题的答案是574个操作码,因为PDP-8有284个操作码,而Ed只是半疯。