我读过,当CPU从内存中读取时,它会立即读取内存的字大小(例如4字节或8字节)。CPU 如何实现以下功能:
mov BYTE PTR [rbp-20], al
Run Code Online (Sandbox Code Playgroud)
它仅将一个字节的数据从 al 复制到堆栈。(假设数据总线宽度约为 64 位宽)如果有人可以提供有关如何在硬件级别实现它的信息,那就太好了。
而且,我们都知道,当CPU执行程序时,它有程序计数器或指令指针指向下一条指令的地址,控制单元将该指令取出到内存数据寄存器并稍后执行。比方说:
0: b8 00 00 00 00 mov eax,0x0
Run Code Online (Sandbox Code Playgroud)
是 5 字节代码长(在 x84 上)并且
0: 31 c0 xor eax,eax
Run Code Online (Sandbox Code Playgroud)
是 2 字节代码长,它们有不同的长度大小。
如果控制单元想要获取这些指令,那么:
像这样的指令怎么样:
0: 48 b8 5c 8f c2 f5 28 movabs rax,0x28f5c28f5c28f5c
7: 5c 8f 02
Run Code Online (Sandbox Code Playgroud)
超出了字大小,CPU 如何处理它们?