我是汇编语言的新手,我知道只能通过使用寄存器来从内存中获取数据。因此:
MOV eax, x // x is an integer
MOV y, eax
考虑到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 ?
数据总线为32位宽。 CPU将请求的地址放在地址总线上,RAM在数据总线上设置32位。因此,如果对齐4字节边界,则只能访问32位;如果对齐2字节边界,则只能访问16位,等等。部分是RAM芯片的内部体系结构,但是也存在必须访问两个不同的芯片才能获得RAM的风险。必需的字节。
[当读取字节或字时,CPU倾向于将数据总线的未使用区域设置为低,因此以零扩展名进行的移动与常规移动相比不需要更多的工程设计。
然后,当然是一种突发模式,当CPU而不是一次复制一个内存时,CPU会继续复制它,直到被告知不要!这减少了解码指令的大量开销。