#include <stdio.h> #define PRODUCT(x) ((x)*(x)) int main() { int i=3,j,k; j=PRODUCT(i++); k=PRODUCT(++i); printf("%d %d",j,k); return 0; }
x
3 * 3
3 * 4
_k$ = -32 ; size = 4_j$ = -20 ; size = 4_i$ = -8 ; size = 4_main PROC ; COMDAT; 9 : { push ebp mov ebp, esp sub esp, 228 ; 000000e4H push ebx push esi push edi lea edi, DWORD PTR [ebp-228] mov ecx, 57 ; 00000039H mov eax, -858993460 ; ccccccccH rep stosd; 10 : int i=3,j,k; mov DWORD PTR _i$[ebp], 3 ; Store 3 in i.; 11 : j=PRODUCT(i++); mov eax, DWORD PTR _i$[ebp] ; Copy i to EAX imul eax, DWORD PTR _i$[ebp] ; Integer Multiply i by EAX (3 * 3) and store result in EAX. mov DWORD PTR _j$[ebp], eax ; Copy EAX to J (value is 9). mov ecx, DWORD PTR _i$[ebp] ; Copy i to ECX (value is 3). add ecx, 1 ; Add 1 to ECX. mov DWORD PTR _i$[ebp], ecx ; Copy ECX to i (value is 4). mov edx, DWORD PTR _i$[ebp] ; Copy i to EDX (value is 4). add edx, 1 ; Add 1 to EDX. mov DWORD PTR _i$[ebp], edx ; Copy EDX to i (value is 5).; 12 : k=PRODUCT(++i); mov eax, DWORD PTR _i$[ebp] ; Copy i to EAX (value is 5). add eax, 1 ; Add 1 to EAX. mov DWORD PTR _i$[ebp], eax ; Copy EAX to i (value is 6). mov ecx, DWORD PTR _i$[ebp] ; Copy i to ECX (value is 6). add ecx, 1 ; Add 1 to ECX. mov DWORD PTR _i$[ebp], ecx ; Copy ECX to i (value is 7). mov edx, DWORD PTR _i$[ebp] ; Copy i to EDX (value is 7). imul edx, DWORD PTR _i$[ebp] ; Integer Multiply i by EDX (7 * 7) and store result in EDX. mov DWORD PTR _k$[ebp], edx ; Copy EDX to k (value is 49).; 13 : printf("%d %d\r\n",j,k); mov esi, esp mov eax, DWORD PTR _k$[ebp] push eax mov ecx, DWORD PTR _j$[ebp] push ecx push OFFSET ??_C@_07BMEMJKJN@?$CFd?5?$CFd?$AN?6?$AA@ call DWORD PTR __imp__printf add esp, 12 ; 0000000cH cmp esi, esp call __RTC_CheckEsp
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)