2019.4.3
看书:王爽《汇编语言》第三章 寄存器(内存访问)
搞懂了 栈(也叫堆栈),堆的区别,https://bbs.csdn.net/topics/110108980这里面说的挺好的。
解决了函数传参时的疑问,先 更新esp的地址(第一个函数不用),从函数右向左入栈,然后入返回地址,最后把当前栈基址ebp入栈,然后mov ebp,esp更新新基址
,后面还会用新的继续存一些局部变量,静态变量和ebx esp esi edi带有记忆的寄存器之类的,这就算完成一个函数栈帧。最后执行完毕要依次pop 掉所有要恢复原来存储的新基址后的部分,最后一次pop将ebp还原乘上一个栈帧的基址,更新esp恢复到上一个栈帧结尾(最后一个栈帧的话就用mov esp,ebp),参考https://www.cnblogs.com/rixiang/p/7116589.html和《现代x86汇编语言程序设计》27页的图片,很清楚。
https://blog.csdn.net/xing2388117/article/details/79998679还有这位同学写的非常清楚!
知道了两种栈,满堆栈(栈顶指针指向最后元素)和空堆栈(指向最后元素后一个位置),
了解了机器码和汇编码的转换https://blog.csdn.net/p312011150/article/details/79612379
了解了段寄存器不能用立即数赋值https://bbs.csdn.net/topics/340215235,原因众说纷纭,intel没有给出解释。
学习用debug调试,64位机得用DOSBox来做。

浙公网安备 33010602011771号