【发布时间】:2012-04-26 16:40:37
【问题描述】:
为什么我们有 push 和 pop 之类的命令?
据我了解,pop 和 push 基本上与分别在 esp 上执行 (mov 然后 add) 和 (sub 然后 mov) 相同。
例如不会:
pushl %eax
相当于:
subl $4, %esp
movl %eax, (%esp-4)
如果堆栈访问不是(%esp-4),请纠正我,我还在学习汇编
我能看到的唯一真正好处是,如果同时进行这两项操作会提供一些优势;但是我不明白它是怎么做到的。
【问题讨论】:
-
节省空间,x86其实是CISC设计,何乐而不为。
-
@harold 它没有提供额外的功能,这就是为什么不提供。 CPU 仍然在这两个操作上花费时间。
-
是的.. 但它是一个 CISC 设计,因此它旨在通过提供“做很多”的指令来使汇编程序员更容易使用。另请参阅:
leave、enter、rep movsb等。它确实也节省了大量字节空间。
标签: assembly stack cpu cpu-architecture att