데이터 연산
데이터를 가공하는 방법에 대해서 알아봅시다
산술 연산자
대입연산
사칙연산
a = b;
mov eax, dword ptr [b (088C048h)]
mov dword ptr [a (088C044h)], eax
a에 b를 대입하고 b를 반환하라
#pragma region 산술 연산
...
#pragma endregion
사칙연산
언제 필요한가?
ex) 데미지 계산, 체력을 깎는다거나, 루프문에서 카운터를 1 증가시킨다거나
a = b + 3;
mov eax, dword ptr [b (088C048h)]
add eax, 3
mov dword ptr [a (088C044h)], eax
a = b - 3;
mov eax, dword ptr [b (088C048h)]
sub eax, 3
mov dword ptr [a (088C044h)], eax
a = b * 3;
imul eax, dword ptr [b (088C048h)], 3
mov dword ptr [a (088C044h)], eax
a = b / 3;
mov eax, dword ptr [b (088C048h)]
cdq
mov ecx, 3
idiv eax, ecx
mov dword ptr [a (088C044h)], eax
a = b % 3;
mov eax, dword ptr [b (088C048h)]
cdq
mov ecx, 3
idiv eax, ecx
mov dword ptr [a (088C044h)], edx
a += 3;
// 증감 연산자
a = a + 1; // add eax, 1 -> inc eax;
mov eax, dword ptr [a (088C044h)]
add eax, 1
mov dword ptr [a (088C044h)], eax
add, inc는 컴파일러에 따라 다르다.
같은 코드를 주더라도 컴파일러에 따라 결과물이 달라진다.
a++;
mov eax, dword ptr [a (088C044h)]
add eax, 1
mov dword ptr [a (088C044h)], eax
++a;
mov eax, dword ptr [a (088C044h)]
add eax, 1
mov dword ptr [a (088C044h)], eax
a--;
--a;
b = a++; // b = a -> a를 1 증가
mov eax, dword ptr [a (088C044h)]
mov dword ptr [b (088C048h)], eax
mov ecx, dword ptr [a (088C044h)]
add ecx, 1
mov dword ptr [a (088C044h)], ecx
b = ++a; // a를 1증가 -> b = a
mov eax, dword ptr [a (088C044h)]
add eax, 1
mov dword ptr [a (088C044h)], eax
mov ecx, dword ptr [a (088C044h)]
mov dword ptr [b (088C048h)], ecx
b = a + 1 * 3;