1
我在调用某个函数时听到,唯一保证保持不变的值在技术上是esp/ebp。所以如果你有%ebx的值并且你调用了一个函数,你不应该期望它在函数返回之后保持不变。但是,如果不在函数中操作%ebx,那么该值可能会保持不变,因为它在内存中未被触及,并且寄存器的地址始终保持不变,因此无论地址中的值是多少%ebx会留在那里?Assembly Stack,是吗?
和关于返回值,说我有这样的代码:
movl $8, %eax
movl $8, %ebx
pushl $4
call function
function:
pushl %ebp
movl %esp, %ebp
imul %ebx, %eax
movl $4, %ebx
movl %ebp, %esp
popl %ebp
ret
因此,返回值是8×8是在%eax中,因为它是在其他功能放在那里,但将4然后保持在%ebx?或者,如果我从未将任何内容移入%ebx,那么%ebx会保持8吗?
我假设这是公然明显的,但我想绝对确定,所以我也不会形成公然错误的观念。
“保证是相同的”对于'ebp'和'esp'来说是不正确的,因为你可以自由地改变它们。但是,这会让你的程序崩溃。所以'保证'实际上只是一个*约定*,其他寄存器也是如此。 – usr2564301
这是哪个ISA? – mstbaum