不知道为啥,学啥后面都会碰到汇编指令┑( ̄Д  ̄)┍,看书学习DirectX引擎开发(才第4章)也要碰到,怒了,开始刚汇编,记录一些学习上的问题,好回头看看。
ESP:栈指针寄存器(extended stack pointer),永远指向系统栈最上面一个栈帧的栈顶
EIP:指令寄存器,存放当前指令的下一条指令的地址(就是CPU从这边开始执行)
push指令:把值压入栈中,ESP栈指针寄存器指向该值的地址,32位相当于ESP-4的地址,
pop指令:把值弹出栈,ESP栈指针寄存器指向该值得地址前一个地址(不好描述)相当于ESP+4的地址,
总结:
push指令相当于先执行sub esp指令,再执行mov [esp],pop address指令相当于先执行先执行mov address, [esp],再执行add esp指令。刚好也明白为啥局部变量最好赋初值的问题,因为CPU在执行完push和pop指令后,ESP栈顶指针的下一个地址有可能就已经赋值了。
练习:
第一个选中的框是用push和pop指令,第二个选中的框则是利用sub,add和mov指令实现push和pop指令,为了区分方便,中间都用上了mov eax, 0x0,将eax寄存器上的值全部赋为0,还有就是利用jmp指令把2段代码分开。