2013-03-22 2 views
0

필자가 이해하지 못하는 Delphi XE3의 64 비트 인라인 어셈블러를 사용하여이 문제에 부딪혔습니다. Delphi XE3의 64 비트 인라인 어셈블리

내가 이것을 시도, 그것은 작동 32 비트 및 64 비트

function test(a, b: integer): integer; assembler; register; 
asm 
    mov eax, a 
    add eax, edx 
end; 

그러나이 32 비트에서 작동하지만 64 비트, 64 비트에서 컴파일하지만, 두 정수의 합계가 올바른 결과를 반환하지 않았습니다.

function test(a, b: integer): integer; assembler; register; 
asm 
    add eax, edx 
end; 

나는, 같은 FLD로 이전 FPU 코드를 알고 STP는 32 비트에서 작동하지만 64 비트 컴파일러에서 컴파일 오류를 줄 것이다. 64 비트에서 부동 소수점을 처리하는 방법에 대한 아이디어가 있습니까?

+1

"나에게 빠른 자습서를 줄 수 있습니까?"좋은 스택 오버플로 질문이 아닙니다. 이 질문의 코드는 32 비트 정수 단위를 사용하지만 실제로 FPU 코드에 관심이 있습니다. 64 비트에서 근본적으로 다른 것입니다. 필자의 가장 중요한 조언은 모든 어셈블러 코드를 Pascal로 이식하여 컴파일러가 무거운 것을 수행하도록하는 것입니다. –

+0

사실, 친구! 당신이 thios 것들을 볼 때 당신은 방금 CPU 창을 열고 어떤 레지스터가 들어가는 파라미터인지 비교해야합니다. 어셈블러로 작업한다면 - 어셈블러에서 debuugging하면 집이됩니다! 그렇지 않다면 CPU, 레지스터 및 어셈블러가 무엇인지 아는 사람에게 물어보십시오. –

+0

@ Arioch'Trial 및 디버거의 오류는 MS x64 ABI를 배우는 방법이 아닙니다. 공식적인 문서는 그것을하는 방법입니다. –

답변

관련 문제