关于汇编 Li 子程序的问题,需要对子程序的调用有清晰的理解。由于子程序使用的堆栈属于主程序,主程序调用子程序时保存的断点信息在子程序(sp的值被你修改)中被推出,所以无法正确执行,关于汇编子程序Stack好吧,不切换栈段就无法回到原程序位置例如:...callmymainmovax。

1、 汇编 子程序ret不到正确的地址

这是由dos系统的程序系统和系统环境决定的。当你运行自己编译的软件时,DOS系统会像调用子程序一样把权限暂时交给你,但你又放不下,因为你不知道你的程序里该做什么。为了DOS本身的稳定运行,DOS会保护站点。当您使用RET返回时,受保护的内容将不会被释放。当DOS函数调用返回时,调用程序可以还原场景,它匹配。

2、 汇编语言里面调用 子程序问题

这不是返回自己的循环执行,而是跳转到子程序的第一行。为什么不呢?循环结构可以在任何地方使用。但是有一点,子程序无论循环多少次,最后都要执行一行RET指令,也就是说,子程序必须有RET指令,而你的子程序最后缺了一行RET指令,就加吧。

3、 汇编语言(用 子程序调用来编程的问题!

在过去,对于这个具体的编程问题,没有人真正给你具体的步骤。建议你自己查资料,自己解决。记住,这个世界上只有你最可靠!让我告诉你大概的意思。剩下的你最好自己做。1.用指针SI和DI分别指向数据区和存储区的第一个字节,那么A2的第一个地址就是子程序 call,这样你应该有一个清晰的认识。当一个调用发生时,PC值将被自动推送到堆栈中。子程序返回指令RET自动将PC值推出堆栈,程序返回调用指令的下一条指令继续运行。在子程序中,不需要执行PUSH和POP操作。如有必要,需要注意的是push和pop必须成对,否则堆栈指针会被篡改,RET指令也不会返回正确的地址。Ret指令必须在push和pop后使用返回,并且已经返回正确的地址才能执行程序。

4、 汇编 子程序调用及返回

应该是这样的:rltydw 0 dsegendscsegmentassumes:cseg,ds: dseg,ss: ssegstart: movbx,0b125hcallshowhexmovax,4c 00 hint 21 hshowhex:;PROCNEARMOVCX,0404HLP:ROLBX,CLMOVAL,BLANDAL,

5、关于 汇编 子程序堆栈

嗯,不切换栈段就无法返回原程序位置。例如,像这样的程序...callmymainmoax,1...mymain: pushaxbushret无法回到原点,由于子程序使用的堆栈属于主程序,主程序调用子程序时保存的断点信息在子程序(sp的值被你修改)中被推出,所以无法正确执行。由此可以看出缺点:子程序使用了主程序的堆栈段,很容易修改主程序的数据。


文章TAG:子程序  汇编  调用  语言  位置  汇编子程序位置  
下一篇