a = b + 3; // 덧셈 add
1. 00F9182B mov eax,dword ptr [b (0F9A004h)]
2. 00F91830 add eax,3
3. 00F91833 mov dword ptr [a (0F9A000h)],eax
1. 레지스터 eax에 b의 값을 넣음
2. eax에 3을 더함
3. a에 eax의 값을 넣음
a = b - 3; // 뺄셈 sub
1. 00F91838 mov eax,dword ptr [b (0F9A004h)]
2. 00F9183D sub eax,3
3. 00F91840 mov dword ptr [a (0F9A000h)],eax
1. 레지스터 eax에 b의 값을 넣음
2. eax에 3을 뺌
3. a에 eax의 값을 넣음
a = b * 3;// 곱셈 mul
1. 00F91845 imul eax,dword ptr [b (0F9A004h)],3
2. 00F9184C mov dword ptr [a (0F9A000h)],eax
1. b의 값에 3을 곱해서 eax에 넣음
2. a에 eax의 값을 넣음
a = b / 3; // 나눗셈 div
1. 00F91851 mov eax,dword ptr [b (0F9A004h)]
2. 00F91856 cdq
3. 00F91857 mov ecx,3
4. 00F9185C idiv eax,ecx
5. 00F9185E mov dword ptr [a (0F9A000h)],eax
1. eax에 b의 값을 넣음
2. 나눗셈을 위해 피젯수(eax)의 사이즈를 확장
(제수(3)가 32bit이면 피젯수(eax)는 64bit여야 32bit 값을 가지는 몫을 얻을 수 있음 )
3. ecx에 3을 넣음
4. eax를 ecx로 나눔
5. 나머지값을 제외한 나눈값을 a에 넣음
a = b % 3;// 나머지 div
1. 00F91863 mov eax,dword ptr [b (0F9A004h)]
2. 00F91868 cdq
3. 00F91869 mov ecx,3
4. 00F9186E idiv eax,ecx
5. 00F91870 mov dword ptr [a (0F9A000h)],edx
1. eax에 b의 값을 넣음
2. 나눗셈을 위해 피젯수(eax)의 사이즈를 확장
(제수(3)가 32bit이면 피젯수(eax)는 64bit여야 32bit 값을 가지는 몫을 얻을 수 있음 )
3. ecx에 3을 넣음
4. eax를 ecx로 나눔
5. 나눈값을 제외한 나머지 값만 a에 넣음
a += 3; // a = a + 3;
a -= 3;
a *= 3;
a /= 3;
a %= 3;
// 증감 연산자
a = a + 1; // add eax, 1 -> inc eax
b = 3 + a++;
1. 00CF18CE mov eax,dword ptr [a (0CFA000h)]
2. 00CF18D3 add eax,3
3. 00CF18D6 mov dword ptr [b (0CFA004h)],eax
4. 00CF18DB mov ecx,dword ptr [a (0CFA000h)]
5. 00CF18E1 add ecx,1
6. 00CF18E4 mov dword ptr [a (0CFA000h)],ecx
1. 레지스터 eax에 a의 값을 넣음
2. eax에 3을 더함 (3 + a)
3. b에 eax의 값을 넣음 (b = 3 + a)
4. ecx에 a의 값을 넣음
5. ecx에 1을 더함
6. a에 ecx의 값을 넣음 (a += 1)
b = 3 + ++a;
1. 00CF18EA mov eax,dword ptr [a (0CFA000h)]
2. 00CF18EF add eax,1
3. 00CF18F2 mov dword ptr [a (0CFA000h)],eax
4. 00CF18F7 mov ecx,dword ptr [a (0CFA000h)]
5. 00CF18FD add ecx,3
6. 00CF1900 mov dword ptr [b (0CFA004h)],ecx
1. eax에 a의 값을 넣음
2. eax에 1을 더함
3. a에 eax의 값을 넣음 (a += 1)
4. ecx에 a의 값을 넣음
5. ecx에 3을 더함
6. b에 ecx의 값을 넣음 (b = 3 + a)
b = 3 + a--;
1. 00C11906 mov eax,dword ptr [a (0C1A000h)]
2. 00C1190B add eax,3
3. 00C1190E mov dword ptr [b (0C1A004h)],eax
4. 00C11913 mov ecx,dword ptr [a (0C1A000h)]
5. 00C11919 sub ecx,1
6. 00C1191C mov dword ptr [a (0C1A000h)],ecx
1. 레지스터 eax에 a의 값을 넣음
2. eax에 3을 더함 (3 + a)
3. b에 eax의 값을 넣음 (b = 3 + a)
4. ecx에 a의 값을 넣음
5. ecx에 1을 뺌
6. a에 ecx의 값을 넣음 (a -= 1)
b = 3 + --a;
1. 00C11922 mov eax,dword ptr [a (0C1A000h)]
2. 00C11927 sub eax,1
3. 00C1192A mov dword ptr [a (0C1A000h)],eax
4. 00C1192F mov ecx,dword ptr [a (0C1A000h)]
5. 00C11935 add ecx,3
6. 00C11938 mov dword ptr [b (0C1A004h)],ecx
1. eax에 a의 값을 넣음
2. eax에 1을 뺌
3. a에 eax의 값을 넣음 (a += 1)
4. ecx에 a의 값을 넣음
5. ecx에 3을 더함
6. b에 ecx의 값을 넣음 (b = 3 + a)
'어셈블리' 카테고리의 다른 글
어셈블리로 보는 비트연산 (0) | 2022.08.16 |
---|---|
어셈블리로 보는 비교연산 (0) | 2022.08.16 |
어셈블리 함수 기초 (0) | 2022.08.11 |
어셈블리 배열과 주소 (0) | 2022.08.11 |
어셈블리 반복문 (0) | 2022.08.11 |