#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;
printf("The Size of (int)=%d Byte\n",
sizeof(int));
printf("So, %d Bit\n\n",
sizeof(int)*
8);
__asm // 더하기 예제
{
MOV EAX, 10 // EAX = 10
MOV EBX, 20 // EBX = 20
ADD EAX, EBX // EAX += EBX
MOV addvar, EAX // addvar = EAX
}
printf("ADD Test Result=%d\n", addvar
);
__asm // 빼기 예제
{
MOV EAX, 10 // EAX = 10
MOV EBX, 20 // EBX = 20
SUB EAX, EBX // EAX += EBX
MOV addvar, EAX // addvar = EAX
}
printf("SUB Test Result=%d\n", addvar
);
__asm // 포인터 사용 예제
{
MOV EAX, 10 // EAX = 10
MOV EBX, p // EBX = p
ADD EAX, [EBX] // EAX += *EBX -> [EAX]는 EAX의 주소가 가르키는 값
MOV pointvar2, EAX // pointvar2 = EAX
}
printf("Pointer Test Result=%d\n", pointvar2
);
__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
}
printf("Compare Test Result=%d\n", cur
);
__asm // 증가 예제
{
MOV EAX, test1 // EAX = test1
INC EAX // EAX++
MOV test2, EAX // test2 = EAX
}
printf("test1=%d, Increased test1=%d\n", test1, test2
);
__asm // 감소 예제
{
MOV EAX, test1 // EAX = test1
DEC EAX // EAX--
MOV test2, EAX // test2 = EAX
}
printf("test1=%d, decreased test1=%d\n", test1, test2
);
__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
}
printf("After XCHG : test1=%d, test2=%d\n", test1, test2
);
}