飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 7327|回复: 11

编程马拉松(1)

[复制链接]

该用户从未签到

发表于 2007-8-11 07:49:15 | 显示全部楼层 |阅读模式
以下源码主要引自第八阁论坛:http://bbs.chinadbg.cn/forum-7-1.html
也有部分代码是飞翔技术论的朋友给改过的。

我只是来了一个开始,每个人都有权,发出他的标题,但要负责他的标题。
从基础开始学习高级语言+汇编+反汇编
一个简单的小学算术从1加到10[设计思路,用循环做1到10的循环,然后种用循环变量垒加和]从1加到10,请高手们写出高级语言+汇编+反汇编,代码
还有要注意,我写程序的错误,因为这才是真正要让大家学习的地方。
非常高兴看到大家的支持,你们发的程序,请在第二天加上注释。(主要是有错的程序)

以下是C的代码

  1. #include "stdio.h"
  2. main()
  3. {
  4.   int i,j;
  5.     for(i=1;i>10;i++) /*以下为循环*/
  6.           {
  7.            j=j+i
  8.            }
  9.   printf("%d\n"j);
  10.   getch();/*可以让程序暂停*/
  11. }
复制代码
  1. 以下是修改后的代码
  2. #include "stdio.h"
  3. main()
  4. {
  5.   int i,j;/*这里要给变量初始化:int i=j=0*/
  6.     for(i=1;i>10;i++) /*这个循环中,i>10应该写成i<=10或i<11*/
  7.           {
  8.            j=j+i/*这里要加个“;”:j+=i;*/
  9.            }
  10.   printf("%d\n"j);/*这里要在"%d\n"和j中间加上“,”*/
  11.   getch();/*可以让程序暂停*/
  12. }
复制代码
C++代码,注意C++可以随用变量,随定义、初始化
  1. #include "stdio.h"
  2. void main()
  3. {
  4.         int icount = 0;
  5.         for (int i = 1; i <= 10; i++)
  6.         {
  7.                 icount += i;
  8.                 printf("%d\n", icount);/*如果你是想打印每次结果可以这样写,如果想只打印最后的结果,这句应该移到“}”外面*/
  9.         }
  10. }
复制代码
java代码
  1. public static void main(String[] args){
  2.      int count = 0;
  3.      for(int i=1;i<=10;i++){
  4.           count = count+i;
  5.      }
  6.      System.out.println("The sum of 1 to 10 is "+count);
  7. }
复制代码
Delphi代码
  1. Delphi
  2. Var
  3. i,j:Integer;
  4. j:=0;
  5. For i:=1 To 10 j:=i+j;
  6. ShowMessage(IntToStr(j));
复制代码
汇编代码
  1. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  2. ; Sample code for < Win32ASM Programming >
  3. ; by
  4. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  5. ; Model.asm
  6. ; 汇编语主模板
  7. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  8. ; 使用 nmake 或下列命令进行编译和链接:
  9. ; ml /c /coff Model.asm
  10. ; rc Model.rc
  11. ; Link /subsystem:windows Model.obj Model.res
  12. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  13.                 .386
  14.                 .model flat, stdcall
  15.                 option casemap :none
  16. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  17. ; Include 文件定义
  18. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  19. include                windows.inc
  20. include                user32.inc
  21. includelib        user32.lib
  22. include                kernel32.inc
  23. includelib        kernel32.lib
  24. include                Gdi32.inc
  25. includelib        Gdi32.lib
  26. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  27. ; Equ 等值定义
  28. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  29. ICO_MODEL        equ                102

  30. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  31. ; 数据段
  32. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  33.                 .data?

  34. hInstance        dd                ?
  35. hWinMain        dd                ?

  36.                 .const
  37. fmt         db      "和是:%d", 0
  38. szClassName        db        'Model',0
  39. szMessage   db  '用汇编语言写得的一个程序!', 0
  40. sLen        dd   $ - szMessage -  1
  41. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  42. ; 代码段
  43. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  44.                 .code

  45. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  46. _ProcWinMain        proc        uses ebx edi esi hWnd,uMsg,wParam,lParam
  47.                 local        @stPS:PAINTSTRUCT
  48.                 local   @strs[255] :byte
  49.                 local   @hdc :HDC
  50.                 local   @len:DWORD
  51.                
  52.                 mov        eax,uMsg
  53.                 .if        eax ==        WM_PAINT
  54.                         invoke        BeginPaint,hWnd,addr @stPS
  55.                         
  56.                         ;增加绘画代码
  57.                         mov eax, 0
  58.                         mov ecx, 1
  59.         LP:                add eax, ecx
  60.                         inc ecx
  61.                         cmp ecx, 100
  62.                         jle LP
  63.                         
  64.                         invoke wsprintf, addr @strs, addr fmt, eax
  65.                         
  66.                         lea edi, @strs
  67.                         mov esi, edi
  68. _StrCmp:        cmp byte ptr[edi], 0
  69.                         jz _StrEnd
  70.                         inc edi
  71.                         jmp _StrCmp
  72. _StrEnd:        
  73.                         sub edi, esi
  74.                         mov @len, edi
  75.                         
  76.                         invoke GetWindowDC, hWnd
  77.                         mov @hdc, eax
  78.                         invoke TextOut, @hdc, 20, 40, addr @strs, @len
  79.                         invoke ReleaseDC, hWnd, @hdc
  80.                         
  81.                         invoke        EndPaint,hWnd,addr @stPS
  82. ;********************************************************************
  83.                 .elseif        eax ==        WM_CLOSE
  84.                         invoke        DestroyWindow,hWinMain
  85.                         invoke        PostQuitMessage,NULL
  86. ;********************************************************************
  87.                 .else
  88.                         invoke        DefWindowProc,hWnd,uMsg,wParam,lParam
  89.                         ret
  90.                 .endif
  91. ;********************************************************************
  92.                 xor        eax,eax
  93.                 ret

  94. _ProcWinMain        endp
  95. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  96. _WinMain        proc
  97.                 local        @stWndClass:WNDCLASSEX
  98.                 local        @stMsg:MSG

  99.                 invoke        GetModuleHandle,NULL
  100.                 mov        hInstance,eax
  101. ;********************************************************************
  102. ; 注册窗口类
  103. ;********************************************************************
  104.                 invoke        RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
  105.                 invoke        LoadIcon,hInstance,ICO_MODEL
  106.                 mov        @stWndClass.hIcon,eax
  107.                 mov        @stWndClass.hIconSm,eax
  108.                 invoke        LoadCursor,0,IDC_ARROW
  109.                 mov        @stWndClass.hCursor,eax
  110.                 push        hInstance
  111.                 pop        @stWndClass.hInstance
  112.                 mov        @stWndClass.cbSize,sizeof WNDCLASSEX
  113.                 mov        @stWndClass.style,CS_HREDRAW or CS_VREDRAW
  114.                 mov        @stWndClass.lpfnWndProc,offset _ProcWinMain
  115.                 mov        @stWndClass.hbrBackground,COLOR_WINDOW + 1
  116.                 mov        @stWndClass.lpszClassName,offset szClassName
  117.                 invoke        RegisterClassEx,addr @stWndClass
  118. ;********************************************************************
  119. ; 建立并显示窗口
  120. ;********************************************************************
  121.                 invoke        CreateWindowEx,WS_EX_CLIENTEDGE,\
  122.                         offset szClassName,offset szClassName,\
  123.                         WS_OVERLAPPEDWINDOW,\
  124.                         100,100,450,370,\
  125.                         NULL,NULL,hInstance,NULL
  126.                 mov        hWinMain,eax
  127.                 invoke        ShowWindow,hWinMain,SW_SHOWNORMAL
  128.                 invoke        UpdateWindow,hWinMain
  129. ;********************************************************************
  130. ; 消息循环
  131. ;********************************************************************
  132.                 .while        TRUE
  133.                         invoke        GetMessage,addr @stMsg,NULL,0,0
  134.                         .break        .if eax        == 0
  135.                         invoke        TranslateMessage,addr @stMsg
  136.                         invoke        DispatchMessage,addr @stMsg
  137.                 .endw
  138.                 ret

  139. _WinMain        endp
  140. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  141. start:
  142.                 call        _WinMain
  143.                 invoke        ExitProcess,NULL
  144. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  145.                 end        start
复制代码
下面是VB代码
  1. Private Sub Form_Click()
  2. Dim a As Integer, i As Integer
  3. a = 0
  4. For i = 1 To 10
  5. a = a + i
  6. Next i
  7. Form1.Print a
  8. End Sub
复制代码
简单一点的汇编程序
  1. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  2. ; Sample code for < Win32ASM Programming >
  3. ; by **
  4. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  5. ; Sum2.asm
  6. ; 求1+2+3……100的和
  7. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  8. ; 使用 nmake 或下列命令进行编译和链接:
  9. ; ml /c /coff Sum2.asm
  10. ; rc Sum2.rc
  11. ; Link /subsystem:windows Sum2.obj Sum2.res
  12. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  13.                 .386
  14.                 .model flat, stdcall
  15.                 option casemap :none
  16. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  17. ; Include 文件定义
  18. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  19. include                windows.inc
  20. include                user32.inc
  21. includelib        user32.lib
  22. include                kernel32.inc
  23. includelib        kernel32.lib
  24. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  25. ; 数据段
  26. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  27.                 .data

  28. szBuffer        byte    1024 dup (?)     
  29.                 .const
  30. fmt         db      "和是:%d", 0
  31. szCaption   db      "求1+2+3……100的和", 0
  32. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  33. ; 代码段
  34. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  35.                 .code

  36. start:        
  37.                         
  38.                         mov eax, 0
  39.                         mov ecx, 1
  40.         LP:                add eax, ecx
  41.                         inc ecx
  42.                         cmp ecx, 100
  43.                         jle LP
  44.                         
  45.                         invoke wsprintf, addr szBuffer, addr fmt, eax
  46.                         invoke        MessageBox,NULL,offset szBuffer,offset szCaption,MB_OK
  47.                         invoke        ExitProcess,NULL
  48. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  49.                 end        start
复制代码

[ 本帖最后由 freesoft 于 2007-8-11 07:51 编辑 ]
PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-2-17 18:27
  • 签到天数: 33 天

    [LV.5]常住居民I

    发表于 2007-8-11 09:11:16 | 显示全部楼层
    編程的也發到這來了哦,移貼,呵呵
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2007-8-11 14:26:20 | 显示全部楼层
    ,,,我问过飘云,我也没找到合适的地方,只有这里还算将就。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-6-20 07:33
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2007-8-11 16:42:20 | 显示全部楼层
    呵呵
    值得推荐的啊
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2007-8-11 18:18:14 | 显示全部楼层
    每天一贴希望来这里看的朋友,如果会编程,就给看看有没有错,玩反汇编的也给看看反汇编的分析,如果有错的,就给改一下,谢谢
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-8-11 19:37:20 | 显示全部楼层
    可以发到"编程园地"的
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2007-8-12 07:36:33 | 显示全部楼层
    谢谢版主,还希望多支持看看有什么错,现在程序简单,以后复杂后,帮助指证一下。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-8-12 18:11:37 | 显示全部楼层
    1加到100我可以用3种语言来写,哈哈:lol:
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2024-10-30 21:11
  • 签到天数: 453 天

    [LV.9]以坛为家II

    发表于 2007-8-12 19:30:17 | 显示全部楼层
    支持呀。
    论坛会欢迎各种与破解相关的帖子的,不会编程,想学好破解是空话。
    不过好像这个题目显得比较简单。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-12-1 11:04
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2007-8-12 21:11:08 | 显示全部楼层
    这种帖子 绝对欢迎~~

    全部转完了,给加分鼓励~~
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表