질문

2010-07-14 1 views
-2

C++질문

#ifdef __BORLANDC__ 

    #pragma argsused 

#endif 

을에서 표현의 같은 종류를 사용하고 또한 내가 내 C++의 어셈블러 컴파일러를 가지고 있는지 확인하는 방법을 C에서 어셈블러 코드 ++

#ifdef __BORLANDC__ 

    #pragma argsused 

#endif 



#include <iostream> 

using namespace std; 



int main(int argc, char * argv[]) 

{ 

    int Number1, Number2, Result; 



    __asm 

    { 

     MOV Number1, 248 // Initialize Number1 

     MOV Number2, 405 // Initialize Number2 

     MOV EAX, Number1 // Put the value of Number1 in the EAX register 

     ADD EAX, Number2 // Add the value of Number2 to the content of EAX 

     MOV Result, EAX // Put the content of EAX into Result 

    }     // That's it 



    cout << "Number1 = " << Number1 << endl; 

    cout << "Number2 = " << Number2 << endl; 

    cout << "\nAfter adding Number1 to Number2," << endl; 

    cout << "Result = " << Result << endl; 



    return 0; 

} 

에 대한 코드가 주어진다 얼마나 자주 ?

+3

더 명확 할 수 있습니까? 당신의 구체적인 질문은 무엇입니까? – ckv

+0

플랫폼 별 기능 (예 : GUI, USB 및 키보드)에 액세스하는 파일에서 플랫폼 또는 컴파일러 검사를 사용하는 것이 좋습니다. 대부분의 코드는 그렇게하지 않으므로 플랫폼이나 컴파일러 검사를 자주 사용하지 않습니다. –

답변

1

#ifdef은 종종 header guards으로 사용됩니다. 이 구조체의 사용법은 훨씬 더 광범위합니다. 가장 기본적인 것을 언급했습니다. "어셈블러 컴파일러"에 관해서는, 표준을 따르는 대부분의 C++ 컴파일러가이를 처리 할 수 ​​있어야한다고 생각합니다. 예를 들어 here을 참조하십시오.

0

제가 아는 한, 볼랜드 컴파일러 만 __asm ​​키워드를 인식합니다. C 또는 C++에서 인라인 어셈블리를 작성하는 표준 방법이 없다고 생각합니다.

업데이트 : 그냥 확인했는데 사실이 아닙니다. MS 컴파일러 예제 : link text

+0

Visual C++는 __asm ​​키워드도 사용합니다. – jeffm

0

ifdef 지시어로 컴파일러 이름을 확인하고 어셈블러 지원에 대한 설명서를 읽어야합니다. 또한 플랫폼을 확인하십시오. 그리고 저는 VS C++이 64 비트 버전의 어셈블러를 지원하지 않는다는 것을 알고 있습니다.

0

실제로 그보다 더 나쁩니다. 대부분의 C++ 구현에는 어셈블리 삽입을 수행하는 몇 가지 방법이 있습니다. 그러나, (명백하게) 다른 플랫폼으로 이식 할 수 없으며, 사용하는 지침에 따라 플랫폼에서 사용 가능한 모든 프로세서에 이식 할 수 없을 수도 있습니다. 을 수행하면이 작동합니다.