#include <stdio.h>

#include <stdio.h>

#include <windows.h>

void main()

{

            

             int mainarray[100000] ;

             //루틴의속도측정을위해사용

             LARGE_INTEGER liCounter1, liCounter2, liFrequency;

    QueryPerformanceFrequency(&liFrequency);

    QueryPerformanceCounter(&liCounter1);

 

             //10000000000 번의for 루프

 

             for(int i=0; i <100000 ; i++)

             {                                      

                           mainarray[i] =0;

             }

              QueryPerformanceCounter(&liCounter2);

 

              //측정결과

    printf("c 언어수행시간= %f \n", (double)(liCounter2.QuadPart - liCounter1.QuadPart) / (double)liFrequency.QuadPart);

 

 

             //어셈블리루틴속도측정을위해사용

    QueryPerformanceFrequency(&liFrequency);

    QueryPerformanceCounter(&liCounter1);

 

             //어셈루틴번의루프         

             register int k;

             int mainarray2[100000] ;

             _asm{                              

                           mov         dword ptr [k],0

                           mov         eax,dword ptr [k]

                           mov         dword ptr mainarray2[eax*4],0

L1 : cmp         eax,99999

                           je loop_end

                            add         eax,1

                            mov         dword ptr [k],eax

                            mov         eax,dword ptr [k]

              mov         dword ptr mainarray2[eax*4],0

                            jmp L1

loop_end:

             }

    QueryPerformanceCounter(&liCounter2);

 

             //결과

    printf("어셈수행시간= %f \n", (double)(liCounter2.QuadPart - liCounter1.QuadPart) / (double)liFrequency.QuadPart);

}


우호호호 이렇게 중간에 뭔가 해줘야 어셈이 빠르시군요


'Programing > C' 카테고리의 다른 글

C언어 ,c++ 어셈블리 변환  (0) 2016.11.30
어셈블리와 c언어 속도 비교  (0) 2016.11.30
띄어쓰기까지 입력가능한 scanf  (0) 2016.11.30
데이터형  (0) 2016.11.30
반복문  (0) 2016.11.30

#include <stdio.h>

#include <stdio.h>

#include <windows.h>

void main()

{

            

             //루틴의속도측정을위해사용

             LARGE_INTEGER liCounter1, liCounter2, liFrequency;

    QueryPerformanceFrequency(&liFrequency);

    QueryPerformanceCounter(&liCounter1);

 

             //10000000000 번의for 루프

             for(int i=1000000000; i > 0; i--)

             {                                      

             }

              QueryPerformanceCounter(&liCounter2);

 

              //측정결과

    printf("c 언어수행시간= %f \n", (double)(liCounter2.QuadPart - liCounter1.QuadPart) / (double)liFrequency.QuadPart);

 

}


위의 코드를 어셈블리 언어로 변환하는 간단한 방법~



위와 같이 명령 프롬프트에 프로젝트 폴더로 이동하여 cl main.cpp /FAs 라는 명령어를 통해 어셈블리 언어로 변환이 가능하다.




명령어를 수행하면 위와같이 성공적으로 됬단다 라는 말이 나오는데 에러가 있는 부분은 어디어디 에러있으니 고치세요~ 라고 나온다




변환후 폴더에 들어가보면 main.exe, main.asm 이라는 2개의 파일과 object 파일이 생성되는데 뭐 exe파일은 실행이고 asm 파일이 우리가 원하는

어셈블리로 변환된 파일이 되겠다~




변환된 모습~아오 하나도모르겟다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

빠염~


'Programing > C' 카테고리의 다른 글

어셈블리 c언어 속도측정결과  (0) 2016.11.30
어셈블리와 c언어 속도 비교  (0) 2016.11.30
띄어쓰기까지 입력가능한 scanf  (0) 2016.11.30
데이터형  (0) 2016.11.30
반복문  (0) 2016.11.30

#include <stdio.h>

#include <stdio.h>

#include <windows.h>


void main()

{

             //루틴의속도측정을위해사용

             LARGE_INTEGER liCounter1, liCounter2, liFrequency;

    QueryPerformanceFrequency(&liFrequency);

    QueryPerformanceCounter(&liCounter1);

 

             //10000000000 번의for 루프

             for(int i=10000000000; i > 0; i--)

             {                                      

             }

              QueryPerformanceCounter(&liCounter2);

 

              //측정결과

    printf("c 언어수행시간= %f \n", (double)(liCounter2.QuadPart - liCounter1.QuadPart) / (double)liFrequency.QuadPart);

 

 

             //어셈블리루틴속도측정을위해사용

    QueryPerformanceFrequency(&liFrequency);

    QueryPerformanceCounter(&liCounter1);

 

             //어셈루틴번의루프

      register int r1=0;

             _asm{                 

                           mov  r1, 10000000000;

                           L1 : cmp r1,0                     // r1 값을0과비교

                           je loop_end; // r1 0 일경우loop_end

                           dec r1; // 1을감소시키고다시저장

                           jmp L1;

loop_end:

             }           

    QueryPerformanceCounter(&liCounter2);

 

             //결과

    printf("어셈수행시간= %f \n", (double)(liCounter2.QuadPart - liCounter1.QuadPart) / (double)liFrequency.QuadPart);

}



'Programing > C' 카테고리의 다른 글

어셈블리 c언어 속도측정결과  (0) 2016.11.30
C언어 ,c++ 어셈블리 변환  (0) 2016.11.30
띄어쓰기까지 입력가능한 scanf  (0) 2016.11.30
데이터형  (0) 2016.11.30
반복문  (0) 2016.11.30

+ Recent posts