call procname
procname:
push ebp ; preserve base pointer
mov ebp, esp ; stack pointer into ebp
; write your assembler code here
mov esp, ebp ; restore stack pointer
pop ebp ; restore base pointer
ret
label:
ebp 指向何处?为何要入栈?
esp 指向何处?是不是指向刚才我push的地址(也即栈顶)?
为何他要mov ebp, esp 再mov esp, ebp, 我认为没必要把esp的内容存到ebp中啊。
在下新学,正在看书, 有些疑惑,基本问题望兄弟们指教。
同时, 谁能推荐一下汇编方面的好书。
这是建立一个程序调用时的框架堆栈帧,
push ebp ; 建立堆栈帧
mov ebp, esp
mov esp, ebp ; 取消堆栈帧
pop ebp
下面这本书有有详解,推荐:
80X86汇编语言程序设计教程 出版社: 清华大学出版社 定价: ¥39.00
本书分为三部分。第一部分是基础部分,以8086/8088为背景,以DOS和PC兼容机为软硬件平台,以MASM和TASM为汇编器,介绍汇编语言的有关概念,讲解汇编语言程序设计技术。第二部分是提高部分,以80386为背景,以新一代微处理器Pentium为目标,细致和通俗地介绍了保护方式下的有关概念,系统和详细地讲解了保护方式下的编程技术,真实和生动地展示了保护方式下的编程细节。第三部分是上机实验指导。 本书的第一部分适合初学者,可作为学习汇编语言程序设计的教材。本书的第二部分适合已基本掌握8086/8088汇编语言的程序员,可作为学习保护方式编程技术的教材或参考书,也可作为其他人员了解高档微处理器和保护方式编程技术的参考书,还可作为程序员透彻地了解Windows程序设计技术的参考书。