关于intel汇编的问题

时间:2011-09-11 22:29:48

标签: assembly

我正在努力通过英特尔汇编文件,我遇到了一些我不明白的代码。

# 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操作吗?或者补充一下?

任何帮助都会很棒。

由于

2 个答案:

答案 0 :(得分:4)

意思是

mov %esp, (%eax + %edx * 1)

数字可以是1,2,4或8.

请参阅http://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax

答案 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