这可能听起来很疯狂,但我似乎不清楚汇编程序员是否有编写代码来将核心1上的一个寄存器加载到核心2上的寄存器。例如,将核心1上的EAX加载到核心上的EAX 2。 它甚至可能吗?
更多关于汇编程序员使用两个内核的接口(在多个内核上运行代码)?
答案 0 :(得分:1)
没有。要做到这一点,一个核心必须将值存储在内存中,另一个核心必须将其取出。所以核心可能看起来像这样:
mov eax, [235]
核心2会这样做:
mov [235], eax
答案 1 :(得分:1)
硬件没有直接提供此功能。
但是,要构建真正的工具(例如,调试器),必须存在这样的设施。这通常由系统的内核软件实现,为一个CPU提供“停止”另一个,检查其寄存器状态,修改其寄存器状态,单步,修改另一个CPU的内存映射的工具。这些工具建立在低级硬件原语之上,允许一个CPU中断另一个CPU,并且组织代码以便CPU中断使中断的CPU使其状态可用于中断CPU。 (这往往是非常棘手的代码,并且非常依赖硬件)。
Windows通过Win32调用GetThreadContext()提供这些功能(至少是注册访问部分)。我确信Win64具有相同的功能,类似于Linux等等。