程序代码:
1 #include <iostream> 2 3 int main() 4 { 5 int i, j, k; 6 int result = 0; 7 for(i = 1; i <= 4; i++) 8 for(j = 1; j <= 4; j++) 9 for(k = 1; k <= 4; k++) 10 { 11 if(i != k && i != j && j != k) 12 { 13 std::cout << i << j << k; 14 result++; 15 if(result % 4 == 0) 16 std::cout << std::endl; 17 else 18 std::cout << "\t"; 19 } 20 } 21 22 std::cout << std::endl << "能组成 " << result << " 个无重复数字的三位数。"; 23 std::cout << std::endl; 24 return 0; 25 }
编译后反汇编
1 00401500 /$ 8D4C24 04 lea ecx, dword ptr [esp+4] 2 00401504 |. 83E4 F0 and esp, FFFFFFF0 3 00401507 |. FF71 FC push dword ptr [ecx-4] 4 0040150A |. 55 push ebp 5 0040150B |. 89E5 mov ebp, esp 6 0040150D |. 51 push ecx 7 0040150E |. 83EC 24 sub esp, 24 8 00401511 |. E8 1AC10000 call 0040D630 ; int main() 9 00401516 |. C745 E8 00000>mov dword ptr [ebp-18], 0 ; int result = 0; 10 0040151D |. C745 F4 01000>mov dword ptr [ebp-C], 1 ; int i = 1; 11 00401524 |. E9 BF000000 jmp 004015E8 ; for(i = 1; i <= 4; i++) 12 00401529 |> C745 F0 01000>/mov dword ptr [ebp-10], 1 ; int j = 1; 13 00401530 |. E9 A5000000 |jmp 004015DA ; for(j = 1; j <= 4; j++) 14 00401535 |> C745 EC 01000>|/mov dword ptr [ebp-14], 1 ; int k = 1; 15 0040153C |. E9 8B000000 ||jmp 004015CC ; for(k = 1; k <= 4; k++) 16 00401541 |> 8B45 F4 ||/mov eax, dword ptr [ebp-C] ; eax = i; 17 00401544 |. 3B45 EC |||cmp eax, dword ptr [ebp-14] ; if(i != k) 18 00401547 |. 74 7F |||je short 004015C8 19 00401549 |. 8B45 F4 |||mov eax, dword ptr [ebp-C] ; eax = i; 20 0040154C |. 3B45 F0 |||cmp eax, dword ptr [ebp-10] ; if(i != j) 21 0040154F |. 74 77 |||je short 004015C8 22 00401551 |. 8B45 F0 |||mov eax, dword ptr [ebp-10] ; eax = i; 23 00401554 |. 3B45 EC |||cmp eax, dword ptr [ebp-14] ; if(j != k) 24 00401557 |. 74 6F |||je short 004015C8 25 00401559 |. 8B45 F4 |||mov eax, dword ptr [ebp-C] ; eax = i; 26 0040155C |. 890424 |||mov dword ptr [esp], eax ; 27 0040155F |. B9 40714800 |||mov ecx, 00487140 28 00401564 |. E8 67020500 |||call 004517D0 ; cout << i; 29 00401569 |. 83EC 04 |||sub esp, 4 30 0040156C |. 89C2 |||mov edx, eax 31 0040156E |. 8B45 F0 |||mov eax, dword ptr [ebp-10] ; eax = j; 32 00401571 |. 890424 |||mov dword ptr [esp], eax ; 33 00401574 |. 89D1 |||mov ecx, edx 34 00401576 |. E8 55020500 |||call 004517D0 ; cout << j; 35 0040157B |. 83EC 04 |||sub esp, 4 36 0040157E |. 89C2 |||mov edx, eax 37 00401580 |. 8B45 EC |||mov eax, dword ptr [ebp-14] ; eax = k; 38 00401583 |. 890424 |||mov dword ptr [esp], eax ; 39 00401586 |. 89D1 |||mov ecx, edx 40 00401588 |. E8 43020500 |||call 004517D0 ; cout << k; 41 0040158D |. 83EC 04 |||sub esp, 4 42 00401590 |. 8345 E8 01 |||add dword ptr [ebp-18], 1 ; result++; 43 00401594 |. 8B45 E8 |||mov eax, dword ptr [ebp-18] 44 00401597 |. 83E0 03 |||and eax, 3 ; result % 4; 45 0040159A |. 85C0 |||test eax, eax ; if(result % 4 == 0) 46 0040159C |. 75 16 |||jnz short 004015B4 47 0040159E |. C70424 E09447>|||mov dword ptr [esp], 004794E0 48 004015A5 |. B9 40714800 |||mov ecx, 00487140 49 004015AA |. E8 71FF0400 |||call 00451520 ; cout << endl; 50 004015AF |. 83EC 04 |||sub esp, 4 51 004015B2 |. EB 14 |||jmp short 004015C8 52 004015B4 |> C74424 04 008>|||mov dword ptr [esp+4], 00488000 53 004015BC |. C70424 407148>|||mov dword ptr [esp], 00487140 54 004015C3 |. E8 089E0700 |||call 0047B3D0 ; cout << "\t"; 55 004015C8 |> 8345 EC 01 |||add dword ptr [ebp-14], 1 ; k++; 56 004015CC |> 837D EC 04 || cmp dword ptr [ebp-14], 4 ; k <= 4; 57 004015D0 |.^ 0F8E 6BFFFFFF ||\jle 00401541 58 004015D6 |. 8345 F0 01 ||add dword ptr [ebp-10], 1 ; j++; 59 004015DA |> 837D F0 04 | cmp dword ptr [ebp-10], 4 ; j <= 4; 60 004015DE |.^ 0F8E 51FFFFFF |\jle 00401535 61 004015E4 |. 8345 F4 01 |add dword ptr [ebp-C], 1 ; i++; 62 004015E8 |> 837D F4 04 cmp dword ptr [ebp-C], 4 ; i <= 4; 63 004015EC |.^ 0F8E 37FFFFFF \jle 00401529 64 004015F2 |. C70424 E09447>mov dword ptr [esp], 004794E0 65 004015F9 |. B9 40714800 mov ecx, 00487140 66 004015FE |. E8 1DFF0400 call 00451520 ; cout << endl; 67 00401603 |. 83EC 04 sub esp, 4 68 00401606 |. C74424 04 028>mov dword ptr [esp+4], 00488002 69 0040160E |. 890424 mov dword ptr [esp], eax 70 00401611 |. E8 BA9D0700 call 0047B3D0 ; cout << "能组成 "; 71 00401616 |. 89C2 mov edx, eax 72 00401618 |. 8B45 E8 mov eax, dword ptr [ebp-18] ; eax = result; 73 0040161B |. 890424 mov dword ptr [esp], eax 74 0040161E |. 89D1 mov ecx, edx 75 00401620 |. E8 AB010500 call 004517D0 ; cout << result; 76 00401625 |. 83EC 04 sub esp, 4 77 00401628 |. C74424 04 0A8>mov dword ptr [esp+4], 0048800A 78 00401630 |. 890424 mov dword ptr [esp], eax 79 00401633 |. E8 989D0700 call 0047B3D0 ; cout << " 个无重复数字的三位数。"; 80 00401638 |. C70424 E09447>mov dword ptr [esp], 004794E0 81 0040163F |. B9 40714800 mov ecx, 00487140 82 00401644 |. E8 D7FE0400 call 00451520 ; cout << endl; 83 00401649 |. 83EC 04 sub esp, 4 84 0040164C |. B8 00000000 mov eax, 0 85 00401651 |. 8B4D FC mov ecx, dword ptr [ebp-4] 86 00401654 |. C9 leave 87 00401655 |. 8D61 FC lea esp, dword ptr [ecx-4] 88 00401658 \. C3 retn
标签:esp,C++,mov,对照,eax,ebp,反汇编,dword,ptr From: https://www.cnblogs.com/hoy0a1d/p/16880480.html