'asm'에 해당되는 글 2건

  1. 2006.08.14 :: [VC] 인라인 ASM 으로 작성한 연산 (1)
  2. 2006.08.14 :: [VC] MMX support 여부
Computer_IT/C++ 2006.08.14 20:55
  1. #include "stdio.h"
  2. // EAX, EBX, ECX, EDX          : 32 bit
  3. // AX, BX, CX, DX                 : 16 bit
  4. // AH, AL, BH, BL, CH, CL, DH, DL :  8 bit
  5. void main()
  6. {
  7.        int addvar, pointvar1=5, pointvar2;
  8.        int *p=&pointvar1;
  9.        int cur = 1;
  10.        int test1 = 1, test2 = 10;
  11.        printf("The Size of (int)=%d Byte\n", sizeof(int));
  12.        printf("So, %d Bit\n\n", sizeof(int)*8);
  13.        __asm // 더하기 예제
  14.        {
  15.                MOV EAX, 10             // EAX = 10
  16.                MOV EBX, 20             // EBX = 20
  17.                ADD EAX, EBX           // EAX += EBX
  18.                MOV addvar, EAX       // addvar = EAX
  19.        }
  20.        printf("ADD Test Result=%d\n", addvar);
  21.        __asm // 빼기 예제
  22.        {
  23.                MOV EAX, 10           // EAX = 10
  24.                MOV EBX, 20           // EBX = 20
  25.                SUB EAX, EBX         // EAX += EBX
  26.                MOV addvar, EAX     // addvar = EAX
  27.        }
  28.        printf("SUB Test Result=%d\n", addvar);
  29.        __asm  // 포인터 사용 예제
  30.        {
  31.                MOV EAX, 10           // EAX = 10
  32.                MOV EBX, p             // EBX = p 
  33.                ADD EAX, [EBX]      // EAX += *EBX  -> [EAX]는 EAX의 주소가 가르키는 값 
  34.                MOV pointvar2, EAX  // pointvar2 = EAX         
  35.        }
  36.        printf("Pointer Test Result=%d\n", pointvar2);
  37.   __asm  // 비교분기 예제
  38.   {
  39.           CMP cur, 1    // if(cur==1)
  40.           JE go1          // goto go1
  41.          
  42.           CMP cur, 2    // if(cur==2)
  43.           JE go2          // goto go2
  44. go1:
  45.           MOV EAX, cur    // EAX = cur
  46.           ADD EAX, 100    // EAX += 100
  47.           MOV cur, EAX    // cur = EAX
  48. go2:
  49.           MOV EAX, cur    // EAX = cur
  50.           ADD EAX, 200    // EAX += 200
  51.           MOV cur, EAX    // cur = EAX
  52.   }
  53.   printf("Compare Test Result=%d\n", cur);
  54.   __asm // 증가 예제
  55.   {
  56.           MOV EAX, test1         // EAX = test1
  57.           INC EAX                   // EAX++
  58.           MOV test2, EAX         // test2 = EAX
  59.   }
  60.   printf("test1=%d, Increased test1=%d\n", test1, test2);
  61.   __asm // 감소 예제
  62.   {
  63.           MOV EAX, test1         // EAX = test1
  64.           DEC EAX                  // EAX-- 
  65.           MOV test2, EAX         // test2 = EAX
  66.   }
  67.   printf("test1=%d, decreased test1=%d\n", test1, test2);
  68.   __asm // 치환 예제
  69.   {
  70.           MOV EAX, test1      // EAX = test1
  71.           MOV EBX, test2      // EBX = test2
  72.           XCHG EAX, EBX     // swap EAX, EBX
  73.           MOV test1, EAX      // test1 = EAX
  74.           MOV test2, EBX      // test2 = EBX
  75.   }
  76.   printf("After XCHG : test1=%d, test2=%d\n", test1, test2);
  77. }

출력결과
The Size of (int)=4 Byte
So, 32 Bit
ADD Test Result=30
SUB Test Result=-10
Pointer Test Result=15
Compare Test Result=301
test1=1, Increased test1=2
test1=1, decreased test1=0
After XCHG : test1=0, test2=1
posted by 고급코드 고급코드
Computer_IT/C++ 2006.08.14 20:47
  1. #include "stdio.h"
  2. int detect_mmx(void)
  3. {
  4.   int res, mmx;
  5.   _asm {
  6.        mov     eax, 1;
  7.        cpuid;
  8.        mov     res, edx;
  9.   }
  10.   mmx = (res & 0x00800000) ? 1 : 0;
  11.        
  12.   return mmx;
  13. }
  14. void main()
  15. {
  16.        int Detected;
  17.        Detected = detect_mmx();   // return 1이면 지원 0이면 미지원
  18.        if(Detected)
  19.                printf("MMX is Supported.\n");
  20.        else
  21.                printf("MMX is NOT Supported\n");
  22. }

CPU의 MMX지원 여부를 알수 있는 코드이다.

'Computer_IT > C++' 카테고리의 다른 글

[C] Long Type의 Data형을 10진수에서 2진수로..  (0) 2006.09.12
[VC] 인라인 ASM 으로 작성한 연산  (1) 2006.08.14
[VC] MMX support 여부  (0) 2006.08.14
Example Program: A Simple Query  (0) 2006.08.07
Const Member변수 초기화 특성  (0) 2006.04.24
LinkedList 자료  (0) 2006.04.06
posted by 고급코드 고급코드