安徽电信不限流量套餐:关于汇编的问题

来源:百度文库 编辑:中科新闻网 时间:2024/05/05 23:04:32
根据用户从键盘上的输入计算下列表达式:

y=(1)x+1000(输入为0)
(2)5x-2(输入为1)
(3)x的绝对值(输入为其他)
设x为双字节带符号数据,并存放在dax单元,结果放在day单元,如果结果为正,在屏幕上显示一个“+”,为负则显示一个“-”号,为0则显示一个“0”。
windows系统的编译ms dos下的

0040B750 push ebp
0040B751 mov ebp,esp
0040B753 sub esp,40h
0040B756 push ebx
0040B757 push esi
0040B758 push edi
0040B759 lea edi,[ebp-40h]
0040B75C mov ecx,10h
0040B761 mov eax,0CCCCCCCCh
0040B766 rep stos dword ptr [edi]

0040B768 movsx eax,word ptr [ebp+8]
0040B76C test eax,eax
0040B76E jle fun+2Fh (0040b77f)

0040B770 push offset string "+" (00420f24)
0040B775 call printf (00401060)
0040B77A add esp,4

0040B77D jmp fun+5Bh (0040b7ab)

0040B77F movsx ecx,word ptr [ebp+8]
0040B783 test ecx,ecx
0040B785 jne fun+46h (0040b796)

0040B787 push offset string "0" (0042012c)
0040B78C call printf (00401060)
0040B791 add esp,4

0040B794 jmp fun+5Bh (0040b7ab)

0040B796 movsx edx,word ptr [ebp+8]
0040B79A test edx,edx
0040B79C jge fun+5Bh (0040b7ab)

0040B79E push offset string "ok" (0042001c)
0040B7A3 call printf (00401060)
0040B7A8 add esp,4

0040B7AB pop edi
0040B7AC pop esi
0040B7AD pop ebx
0040B7AE add esp,40h
0040B7B1 cmp ebp,esp
0040B7B3 call __chkesp (004010e0)
0040B7B8 mov esp,ebp
0040B7BA pop ebp
0040B7BB ret

*程序入口在这里
0040B7C0 push ebp
0040B7C1 mov ebp,esp
0040B7C3 sub esp,4Ch
0040B7C6 push ebx
0040B7C7 push esi
0040B7C8 push edi
0040B7C9 lea edi,[ebp-4Ch]
0040B7CC mov ecx,13h
0040B7D1 mov eax,0CCCCCCCCh
0040B7D6 rep stos dword ptr [edi]

0040B7D8 lea eax,[ebp-4]
0040B7DB push eax
0040B7DC push offset string "%d" (00420f74)
0040B7E1 call scanf (0040da80)
0040B7E6 add esp,8

0040B7E9 movsx ecx,word ptr [ebp-4]
0040B7ED add ecx,3E8h
0040B7F3 mov word ptr [ebp-8],cx

0040B7F7 mov dx,word ptr [ebp-8]
0040B7FB push edx
0040B7FC call @ILT+5(_fun) (0040100a)
0040B801 add esp,4

0040B804 lea eax,[ebp-4]
0040B807 push eax
0040B808 push offset string "%d" (00420f74)
0040B80D call scanf (0040da80)
0040B812 add esp,8

0040B815 movsx ecx,word ptr [ebp-4]
0040B819 imul ecx,ecx,5
0040B81C sub ecx,2
0040B81F mov word ptr [ebp-8],cx

0040B823 mov dx,word ptr [ebp-8]
0040B827 push edx
0040B828 call @ILT+5(_fun) (0040100a)
0040B82D add esp,4

0040B830 lea eax,[ebp-4]
0040B833 push eax
0040B834 push offset string "%d"

0040B839 call scanf (0040da80)
0040B83E add esp,8

0040B841 movsx ecx,word ptr [ebp-4]
0040B845 test ecx,ecx
0040B847 jle main+92h (0040b852)
0040B849 movsx edx,word ptr [ebp-4]
0040B84D mov dword ptr [ebp-0Ch],edx
0040B850 jmp main+9Bh (0040b85b)
0040B852 movsx eax,word ptr [ebp-4]
0040B856 neg eax
0040B858 mov dword ptr [ebp-0Ch],eax
0040B85B mov cx,word ptr [ebp-0Ch]
0040B85F mov word ptr [ebp-8],cx

0040B863 mov dx,word ptr [ebp-8]
0040B867 push edx
0040B868 call @ILT+5(_fun) (0040100a)
0040B86D add esp,4

0040B870 pop edi
0040B871 pop esi
0040B872 pop ebx
0040B873 add esp,4Ch
0040B876 cmp ebp,esp
0040B878 call __chkesp (004010e0)
0040B87D mov esp,ebp
0040B87F pop ebp
0040B880 ret

0040B750 push ebp
0040B751 mov ebp,esp
0040B753 sub esp,40h
0040B756 push ebx
0040B757 push esi
0040B758 push edi
0040B759 lea edi,[ebp-40h]
0040B75C mov ecx,10h
0040B761 mov eax,0CCCCCCCCh
0040B766 rep stos dword ptr [edi]

0040B768 movsx eax,word ptr [ebp+8]
0040B76C test eax,eax
0040B76E jle fun+2Fh (0040b77f)

0040B770 push offset string "+" (00420f24)
0040B775 call printf (00401060)
0040B77A add esp,4

0040B77D jmp fun+5Bh (0040b7ab)

0040B77F movsx ecx,word ptr [ebp+8]
0040B783 test ecx,ecx
0040B785 jne fun+46h (0040b796)

0040B787 push offset string "0" (0042012c)
0040B78C call printf (00401060)
0040B791 add esp,4

0040B794 jmp fun+5Bh (0040b7ab)

0040B796 movsx edx,word ptr [ebp+8]
0040B79A test edx,edx
0040B79C jge fun+5Bh (0040b7ab)

0040B79E push offset string "ok" (0042001c)
0040B7A3 call printf (00401060)
0040B7A8 add esp,4

0040B7AB pop edi
0040B7AC pop esi
0040B7AD pop ebx
0040B7AE add esp,40h
0040B7B1 cmp ebp,esp
0040B7B3 call __chkesp (004010e0)
0040B7B8 mov esp,ebp
0040B7BA pop ebp
0040B7BB ret

*程序入口在这里
0040B7C0 push ebp
0040B7C1 mov ebp,esp
0040B7C3 sub esp,4Ch
0040B7C6 push ebx
0040B7C7 push esi
0040B7C8 push edi
0040B7C9 lea edi,[ebp-4Ch]
0040B7CC mov ecx,13h
0040B7D1 mov eax,0CCCCCCCCh
0040B7D6 rep stos dword ptr [edi]

0040B7D8 lea eax,[ebp-4]
0040B7DB push eax
0040B7DC push offset string "%d" (00420f74)
0040B7E1 call scanf (0040da80)
0040B7E6 add esp,8

0040B7E9 movsx ecx,word ptr [ebp-4]
0040B7ED add ecx,3E8h
0040B7F3 mov word ptr [ebp-8],cx

0040B7F7 mov dx,word ptr [ebp-8]
0040B7FB push edx
0040B7FC call @ILT+5(_fun) (0040100a)
0040B801 add esp,4

0040B804 lea eax,[ebp-4]
0040B807 push eax
0040B808 push offset string "%d" (00420f74)
0040B80D call scanf (0040da80)
0040B812 add esp,8

0040B815 movsx ecx,word ptr [ebp-4]
0040B819 imul ecx,ecx,5
0040B81C sub ecx,2
0040B81F mov word ptr [ebp-8],cx

0040B823 mov dx,word ptr [ebp-8]
0040B827 push edx
0040B828 call @ILT+5(_fun) (0040100a)
0040B82D add esp,4

0040B830 lea eax,[ebp-4]
0040B833 push eax
0040B834 push offset string "%d"

0040B839 call scanf (0040da80)
0040B83E add esp,8

0040B841 movsx ecx,word ptr [ebp-4]
0040B845 test ecx,ecx
0040B847 jle main+92h (0040b852)
0040B849 movsx edx,word ptr [ebp-4]
0040B84D mov dword ptr [ebp-0Ch],edx
0040B850 jmp main+9Bh (0040b85b)
0040B852 movsx eax,word ptr [ebp-4]
0040B856 neg eax
0040B858 mov dword ptr [ebp-0Ch],eax
0040B85B mov cx,word ptr [ebp-0Ch]
0040B85F mov word ptr [ebp-8],cx

0040B863 mov dx,word ptr [ebp-8]
0040B867 push edx
0040B868 call @ILT+5(_fun) (0040100a)
0040B86D add esp,4

0040B870 pop edi
0040B871 pop esi
0040B872 pop ebx
0040B873 add esp,4Ch
0040B876 cmp ebp,esp
0040B878 call __chkesp (004010e0)
0040B87D mov esp,ebp
0040B87F pop ebp
0040B880 ret

高手 真多啊
再过一周 我也会是高手的
嘿嘿~~~~~~~~~~~

什么呀`~ 哪里用这么多~ 虽然没有心思写 但是一眼就看得出 很简单的`~ 就是判别正负而已

上面的答案也太复杂了吧,看不懂

你是要实现以上的原程序吗?