求大佬帮忙写段汇编程序,孩子不会啊

在内存中以 DATA1 和 DATA2 为首地址代表两个数据,DATA1 和 DATA2 分别分 配 5 个字节单元,分别存入用压缩 BCD 码表示的 8 位十进制数(低位在前),编 程将两数相加,并将结果存储到 DATA3 中

visual 工具很强大。 

你用c++写一下 然后进行反编译不就好了。

int main() {
008D1800  push        ebp  
008D1801  mov         ebp,esp  
008D1803  sub         esp,0FCh  
008D1809  push        ebx  
008D180A  push        esi  
008D180B  push        edi  
008D180C  lea         edi,[ebp-0FCh]  
008D1812  mov         ecx,3Fh  
008D1817  mov         eax,0CCCCCCCCh  
008D181C  rep stos    dword ptr es:[edi]  
008D181E  mov         ecx,offset _FA494EA5_main@cpp (08DC02Ah)  
008D1823  call        @__CheckForDebuggerJustMyCode@4 (08D130Ch)  
	char DATA1[5]; 
	char DATA2[5];
	char DATA3[5];
	for (int i = 0; i < 5; i++) {
008D1828  mov         dword ptr [ebp-38h],0  
008D182F  jmp         main+3Ah (08D183Ah)  
008D1831  mov         eax,dword ptr [ebp-38h]  
008D1834  add         eax,1  
008D1837  mov         dword ptr [ebp-38h],eax  
008D183A  cmp         dword ptr [ebp-38h],5  
008D183E  jge         main+75h (08D1875h)  
		DATA1[i] = '1' + i;
008D1840  mov         eax,dword ptr [ebp-38h]  
008D1843  add         eax,31h  
008D1846  mov         ecx,dword ptr [ebp-38h]  
008D1849  mov         byte ptr DATA1[ecx],al  
		DATA2[i] = '1' + i;
008D184D  mov         eax,dword ptr [ebp-38h]  
008D1850  add         eax,31h  
008D1853  mov         ecx,dword ptr [ebp-38h]  
008D1856  mov         byte ptr DATA2[ecx],al  
		DATA3[i] = DATA1[i]+ DATA2[i];
008D185A  mov         eax,dword ptr [ebp-38h]  
008D185D  movsx       ecx,byte ptr DATA1[eax]  
008D1862  mov         edx,dword ptr [ebp-38h]  
008D1865  movsx       eax,byte ptr DATA2[edx]  
008D186A  add         ecx,eax  
008D186C  mov         edx,dword ptr [ebp-38h]  
008D186F  mov         byte ptr DATA3[edx],cl  
	}
008D1873  jmp         main+31h (08D1831h)  
}

 

int main() {
00C01800  push        ebp  
00C01801  mov         ebp,esp  
00C01803  sub         esp,0FCh  
00C01809  push        ebx  
00C0180A  push        esi  
00C0180B  push        edi  
00C0180C  lea         edi,[ebp-0FCh]  
00C01812  mov         ecx,3Fh  
00C01817  mov         eax,0CCCCCCCCh  
00C0181C  rep stos    dword ptr es:[edi]  
00C0181E  mov         eax,dword ptr [__security_cookie (0C0A024h)]  
00C01823  xor         eax,ebp  
00C01825  mov         dword ptr [ebp-4],eax  
00C01828  mov         ecx,offset _FA494EA5_main@cpp (0C0C02Ah)  
00C0182D  call        @__CheckForDebuggerJustMyCode@4 (0C0130Ch)  
	char DATA1[5]; 
	char DATA2[5];
	int DATA3 = 0;
00C01832  mov         dword ptr [DATA3],0  
	for (int i = 0; i < 5; i++) {
00C01839  mov         dword ptr [ebp-38h],0  
00C01840  jmp         main+4Bh (0C0184Bh)  
00C01842  mov         eax,dword ptr [ebp-38h]  
00C01845  add         eax,1  
00C01848  mov         dword ptr [ebp-38h],eax  
00C0184B  cmp         dword ptr [ebp-38h],5  
00C0184F  jge         main+6Dh (0C0186Dh)  
		DATA1[i] = '1' + i;
00C01851  mov         eax,dword ptr [ebp-38h]  
00C01854  add         eax,31h  
00C01857  mov         ecx,dword ptr [ebp-38h]  
00C0185A  mov         byte ptr DATA1[ecx],al  
		DATA2[i] = '1' + i;
00C0185E  mov         eax,dword ptr [ebp-38h]  
00C01861  add         eax,31h  
00C01864  mov         ecx,dword ptr [ebp-38h]  
00C01867  mov         byte ptr DATA2[ecx],al  
		
	}
00C0186B  jmp         main+42h (0C01842h)  
	DATA3 = atoi(DATA1) + atoi(DATA2);
00C0186D  mov         esi,esp  
00C0186F  lea         eax,[DATA1]  
00C01872  push        eax  
00C01873  call        dword ptr [__imp__atoi (0C0B174h)]  
00C01879  add         esp,4  
00C0187C  cmp         esi,esp  
00C0187E  call        __RTC_CheckEsp (0C01235h)  
00C01883  mov         esi,eax  
00C01885  mov         edi,esp  
00C01887  lea         ecx,[DATA2]  
00C0188A  push        ecx  
00C0188B  call        dword ptr [__imp__atoi (0C0B174h)]  
00C01891  add         esp,4  
00C01894  cmp         edi,esp  
00C01896  call        __RTC_CheckEsp (0C01235h)  
00C0189B  add         esi,eax  
00C0189D  mov         dword ptr [DATA3],esi  
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632