寄存器上的CPU操作如何影响存储器?

时间:2018-10-16 17:47:24

标签: assembly memory x86 cpu-registers

我试图了解寄存器操作如何影响存储器位置。 例如,这里是寄存器及其内容

Registers  Values

rax         10       
rdx         40       
rcx         20   
rbx         0x3008

和一些内存位置:

Memory    Values
0x2FF8     10
0x300     190
0x3008      3
0x3010     68

执行以下操作

movq $0,    %rax
movq $100,  %rdx
addq %rcx,  %rax
imulq %rax, %rdx

现在上述存储位置的存储值应该是多少?他们应该在我更改寄存器值时更改吗?

1 个答案:

答案 0 :(得分:3)

这些指令不能访问任何存储器位置,因此它们不会更改存储器。摘录唯一的内存访问是将这些指令操作码和操作数加载到CPU中。

代码是

   0:   48 c7 c0 00 00 00 00    mov    $0x0,%rax
   7:   48 c7 c2 64 00 00 00    mov    $0x64,%rdx
   e:   48 01 c8                add    %rcx,%rax
  11:   48 0f af d0             imul   %rax,%rdx

及其作用:

  1. 将0装入RAX寄存器
  2. 将100加载到RDX寄存器中
  3. RAX寄存器的当前值增加RCX寄存器的值
  4. RAX的值乘以RDX的值(即100,如果在两次中断之间没有更改的话),并存储结果结果的最低64位进入RDX

因此,结果应为rcx为20

rax         20      
rdx         2000       
rcx         20  

和rbx保持不变。

寄存器是“一种存储器”,但与DRAM的结构非常简单不同,它们是CPU芯片上一组更为复杂的端口和布线。