2012-03-16 73 views
0

我在理解开始汇编时遇到了一些麻烦。 我应该写一个程序,它添加两个或减去两个命令行参数的数字。开始汇编

当我调用子程序时,问题就出现了。它似乎改变了我的堆栈,没有我的推/流行互动。从本质上讲,如果我在任何子程序调用之前关闭了我的+/-,我可以检查它是否是加号或减号,但在子程序调用后,相同的POP将不再向我提供+/-。这是正常行为,还是应该在RET调用时,我的堆栈与CALL语句之前一样?

+0

您是否期望只使用程序集,从头开始访问命令行? (也就是说,你没有stub模块来链接,这使得它有点容易获得参数?这是什么操作系统? – Kaz 2012-03-16 00:15:29

+0

请添加一些代码,描述预期和观察到的行为,并试图找到一个更精确的标题为 – moodywoody 2012-03-16 00:16:05

+1

此任务对于汇编语言的完整初学者来说并不是那么好,因为你必须获得对命令行的访问权限,获取参数字符串,将数字字符串转换为它们的值等等(而不是转换为寄存器大小的整数并使用单一的ADD指令,我会有更多的乐趣:把数字保留为字符串,并用十进制数字进行算术运算,加上'3'和'8'使11变小,写下'1'变成'1'。 )然后输出相反的累加数字以产生答案。你是否需要支持负数? – Kaz 2012-03-16 00:19:30

回答

2

就从子程序调用返回后栈的状态而定,它取决于所使用的调用约定。只要调用者和被调用者就如何使用堆栈达成一致,一切都很好 - 如果您同时编写这两个堆栈,则可以使用任何您想要的约定。如果任何一方是由其他人撰写的,则需要找出使用的约定,并坚持这一点。