2010-08-19 3 views
0

일부 x86을 상속 한 일부 응용 프로그램 수준 코드는 ... 32 비트 명령어 및 주소 지정을 기반으로하는 인텔 어셈블리 코드입니다. 필자는 64 비트 Windows OS를 마이그레이션 할 때이 32 비트 어셈블리 코드가 실행될 것이라는 가정을합니다. 예?32 비트에서 64 비트로 어셈블리 코드 마이그레이션

+0

이것은 C++ 코드에 포함되어 있습니다. – ddm

+0

가까운 투표가 필요한 이유는 무엇입니까? – Sathya

+0

아마도 이것은 내가 생각한 것만 큼 쉽지는 않을 것입니다. http://msdn.microsoft.com/en-us/library/hb5z4sxd.aspx 상태 "인라인 ASM은 64이 지원되지 않습니다 - 나는 (이 질문은 이동하는 사람들로 확실하지 죄송합니다) 응답자에서 링크를 가지고 MASM 또는 컴파일러 내장 함수 (x64 Intrinsics)를 사용하십시오. " – ddm

답변

0

아마도 실행됩니다. 64 비트 Windows는 응용 프로그램 용 32 비트 모드를 지원하며 일반적으로 매우 안정적입니다. (분명히 이러한 것들은 결코 100 %가 아닙니다 -주의 경고.

0

예. 32 비트 코드는 64 비트 컴퓨터에서 실행되지만 4 개 이상의 GiB를 액세스 할 수는 없습니다.

2

아마도 실행되지만 64 비트 확장 기능 (x86-64, "64 비트"Windows 버전)이 제공하는 기능을 활용하지 않거나 x64 라이브러리와 밀접하게 상호 작용할 수 있어야합니다. WoW64 레이어는 매우 안정적이며 32 비트 응용 프로그램의 99.999 %가 현재 "64 비트"OS에서 잘 실행됩니다.

진정한 64 비트 운영 체제로 마이그레이션하려는 경우 (Itanium 기반, ia64 만 알고있는 것), 운이 좋지 않습니다.

편집 : 또한 큰 주소 액세스 (4GB 이상의 RAM을 사용할 수 있음)를 설정하려면 전환 할 수있는 PE 헤더 플래그가 있습니다.이 플래그를 켜면 더 많은 양의 메모리를 주소 지정할 수 있습니다.

+0

환상적! 많은 감사! 나는 여기에 새로운 사람이지만 (그래서 좋은 입지를 굳혔다.) 나는 투표를 할 수 있도록 여기에 충분한 평판이 있었으면 좋겠다. – ddm

+0

동일. 나는 투표를 걱정하지 않는다. 그래서 투표는 중요하지 않다. 그러나 내가 당신을 위해 그것을 대답한다면, 당신은 사람들이 알고있는 것을 받아들이기를 원할지도 모른다. :) – ssube

+0

괜찮 으면 받아 들일 것이지만, 그것을하는 방법은 분명하지 않습니다 (적어도 저에게). FAQ 링크 보내기 :-) – ddm

0

아직 32 비트 x86 응용 프로그램을 계속 빌드하는 경우 을 실행하여이됩니다. 그러나 코드를 64 비트 x86으로 이식해야하는 경우, 어셈블리 코드가 실행되지 않고 컴파일되지 않을 수도 있습니다.

그리고 도구 체인에 따라 다르며 C/C++ 코드에서 인라인 어셈블러 인 경우 컴파일하지 못할 수도 있습니다.

+0

당신은 더 자세히 설명 할 수 있습니까? 컴파일하지 않습니까? 그것은 임베디드 C++ 코드입니다. – ddm

+0

적어도 MS 컴파일러를 사용하면 컴파일러가'__asm'을 지원하지 않으므로 인라인 어셈블러는 64 비트 툴체인에서 컴파일되지 않습니다. 나는 GCC와 같은 다른 컴파일러가이 문제를 겪고 있는지 잘 모른다. –

+0

우리는 코드 전송이 일어날 때까지 아마 VS를 사용하고 있습니다. 나는 assy 코드를 다시 쓰는 것을 기대하지 않고 나를 위해 불가능한 것이 아니라 내가 등록한 작업을 기대한다. – ddm