下面程序是如何运行正常的?

来源:百度知道 编辑:UC知道 时间:2024/05/21 22:46:55
计算一个加法的程序,
假设编译成汇编如下:
mov eax,1
mov ebx,1
add eax,ebx

可是如果在执行到mov ebx,1的时候此程序的时间片到了,CPU该执行另一个程序,而这个程序改写了eax和ebx的值;
那么,后来是如何保证上面的add eax,ebx会得到正确的结果的?
请指点,多谢!
yxlovemoney 您好!但是,我没有发现程序中会有push ebx后面pop ebx之类的汇编语句; 那么,进行此操作的是操作系统吗? 而且是操作系统的内核堆栈在保存这些? 是吗? 如果是,又是在怎样的情形下,是用硬件实现的还是软件实现的。谢谢。

你执行另一个子程序时,肯定要把你子程序里用到的寄存器的值保存在栈里面。当子程序结束出栈就能够得到原来的值了。
如:
S:push ebx
......
pop ebx

这样管里子程序里怎么用,用完后ebx里的值又回来了。