[VC] 인라인 ASM 으로 작성한 연산
Computer_IT/C++2006. 8. 14. 20:55
반응형
- #include "stdio.h"
- // EAX, EBX, ECX, EDX : 32 bit
- // AX, BX, CX, DX : 16 bit
- // AH, AL, BH, BL, CH, CL, DH, DL : 8 bit
- void main()
- {
- int addvar, pointvar1=5, pointvar2;
- int *p=&pointvar1;
- int cur = 1;
- int test1 = 1, test2 = 10;
- __asm // 더하기 예제
- {
- MOV EAX, 10 // EAX = 10
- MOV EBX, 20 // EBX = 20
- ADD EAX, EBX // EAX += EBX
- MOV addvar, EAX // addvar = EAX
- }
- __asm // 빼기 예제
- {
- MOV EAX, 10 // EAX = 10
- MOV EBX, 20 // EBX = 20
- SUB EAX, EBX // EAX += EBX
- MOV addvar, EAX // addvar = EAX
- }
- __asm // 포인터 사용 예제
- {
- MOV EAX, 10 // EAX = 10
- MOV EBX, p // EBX = p
- ADD EAX, [EBX] // EAX += *EBX -> [EAX]는 EAX의 주소가 가르키는 값
- MOV pointvar2, EAX // pointvar2 = EAX
- }
- __asm // 비교분기 예제
- {
- CMP cur, 1 // if(cur==1)
- JE go1 // goto go1
- CMP cur, 2 // if(cur==2)
- JE go2 // goto go2
- go1:
- MOV EAX, cur // EAX = cur
- ADD EAX, 100 // EAX += 100
- MOV cur, EAX // cur = EAX
- go2:
- MOV EAX, cur // EAX = cur
- ADD EAX, 200 // EAX += 200
- MOV cur, EAX // cur = EAX
- }
- __asm // 증가 예제
- {
- MOV EAX, test1 // EAX = test1
- INC EAX // EAX++
- MOV test2, EAX // test2 = EAX
- }
- __asm // 감소 예제
- {
- MOV EAX, test1 // EAX = test1
- DEC EAX // EAX--
- MOV test2, EAX // test2 = EAX
- }
- __asm // 치환 예제
- {
- MOV EAX, test1 // EAX = test1
- MOV EBX, test2 // EBX = test2
- XCHG EAX, EBX // swap EAX, EBX
- MOV test1, EAX // test1 = EAX
- MOV test2, EBX // test2 = EBX
- }
- }
출력결과
The Size of (int)=4 Byte
So, 32 Bit
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
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
반응형
'Computer_IT > C++' 카테고리의 다른 글
[C] printf Type Field Characters (0) | 2006.09.26 |
---|---|
[C] Long Type의 Data형을 10진수에서 2진수로.. (0) | 2006.09.12 |
[VC] MMX support 여부 (0) | 2006.08.14 |
Example Program: A Simple Query (0) | 2006.08.07 |
Const Member변수 초기화 특성 (0) | 2006.04.24 |