我正在努力通过英特尔汇编文件,我遇到了一些我不明白的代码。
# Save current stack pointer to old thread's stack, if any.
movl SWITCH_CUR(%esp), %eax
movl %esp, (%eax,%edx,1)
我理解第一行将12
偏离寄存器%esp
的值移动到寄存器%eax
。
但是我不明白第二行是什么让%esp
移动到什么地方。
(%eax,%edx,1)
是一个逻辑and
操作吗?或者补充一下?
任何帮助都会很棒。
由于
答案 0 :(得分:4)
意思是
mov %esp, (%eax + %edx * 1)
数字可以是1,2,4或8.
答案 1 :(得分:2)
(%eax,%edx,1)
指的是内存中的位置,其地址是通过将%eax
中的值与%edx
中的值相加而形成的。 1是比例因子,实际上并不“重要”,因为它是1.
<强>附录强>
详细(如果其他人登陆此页面):
mov %esp, %edx # move contents of esp into edx
假设edx包含100且eax包含20:
mov %esp, (%edx) # move contents of esp in address 100
mov %esp, (%edx,%eax) # ... into address 100 + 20 = 120
mov %esp, (%edx,%eax,4) # ... into address 100 + (20*4) = 180