汇编语言+将值移入和移出寄存器

时间:2011-12-15 16:26:01

标签: assembly x86

我有一个关于X-86或IA32汇编语言的问题(不确定我的教科书是否似乎可以互换地使用它们)我有以下代码应该执行以下操作

%ebp的当前值(堆栈地址)移入寄存器添加0x20,然后将结果存储在%ebp的当前值“内部”。这是我基本上编码前一个堆栈帧的帧指针的代码,通过使用GDB的实际计算是%ebp + 0x20。谁能告诉我我缺少什么?

movl %ebp, %edx   //move the "stack address" of %ebp into the register
addl $0x20, %edx  // add 0x20 to the value in %edx which is actually the address of the stack of %ebp
movl %edx, (%ebp) //overwrite the contents of %ebp with our calculated values from the previous 2 steps

当我说“堆栈地址”时,我并不是指堆栈指针%esp。我的意思是堆栈上该位置的内存地址而不是其中包含的值(如果有意义的话)。

1 个答案:

答案 0 :(得分:1)

movl %ebp, %edx   
addl $0x20, %edx  
movl %edx, (%ebp) 

第一行,将ebp的32位值移动到edx,你声明它是一个堆栈地址,它不是,但它可以是,意思是,只有当你输入esp的值时,ebp才能指向堆栈地址进入它,

第二行向edx添加0x20,edx被总和覆盖,更像是C中的edx = edx + 0x20

第三行移动总和,从前一行到EBP指向的32位存储器地址,因此意味着EBP指向的存储器位置的任何值,它被用32位EDX值覆盖。就是这样了。