전체 코드

#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;
  • 정수형 변수 ab 선언 및 초기화

  • 어셈블리 대응

mov dword ptr [a], 1    ; a = 1
mov dword ptr [b], 3    ; b = 3

2️⃣ 대입 연산자 (=)

a = b;
  • b의 값을 a에 복사
  • 어셈블리 대응
mov eax, dword ptr [b]    ; b의 값 로드
mov dword ptr [a], eax    ; a에 저장

3️⃣ 사칙 연산 (+, -, *, /, %)

연산예제어셈블리
덧셈a = b + 3add
뺄셈a = b - 3sub
곱셈a = b * 3imul
나눗셈a = b / 3idiv
나머지a = b % 3idiv 후 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 += 3add
뺄셈 후 대입a -= 3sub
곱셈 후 대입a *= 3imul
나눗셈 후 대입a /= 3idiv
나머지 후 대입a %= 3idiv 후 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++;
  • 현재 a를 b에 대입 후 a 증가
mov eax, dword ptr [a]
mov dword ptr [b], eax
inc eax
mov dword ptr [a], eax
b = ++a;
  • a를 먼저 증가 후 b에 대입
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 변환 가능!

📚 다음 강의 정리도 이런 식으로 계속 이어서 제공 가능!

궁금한 점이나 추가 요청 있으면 편하게 말씀 주세요! 💪😊

profile
李家네_공부방

0개의 댓글