最近在搞操作系统,发现一个问题,直接用C的中断服务程序,返回任务后接着运行会进入非法指令中断,咨询了一位老师后建议我用汇编写中断函数,然后再汇编中调用C函数,但是在调用C函数前需要用ASP指令对齐堆栈,调用后再用NASP恢复。
我的问题时:1〉都什么时候需要对齐堆栈?为什么需要对齐?
2〉C函数或编译器不能自动处理堆栈的对齐和恢复吗?
谢谢各位大神指点迷津。
Johnson Chen1:
你确定问题是由于堆栈没有对齐引起的吗?
最近在搞操作系统,发现一个问题,直接用C的中断服务程序,返回任务后接着运行会进入非法指令中断,咨询了一位老师后建议我用汇编写中断函数,然后再汇编中调用C函数,但是在调用C函数前需要用ASP指令对齐堆栈,调用后再用NASP恢复。
我的问题时:1〉都什么时候需要对齐堆栈?为什么需要对齐?
2〉C函数或编译器不能自动处理堆栈的对齐和恢复吗?
谢谢各位大神指点迷津。
zhihua pang:
回复 Johnson Chen1:
确定,因为去掉ASP和NASP指令后程序就不能正常运行了,运行结果是进入非法指令中断,我看手册上进入非法指令中断的条件中有一个是跟SP有关的。