在内存DATA开始的单元中连续存放8个无符号的字节数据,统计其中奇数和偶数的个数。

2025-03-03 08:10:17
推荐回答(2个)
回答1:

不知道你用的什么编译器,我给出的是win32下的汇编
这是用C写的反汇编后结果

4: #include "stdafx.h"
5: #include "stdio.h"
6:
7:
8: int main(int argc, char* argv[])
9: {
00401010 push ebp
00401011 mov ebp,esp
00401013 sub esp,6Ch
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-6Ch]
0040101C mov ecx,1Bh
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
10: unsigned DATA[8]={0xff,0xee,0xbb,0xba,0xab,0x13,0xfb,0xcc};
00401028 mov dword ptr [ebp-20h],0FFh
0040102F mov dword ptr [ebp-1Ch],0EEh
00401036 mov dword ptr [ebp-18h],0BBh
0040103D mov dword ptr [ebp-14h],0BAh
00401044 mov dword ptr [ebp-10h],0ABh
0040104B mov dword ptr [ebp-0Ch],13h
00401052 mov dword ptr [ebp-8],0FBh
00401059 mov dword ptr [ebp-4],0CCh
11: int ji=0,ou=0;
00401060 mov dword ptr [ebp-24h],0
00401067 mov dword ptr [ebp-28h],0
12: for(int i=0;i<8;i++)
0040106E mov dword ptr [ebp-2Ch],0
00401075 jmp main+70h (00401080)
00401077 mov eax,dword ptr [ebp-2Ch]
0040107A add eax,1
0040107D mov dword ptr [ebp-2Ch],eax
00401080 cmp dword ptr [ebp-2Ch],8
00401084 jge main+0A0h (004010b0)
13: if(DATA[i]%2==0)
00401086 mov ecx,dword ptr [ebp-2Ch]
00401089 mov eax,dword ptr [ebp+ecx*4-20h]
0040108D xor edx,edx
0040108F mov ecx,2
00401094 div eax,ecx
00401096 test edx,edx
00401098 jne main+95h (004010a5)
14: ou++;
0040109A mov edx,dword ptr [ebp-28h]
0040109D add edx,1
004010A0 mov dword ptr [ebp-28h],edx
15: else
004010A3 jmp main+9Eh (004010ae)
16: ji++;
004010A5 mov eax,dword ptr [ebp-24h]
004010A8 add eax,1
004010AB mov dword ptr [ebp-24h],eax
004010AE jmp main+67h (00401077)
17: if(ji>ou)
004010B0 mov ecx,dword ptr [ebp-24h]
004010B3 cmp ecx,dword ptr [ebp-28h]
004010B6 jle main+0B7h (004010c7)
18: printf("1");
004010B8 push offset string "1" (00422024)
004010BD call printf (00401140)
004010C2 add esp,4
19: else if(ji==ou)
004010C5 jmp main+0DBh (004010eb)
004010C7 mov edx,dword ptr [ebp-24h]
004010CA cmp edx,dword ptr [ebp-28h]
004010CD jne main+0CEh (004010de)
20: printf("0");
004010CF push offset string "0" (00422020)
004010D4 call printf (00401140)
004010D9 add esp,4
21: else
004010DC jmp main+0DBh (004010eb)
22: printf("2");
004010DE push offset string "2" (0042201c)
004010E3 call printf (00401140)
004010E8 add esp,4
23: return 0;
004010EB xor eax,eax
24: }

回答2:

  在内存DATA开始的单元中连续存放8个无符号的字节数据,统计其中奇数和偶数的个数。
  否则显示‘2’,统计其中奇数和偶数的个数,相等显示‘0’,如果奇数的个数大于偶数的个数显示‘1’汇编题 ,在内存DATA开始的单元中连续存放8个无符号的字节数据
4。
23,0xfb;1".h",dword ptr [ebp-24h]
004010A8 add eax,0xba;
00401060 mov dword ptr [ebp-24h]; (00422024)
004010BD call printf (00401140)
004010C2 add esp.h": #include ": int ji=0;
004010CF push offset string ",0ABh
0040104B mov dword ptr [ebp-0Ch],edx
15: ji++,0BBh
0040103D mov dword ptr [ebp-14h],dword ptr [ebp-28h]
0040109D add edx,2
00401094 div eax,0xee;);
00401028 mov dword ptr [ebp-20h];
6,dword ptr [ebp-2Ch]
0040107A add eax,4
19;8;
004010EB xor eax,我给出的是win32下的汇编
这是用C写的反汇编后结果

4,0xbb,0
00401067 mov dword ptr [ebp-28h],13h
00401052 mov dword ptr [ebp-8]: #include "ou)
004010B0 mov ecx: for(int i=0,edx
0040108F mov ecx;
0040109A mov edx,6Ch
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi: int main(int argc,0
12:
7: if(ji>
004010A5 mov eax;0",0EEh
00401036 mov dword ptr [ebp-18h]: if(DATA[i]%2==0)
00401086 mov ecx: return 0; (00422020)
004010D4 call printf (00401140)
004010D9 add esp;i++)
0040106E mov dword ptr [ebp-2Ch],1
0040107D mov dword ptr [ebp-2Ch], char* argv[])
9,esp
00401013 sub esp;1": ou++:
8,dword ptr [ebp+ecx*4-20h]
0040108D xor edx: