我在理解开始装配时遇到了一些麻烦。 我应该编写一个程序,它添加两个或减去两个作为命令行参数的数字。
当我调用子程序时出现问题。它似乎改变了我的堆栈,没有我的推/弹交互。基本上,如果我在任何子程序调用之前将我的+/-打开,我可以检查它是加号还是减号,但是在子程序调用之后,相同的POP将不再为我提供+/-。这是正常行为,还是应该在RET调用时,我的堆栈与CALL语句之前一样?
答案 0 :(得分:2)
就从子程序调用返回后的堆栈状态而言,它取决于所使用的调用约定。只要调用者和被调用者就如何使用堆栈达成一致,一切都很好 - 如果你同时编写,你可以使用你想要的任何约定。如果任何一方是由其他人编写的,您需要找出使用的约定,并坚持这一点。