来自:https://www.webopedia.com/TERM/R/register.html
CPU具有的寄存器数量和每个寄存器的大小(位数)有助于确定CPU的功率和速度。例如,32位CPU是每个寄存器为32位宽的CPU。因此,每条CPU指令都可以处理32位数据。
我们编写的C / C ++程序,我们用笔记本写的文本,“每个CPU指令可以操作32位数据”的含义是什么?
答案 0 :(得分:2)
首先; “每个CPU指令可以操作32位数据”是一种(技术上不正确的)泛化。例如(32位80x86)有指令(例如cmpxchg8b
,pushad
,shrd
)和整个扩展(MMX,SSE,AVX),其中指令可以操作超过32位数据。
表现;最好将其视为“可在固定时间内完成的工作量”或“执行固定工作量的时间量”。这可以分为2个值 - 执行大量工作需要多少指令,以及在固定时间内执行多少指令(每秒指令数)。
现在考虑添加一对128位整数。对于32位CPU,这必须分解为四个32位添加,可能看起来像这样:
;Do a = a + b
mov eax,[b]
mov ebx,[b+4]
mov ecx,[b+8]
mov edx,[b+12]
add [a],eax
adc [a+4],ebx
adc [a+8],ecx
adc [a+12],edx
在这种情况下,“执行大量工作需要多少指令”是8条指令。
使用16位CPU,您需要更多指令。例如,它可能更像是这样:
mov ax,[b]
mov bx,[b+2]
mov cx,[b+4]
mov dx,[b+6]
add [a],ax
mov ax,[b+8]
adc [a+2],bx
mov bx,[b+10]
adc [a+4],cx
mov cx,[b+12]
adc [a+6],dx
mov dx,[b+14]
add [a+8],ax
adc [a+10],bx
adc [a+12],cx
adc [a+14],dx
在这种情况下,“执行大量工作需要多少指令”是16条指令。使用相同的“每秒指令数”,16位CPU的速度将是32位CPU的一半。
使用64位CPU,这项工作只需要4条指令,可能是这样的:
mov eax,[b]
mov ebx,[b+8]
add [a],eax
adc [a+8],ebx
在这种情况下,使用相同的“每秒指令数”,64位CPU的速度是32位CPU的两倍(并且是16位CPU的4倍)。
当然,高级源代码在所有情况下都是相同的 - 不同之处在于编译器生成的内容。
请注意,我在这里显示的内容(128位整数加法)是一个“快乐的案例” - 我特意选择了这个,因为它很容易显示更大的寄存器如何减少/改善“你需要做多少指令”工作量“因此提高了性能(以相同的”每秒指令“)。对于不同的工作,您可能无法获得相同的改进。例如,对于使用8位整数的函数(例如char
),“大于8位寄存器”可能根本没用(在某些情况下可能会使事情变得更糟)。
答案 1 :(得分:1)
能够一次传输32位数据的计算机,操作系统或软件程序。使用计算机处理器(例如80386,80486和Pentium),它们是32位处理器,这意味着处理器能够处理32位二进制数(十进制数高达4,294,967,295)。任何更大的东西,计算机都需要将数字分成更小的部分
答案 2 :(得分:0)
“单词”是基本变更单位的大小。
该CPU除了是32位CPU之外,还有一个32位大小的字。如果它正在更改项目,除非使用额外的CPU周期,否则它可以更改的最大“单个”项是一个32位值。
这并不意味着可以用一条指令更改任何32位。但如果32位都是同一个字的一部分,则可以在一条指令中更改它们。