我试图了解寄存器操作如何影响存储器位置。 例如,这里是寄存器及其内容
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
现在上述存储位置的存储值应该是多少?他们应该在我更改寄存器值时更改吗?
答案 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
及其作用:
RAX
寄存器RDX
寄存器中RAX
寄存器的当前值增加RCX
寄存器的值RAX
的值乘以RDX
的值(即100,如果在两次中断之间没有更改的话),并存储结果结果的最低64位进入RDX
因此,结果应为rcx
为20
rax 20
rdx 2000
rcx 20
和rbx保持不变。
寄存器是“一种存储器”,但与DRAM的结构非常简单不同,它们是CPU芯片上一组更为复杂的端口和布线。