2

This may sounds crazy but it seems unclear to me whether there is an interface to assembly programmers to write code to load one register on core 1 to a register on core 2. For example, load EAX on core 1 to EAX on core 2. Is it even possible?

More over what is the interface to assembly programmers to use two cores (run code on more than one core)?

4

2 回答 2

1

不。为此,一个核心必须将值存储在内存中,而另一个核心必须将其取出。所以核心可能看起来像这样:

mov eax, [235]

核心 2 会这样做:

mov [235], eax
于 2012-11-19T05:13:55.703 回答
1

硬件不直接提供此功能。

然而,为了构建真正的工具(例如,调试器),必须存在一些这样的工具。这通常由系统的内核软件实现,该软件为一个 CPU“停止”另一个 CPU、检查其寄存器状态、修改其寄存器状态、单步、修改另一个 CPU 的内存映射提供了便利等。此类设施建立在允许一个 CPU 中断另一个 CPU 的低级硬件原语之上,并且代码组织使得 CPU 中断导致被中断的 CPU 使其状态对中断的 CPU 可用。(这往往是非常棘手的代码,并且非常依赖于硬件)。

Windows 通过 Win32 调用 GetThreadContext() 提供这些功能(至少是寄存器访问部分)。我敢肯定 Win64 有一个等价物,Linux 等也有类似的东西。

于 2012-11-19T05:46:09.107 回答