小编Say*_*ura的帖子

CPU 如何执行操作小于字大小的数据的操作

我读过,当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 字节代码长,它们有不同的长度大小。

如果控制单元想要获取这些指令,那么:

  1. 获取 8 个字节的字节代码(可能由多个指令组成),然后仅执行其中的一部分。
  2. 小于 8 字节的获取指令(仍然从内存中读取 8 字节,但其他字节将被忽略)
  3. 指令已经被填充(由编译器或其他东西)。

像这样的指令怎么样:

0:  48 b8 5c 8f c2 f5 28    movabs rax,0x28f5c28f5c28f5c
7:  5c 8f 02
Run Code Online (Sandbox Code Playgroud)

超出了字大小,CPU 如何处理它们?

hardware cpu x86 assembly cpu-architecture

2
推荐指数
1
解决办法
1441
查看次数

标签 统计

assembly ×1

cpu ×1

cpu-architecture ×1

hardware ×1

x86 ×1