CPU 对寄存器的操作如何影响内存?
How do CPU operations on registers affect memory?
我想了解寄存器操作如何影响内存位置。
例如这里是寄存器和它们的内容
Registers Values
rax 10
rdx 40
rcx 20
rbx 0x3008
和一些内存位置:
Memory Values
0x2FF8 10
0x300 190
0x3008 3
0x3010 68
经过以下操作
movq [=13=], %rax
movq 0, %rdx
addq %rcx, %rax
imulq %rax, %rdx
现在上述内存位置的内存值应该是多少?它们应该随着我更改寄存器值而改变吗?
这些指令不会访问任何内存位置,因此它们不会更改内存。此摘录所做的唯一内存访问是将这些 指令 操作码和操作数加载到 CPU 中。
密码是
0: 48 c7 c0 00 00 00 00 mov [=10=]x0,%rax
7: 48 c7 c2 64 00 00 00 mov [=10=]x64,%rdx
e: 48 01 c8 add %rcx,%rax
11: 48 0f af d0 imul %rax,%rdx
及其作用:
- 将 0 加载到
RAX
寄存器中
- 将 100 加载到
RDX
寄存器
- 将
RAX
寄存器的当前值增加RCX
寄存器 的值
- 将
RAX
的值乘以 RDX
的值(即 100,如果它在两者之间的中断中未更改)并存储最低 64 位result 结果变成 RDX
因此结果应该是,给定 rcx
作为 20
rax 20
rdx 2000
rcx 20
和 rbx 不变。
寄存器是 "a kind of memory",但与结构非常简单的 DRAM 不同,这些是 CPU 硅片上一组更复杂的端口和布线。
我想了解寄存器操作如何影响内存位置。 例如这里是寄存器和它们的内容
Registers Values
rax 10
rdx 40
rcx 20
rbx 0x3008
和一些内存位置:
Memory Values
0x2FF8 10
0x300 190
0x3008 3
0x3010 68
经过以下操作
movq [=13=], %rax
movq 0, %rdx
addq %rcx, %rax
imulq %rax, %rdx
现在上述内存位置的内存值应该是多少?它们应该随着我更改寄存器值而改变吗?
这些指令不会访问任何内存位置,因此它们不会更改内存。此摘录所做的唯一内存访问是将这些 指令 操作码和操作数加载到 CPU 中。
密码是
0: 48 c7 c0 00 00 00 00 mov [=10=]x0,%rax
7: 48 c7 c2 64 00 00 00 mov [=10=]x64,%rdx
e: 48 01 c8 add %rcx,%rax
11: 48 0f af d0 imul %rax,%rdx
及其作用:
- 将 0 加载到
RAX
寄存器中 - 将 100 加载到
RDX
寄存器 - 将
RAX
寄存器的当前值增加RCX
寄存器 的值
- 将
RAX
的值乘以RDX
的值(即 100,如果它在两者之间的中断中未更改)并存储最低 64 位result 结果变成RDX
因此结果应该是,给定 rcx
作为 20
rax 20
rdx 2000
rcx 20
和 rbx 不变。
寄存器是 "a kind of memory",但与结构非常简单的 DRAM 不同,这些是 CPU 硅片上一组更复杂的端口和布线。