전체 코드
#include <iostream>
using namespace std;
int a = 1;
int b = 3;
int main()
{
a = b;
a = b + 3;
a = b - 3;
a = b * 3;
a = b / 3;
a = b % 3;
a += 3;
a -= 3;
a *= 3;
a /= 3;
a %= 3;
a++;
++a;
a--;
--a;
b = a++;
b = ++a;
b = (a + 1) * 3;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
1️⃣ 산술 연산자 기본 개념
✔️ 산술 연산자란?
- 숫자 데이터를 다룰 때 사용하는 가장 기초적인 연산자
- 사칙 연산 ( + , - , * , / ) + 나머지(%)
✔️ 기본 변수 선언 및 초기화
int a = 1;
int b = 3;
-
정수형 변수 a와 b 선언 및 초기화
-
어셈블리 대응
mov dword ptr [a], 1 ; a = 1
mov dword ptr [b], 3 ; b = 3
2️⃣ 대입 연산자 (=)
a = b;
mov eax, dword ptr [b] ; b의 값 로드
mov dword ptr [a], eax ; a에 저장
3️⃣ 사칙 연산 (+, -, *, /, %)
| 연산 | 예제 | 어셈블리 |
|---|
| 덧셈 | a = b + 3 | add |
| 뺄셈 | a = b - 3 | sub |
| 곱셈 | a = b * 3 | imul |
| 나눗셈 | a = b / 3 | idiv |
| 나머지 | a = b % 3 | idiv 후 edx 사용 |
✔️ 예제 및 대응 어셈블리
a = b + 3;
mov eax, dword ptr [b]
add eax, 3
mov dword ptr [a], eax
a = b - 3;
mov eax, dword ptr [b]
sub eax, 3
mov dword ptr [a], eax
a = b * 3;
mov eax, dword ptr [b]
imul eax, eax, 3
mov dword ptr [a], eax
a = b / 3;
mov eax, dword ptr [b]
cdq ; 부호 확장 (edx에 부호 복사)
mov ecx, 3
idiv ecx ; eax ÷ ecx
mov dword ptr [a], eax
a = b % 3;
mov eax, dword ptr [b]
cdq
mov ecx, 3
idiv ecx
mov dword ptr [a], edx ; 나머지를 저장
4️⃣ 축약형 연산자 (+=, -=, *=, /=, %=)
| 연산 | 예제 | 어셈블리 |
|---|
| 덧셈 후 대입 | a += 3 | add |
| 뺄셈 후 대입 | a -= 3 | sub |
| 곱셈 후 대입 | a *= 3 | imul |
| 나눗셈 후 대입 | a /= 3 | idiv |
| 나머지 후 대입 | a %= 3 | idiv 후 edx 사용 |
5️⃣ 증감 연산자 (++, --)
| 연산 | 설명 | 어셈블리 |
|---|
a++ | 후위 증가 | 먼저 현재 값 사용 후 증가 |
++a | 전위 증가 | 먼저 증가 후 사용 |
a-- | 후위 감소 | 먼저 현재 값 사용 후 감소 |
--a | 전위 감소 | 먼저 감소 후 사용 |
✔️ 예제 및 어셈블리
a++;
mov eax, dword ptr [a]
inc eax
mov dword ptr [a], eax
++a;
inc dword ptr [a]
6️⃣ 전위/후위 차이 예제
b = a++;
mov eax, dword ptr [a]
mov dword ptr [b], eax
inc eax
mov dword ptr [a], eax
b = ++a;
inc dword ptr [a]
mov eax, dword ptr [a]
mov dword ptr [b], eax
7️⃣ 연산 우선순위 예제
b = (a + 1) * 3;
mov eax, dword ptr [a]
add eax, 1
imul eax, eax, 3
mov dword ptr [b], eax
8️⃣ 정리표 - 연산자 우선순위
| 우선순위 | 연산자 |
|---|
| 1 | ++, -- (전위) |
| 2 | *, /, % |
| 3 | +, - |
| 4 | = 및 복합 대입 (+=, -= 등) |
🔥 실전 디버깅 팁
- 디스어셈블리 보기 :
Ctrl+Alt+D
- 메모리 창 :
Ctrl+Alt+M
- 레지스터 확인 : 디버그 중 "레지스터 창" 열기
- 어셈블리 단계별 실행으로 연산 흐름 추적
📌 핵심 요약
| 연산 | 키포인트 |
|---|
| 대입 | mov |
| 덧셈/뺄셈 | add/sub |
| 곱셈 | imul |
| 나눗셈/나머지 | idiv (몫-eax, 나머지-edx) |
| 증감 | inc/dec |
| 전위/후위 | 순서 차이만 주의 |
✅ 마무리
- 연산자별 어셈블리 매핑 완벽 숙지!
- 디스어셈블리로 직접 확인해보며 흐름 익히기
- 산술 연산, 증감 연산은 기본 중의 기본!
📥 필요하시면 이 자료 PDF 변환 가능!
📚 다음 강의 정리도 이런 식으로 계속 이어서 제공 가능!
궁금한 점이나 추가 요청 있으면 편하게 말씀 주세요! 💪😊