本文内容较为基础,适合汇编新手(惭愧,本人就是)学习参考。
内嵌编程:函数体用汇编实现,保存在.asm文件中;在.asm和.c文件中声明;在.c文件中调用,调用方式和普通函数相同。
函数参数传递
刚开始想用偷懒,默认传入参数较少的函数,参数直接传入cx、dx,从通用寄存器可以直接得到参数值。而不用堆栈中捞(在Efi shell上述方法好像可以,下次试试)。实际上述方法不可行,用debug32查看通用寄存器值,发现参数并未传入>_<。 所以需要用栈传递参数(以访问intel cpu IO 为例):
堆栈变化情况,未调用函数前:
函数参数传入堆栈情况:
参数入栈后,将指令指压入栈保存;要用到bp寄存器,将bp也压入堆栈;
执行到代码段,堆栈变化: