MOV指令实际上在CPU级别上不仅仅执行一项原子操作吗? [重复]

问题描述 投票:-2回答:1

我是汇编语言的新手,我知道只能通过使用寄存器来从内存中获取数据。因此:

    MOV eax, x // x is an integer
    MOV y, eax  
  • MOV操作的机器代码由CPU指令组成以及操作数和寄存器的地址。对还是错?
  • 在RAM中,整数将存储在4个不同的存储器中位置。对还是错?

考虑到x86 32b处理器体系结构,当CPU执行MOV指令以加载数据(mov eax,x)时,如果RAM中有4字节数据,则意味着它必须执行4条指令才能从RAM中获取数据。组成一个4字节整数的所有4个地址,将这些字节连接在一起,并将其放入EAX寄存器中。

Is this how the CPU does the job ? 
How does the CPU know how many bytes it should read ?
assembly x86 cpu-architecture atomicity
1个回答
-1
投票

数据总线为32位宽。 CPU将请求的地址放在地址总线上,RAM在数据总线上设置32位。因此,如果对齐4字节边界,则只能访问32位;如果对齐2字节边界,则只能访问16位,等等。部分是RAM芯片的内部体系结构,但是也存在必须访问两个不同的芯片才能获得RAM的风险。必需的字节。

[当读取字节或字时,CPU倾向于将数据总线的未使用区域设置为低,因此以零扩展名进行的移动与常规移动相比不需要更多的工程设计。

然后,当然是一种突发模式,当CPU而不是一次复制一个内存时,CPU会继续复制它,直到被告知不要!这减少了解码指令的大量开销。

© www.soinside.com 2019 - 2024. All rights reserved.