如何在多任务环境中使用寄存器

时间:2014-02-13 07:18:52

标签: unix assembly cpu-usage multitasking cpu-registers

在不再需要之前,如何确保我写入处理器寄存器的值不会被多任务环境中的其他任务修改?

mov eax , 42
;
; some calculations
;
; which use the value 
;
; stored in the eax
;

如果其他程序在我使用它之前修改了寄存器值,我的程序可能会崩溃。我该如何处理?

1 个答案:

答案 0 :(得分:4)

操作系统会为您解决此问题。

当您执行多任务时,操作系统会保存您的上下文(标志和寄存器)。恢复上下文后,还会恢复保存的数据,因此即使您在另一个处理器中更改了eax的值,您的代码也会正常工作。从代码的角度来看,您运行的代码与以前相同。您无法从另一个处理器访问一个处理器的寄存器,因此在两种情况下都是安全的。

导致问题的原因是数据来源,例如,如果您将数据从内存移动到eax而没有锁定,则无法保证数据不会发生变化。在这种情况下,您可以锁定,移动,计算和解锁。