可以在64位处理器上运行32位汇编代码吗? (DELPHI)

时间:2013-08-08 23:41:54

标签: delphi assembly

我正在Delphi中编写一个程序,并包含一个包含一些汇编代码(Pipes.pas)的库。当我运行调用一个名为StdWndProc的函数的代码时,我收到了访问冲突。该过程是一个汇编函数,其中包含汇编代码。

前段时间我更新了这段代码(Pipes.pas)以包含unicode支持和其他内容,但我没有弄清楚这个程序集正在做什么。关于这里出了什么问题的任何想法?

我正在64位计算机上运行,​​可能是这个程序集是32位并且在64位处理器上运行不正确(该项目的目标是32位构建)。

2 个答案:

答案 0 :(得分:7)

32位进程执行32位代码。无论该代码是使用汇编程序还是Delphi或其他语言编译,都无关紧要。

无论机器是64位还是32位,32位进程都运行32位代码。在64位计算机上,32位进程在称为WOW64的模拟32位计算机上运行。

从概念上讲,您尝试的是可能的,因此结论是您的代码存在错误。

答案 1 :(得分:2)

正如 David Heffernan 指出,问题的原因很难成为操作系统架构。

如果您的代码在32位计算机上运行时没有错误,但无法在64位计算机上运行,​​则可能是操作系统问题。它可能是由于在64位窗口上使用32位独占目录(如 SD:\ Program Files ,称为 SD:\ Program Files(x86)对于32位程序),注册表反射(导致程序在 Wow3264Node 键下存储注册表数据),甚至使用旧的16位 DLL (可以不是在wow3264下运行),但这是一个非常罕见的案例,因为它是2013年......

为了能够提供帮助,我需要进一步了解 您的代码无法正常运行的详细信息

(请注意,原始问题已经回答,我只想提供一些更实用的帮助。)