汇编指令学习

1 栈和过程调用

```00000000 <swap>:0:    55                       push   %ebp1:    89 e5                    mov    %esp,%ebp3:    83 ec 10                 sub    $0x10,%esp6:    8b 45 08                 mov    0x8(%ebp),%eax9:    8b 00                    mov    (%eax),%eaxb:    89 45 fc                 mov    %eax,-0x4(%ebp)e:    8b 45 0c                 mov    0xc(%ebp),%eax11:    8b 10                    mov    (%eax),%edx13:    8b 45 08                 mov    0x8(%ebp),%eax16:    89 10                    mov    %edx,(%eax)18:    8b 45 0c                 mov    0xc(%ebp),%eax1b:    8b 55 fc                 mov    -0x4(%ebp),%edx1e:    89 10                    mov    %edx,(%eax)20:    c9                       leave  21:    c3                       ret  

 详解:

  1. ```00000000 <swap>:
  2. 0: 55       push %ebp
  3. 1: 89 e5     mov %esp,%ebp
  4. 3: 83 ec 10   sub $0x10,%esp    //分配16字节空间(10进制
  5. 6: 8b 45 08   mov 0x8(%ebp),%eax  //M[0x8(%ebp)]的参数移到%eax
  6. 9: 8b 00     mov (%eax),%eax   //将%eax指向的内存地址移到寄存器%eax
  7. b: 89 45 fc   mov %eax,-0x4(%ebp) //将%eax的值赋给基址-0x4(%ebp)
  8. e: 8b 45 0c   mov 0xc(%ebp),%eax //M[0xc(%ebp)]的参数移到%eax
  9. 11: 8b 10    mov (%eax),%edx 
  10. 13: 8b 45 08  mov 0x8(%ebp),%eax 
  11. 16: 89 10    mov %edx,(%eax)   //将%edx指向的值移到%eax指向的内存地址
  12. 18: 8b 45 0c  mov 0xc(%ebp),%eax  //
  13. 1b: 8b 55 fc  mov -0x4(%ebp),%edx // 
  14. 1e: 89 10    mov %edx,(%eax)   //将%edx指向的值移到%eax指向的内存地址
  15. 20: c9      leave
  16. 21: c3      ret

C语言代码参考 

int swap(int *x,int*y){
//**********Begin**********int t;t=*x;*x=*y;*y=t;//**********End**********
} 

2 条件/选择结构分析

        2.1 if else条件选择结构

08049172 <main>:8049172:       8d 4c 24 04             lea    0x4(%esp),%ecx8049176:       83 e4 f0                and    $0xfffffff0,%esp8049179:       ff 71 fc                pushl  -0x4(%ecx)804917c:       55                      push   %ebp804917d:       89 e5                   mov    %esp,%ebp804917f:       51                      push   %ecx8049180:       83 ec 14                sub    $0x14,%esp8049183:       83 ec 04                sub    $0x4,%esp8049186:       8d 45 f0                lea    -0x10(%ebp),%eax8049189:       50                      push   %eax804918a:       8d 45 f4                lea    -0xc(%ebp),%eax804918d:       50                      push   %eax804918e:       68 08 a0 04 08          push   $0x804a0088049193:       e8 b8 fe ff ff          call   8049050 <__isoc99_scanf@plt>8049198:       83 c4 10                add    $0x10,%esp804919b:       8b 55 f4                mov    -0xc(%ebp),%edx804919e:       8b 45 f0                mov    -0x10(%ebp),%eax80491a1:       39 c2                   cmp    %eax,%edx80491a3:       7e 18                   jle    80491bd <main+0x4b>80491a5:       8b 55 f0                mov    -0x10(%ebp),%edx80491a8:       8b 45 f4                mov    -0xc(%ebp),%eax80491ab:       83 ec 04                sub    $0x4,%esp80491ae:       52                      push   %edx80491af:       50                      push   %eax80491b0:       68 0d a0 04 08          push   $0x804a00d80491b5:       e8 76 fe ff ff          call   8049030 <printf@plt>80491ba:       83 c4 10                add    $0x10,%esp80491bd:       8b 55 f4                mov    -0xc(%ebp),%edx80491c0:       8b 45 f0                mov    -0x10(%ebp),%eax80491c3:       39 c2                   cmp    %eax,%edx80491c5:       75 1a                   jne    80491e1 <main+0x6f>80491c7:       8b 55 f0                mov    -0x10(%ebp),%edx80491ca:       8b 45 f4                mov    -0xc(%ebp),%eax80491cd:       83 ec 04                sub    $0x4,%esp80491d0:       52                      push   %edx80491d1:       50                      push   %eax80491d2:       68 15 a0 04 08          push   $0x804a01580491d7:       e8 54 fe ff ff          call   8049030 <printf@plt>80491dc:       83 c4 10                add    $0x10,%esp80491df:       eb 18                   jmp    80491f9 <main+0x87>80491e1:       8b 55 f0                mov    -0x10(%ebp),%edx80491e4:       8b 45 f4                mov    -0xc(%ebp),%eax80491e7:       83 ec 04                sub    $0x4,%esp80491ea:       52                      push   %edx80491eb:       50                      push   %eax80491ec:       68 1d a0 04 08          push   $0x804a01d80491f1:       e8 3a fe ff ff          call   8049030 <printf@plt>80491f6:       83 c4 10                add    $0x10,%esp80491f9:       b8 00 00 00 00          mov    $0x0,%eax80491fe:       8b 4d fc                mov    -0x4(%ebp),%ecx8049201:       c9                      leave8049202:       8d 61 fc                lea    -0x4(%ecx),%esp8049205:       c3                      ret

 详解:

  1. 08049172 <main>:
  2. 8049172: 8d 4c 24 04    lea 0x4(%esp),%ecx
  3. 8049176: 83 e4 f0      and $0xfffffff0,%esp //16字节对齐
  4. 8049179: ff 71 fc      pushl -0x4(%ecx)
  5. 804917c: 55          push %ebp
  6. 804917d: 89 e5        mov %esp,%ebp
  7. 804917f: 51          push %ecx //把%ecx压入栈
  8. 8049180: 83 ec 14      sub $0x14,%esp
  9. 8049183: 83 ec 04      sub $0x4,%esp
  10. 8049186: 8d 45 f0      lea -0x10(%ebp),%eax //
  11. 8049189: 50          push %eax
  12. 804918a: 8d 45 f4      lea -0xc(%ebp),%eax
  13. 804918d: 50          push %eax
  14. 804918e: 68 08 a0 04 08  push $0x804a008
  15. 8049193: e8 b8 fe ff ff  call 8049050 <__isoc99_scanf@plt> //调用scanf
  16. 8049198: 83 c4 10      add $0x10,%esp //回收栈上的空间
  17. 804919b: 8b 55 f4      mov -0xc(%ebp),%edx // 内存的值赋给%edx
  18. 804919e: 8b 45 f0      mov -0x10(%ebp),%eax // 内存的值赋给%eax
  19. 80491a1: 39 c2        cmp %eax,%edx //比较eax与edx
  20. 80491a3: 7e 18        jle 80491bd <main+0x4b> //小于就跳转到80491bd
  21. 80491a5: 8b 55 f0      mov -0x10(%ebp),%edx
  22. 80491a8: 8b 45 f4      mov -0xc(%ebp),%eax
  23. 80491ab: 83 ec 04      sub $0x4,%esp
  24. 80491ae: 52          push %edx
  25. 80491af: 50          push %eax
  26. 80491b0: 68 0d a0 04 08 push $0x804a00d
  27. 80491b5: e8 76 fe ff ff call 8049030 <printf@plt>
  28. 80491ba: 83 c4 10     add $0x10,%esp
  29. 80491bd: 8b 55 f4     mov -0xc(%ebp),%edx
  30. 80491c0: 8b 45 f0     mov -0x10(%ebp),%eax
  31. 80491c3: 39 c2       cmp %eax,%edx
  32. 80491c5: 75 1a       jne 80491e1 <main+0x6f> //不相等就跳转80491e1
  33. 80491c7: 8b 55 f0     mov -0x10(%ebp),%edx
  34. 80491ca: 8b 45 f4     mov -0xc(%ebp),%eax
  35. 80491cd: 83 ec 04     sub $0x4,%esp
  36. 80491d0: 52         push %edx
  37. 80491d1: 50         push %eax
  38. 80491d2: 68 15 a0 04 08 push $0x804a015
  39. 80491d7: e8 54 fe ff ff call 8049030 <printf@plt>
  40. 80491dc: 83 c4 10     add $0x10,%esp
  41. 80491df: eb 18       jmp 80491f9 <main+0x87> 
  42. 80491e1: 8b 55 f0     mov -0x10(%ebp),%edx
  43. 80491e4: 8b 45 f4    mov -0xc(%ebp),%eax
  44. 80491e7: 83 ec 04     sub $0x4,%esp
  45. 80491ea: 52         push %edx
  46. 80491eb: 50         push %eax
  47. 80491ec: 68 1d a0 04 08 push $0x804a01d
  48. 80491f1: e8 3a fe ff ff call 8049030 <printf@plt>
  49. 80491f6: 83 c4 10     add $0x10,%esp
  50. 80491f9: b8 00 00 00 00 mov $0x0,%eax
  51. 80491fe: 8b 4d fc     mov -0x4(%ebp),%ecx
  52. 8049201: c9         leave
  53. 8049202: 8d 61 fc     lea -0x4(%ecx),%esp
  54. 8049205: c3         ret

 C语言代码参考 

#include <stdio.h>
int main()
{int a, b;scanf("%d%d", &a, &b);printf("评测结果:成功\n评测脚本:C\n返回结果:");//此行不在汇编代码中//**********Begin**********if(a>b)//**********End************	printf("%d > %d", a, b);//**********Begin**********if(a==b)//**********End************    printf("%d = %d", a, b);//**********Begin**********if(a<b)//**********End************printf("%d < %d", a, b);return 0;
}

 

        2.2 switch选择结构

08049182 <main>:8049182:       8d 4c 24 04             lea    0x4(%esp),%ecx8049186:       83 e4 f0                and    $0xfffffff0,%esp8049189:       ff 71 fc                pushl  -0x4(%ecx)804918c:       55                      push   %ebp804918d:       89 e5                   mov    %esp,%ebp804918f:       51                      push   %ecx8049190:       83 ec 14                sub    $0x14,%esp8049193:       83 ec 08                sub    $0x8,%esp8049196:       8d 45 f4                lea    -0xc(%ebp),%eax8049199:       50                      push   %eax804919a:       68 08 a0 04 08          push   $0x804a008804919f:       e8 bc fe ff ff          call   8049060 <__isoc99_scanf@plt>80491a4:       83 c4 10                add    $0x10,%esp80491a7:       83 ec 0c                sub    $0xc,%esp80491aa:       68 0c a0 04 08          push   $0x804a00c80491af:       e8 7c fe ff ff          call   8049030 <printf@plt>80491b4:       83 c4 10                add    $0x10,%esp80491b7:       8b 45 f4                mov    -0xc(%ebp),%eax80491ba:       83 f8 06                cmp    $0x6,%eax80491bd:       77 73                   ja     8049232 <main+0xb0>80491bf:       8b 04 85 54 a0 04 08    mov    0x804a054(,%eax,4),%eax80491c6:       ff e0                   jmp    *%eax80491c8:       83 ec 0c                sub    $0xc,%esp80491cb:       68 43 a0 04 08          push   $0x804a04380491d0:       e8 6b fe ff ff          call   8049040 <puts@plt>80491d5:       83 c4 10                add    $0x10,%esp80491d8:       eb 69                   jmp    8049243 <main+0xc1>80491da:       83 ec 0c                sub    $0xc,%esp80491dd:       68 45 a0 04 08          push   $0x804a04580491e2:       e8 59 fe ff ff          call   8049040 <puts@plt>80491e7:       83 c4 10                add    $0x10,%esp80491ea:       eb 57                   jmp    8049243 <main+0xc1>80491ec:       83 ec 0c                sub    $0xc,%esp80491ef:       68 47 a0 04 08          push   $0x804a04780491f4:       e8 47 fe ff ff          call   8049040 <puts@plt>80491f9:       83 c4 10                add    $0x10,%esp80491fc:       eb 45                   jmp    8049243 <main+0xc1>80491fe:       83 ec 0c                sub    $0xc,%esp8049201:       68 49 a0 04 08          push   $0x804a0498049206:       e8 35 fe ff ff          call   8049040 <puts@plt>804920b:       83 c4 10                add    $0x10,%esp804920e:       eb 33                   jmp    8049243 <main+0xc1>8049210:       83 ec 0c                sub    $0xc,%esp8049213:       68 4b a0 04 08          push   $0x804a04b8049218:       e8 23 fe ff ff          call   8049040 <puts@plt>804921d:       83 c4 10                add    $0x10,%esp8049220:       83 ec 0c                sub    $0xc,%esp8049223:       68 4d a0 04 08          push   $0x804a04d8049228:       e8 13 fe ff ff          call   8049040 <puts@plt>804922d:       83 c4 10                add    $0x10,%esp8049230:       eb 11                   jmp    8049243 <main+0xc1>8049232:       83 ec 0c                sub    $0xc,%esp8049235:       68 4f a0 04 08          push   $0x804a04f804923a:       e8 01 fe ff ff          call   8049040 <puts@plt>804923f:       83 c4 10                add    $0x10,%esp8049242:       90                      nop8049243:       b8 00 00 00 00          mov    $0x0,%eax8049248:       8b 4d fc                mov    -0x4(%ebp),%ecx804924b:       c9                      leave804924c:       8d 61 fc                lea    -0x4(%ecx),%esp804924f:       c3                      ret

 详解:只看switch部分

  1. 80491b7: 8b 45 f4         mov -0xc(%ebp),%eax //把-0xc(%ebp)赋给%eax
  2. 80491ba: 83 f8 06         cmp $0x6,%eax
  3. 80491bd: 77 73           ja 8049232 <main+0xb0> //大于就跳转8049232
  4. 80491bf: 8b 04 85 54 a0 04 08 mov 0x804a054(,%eax,4),%eax 
  5. 80491c6: ff e0           jmp *%eax //间接跳转 跳到eax对应的值内
  6. 80491c8: 83 ec 0c         sub $0xc,%esp
  7. 80491cb: 68 43 a0 04 08     push $0x804a043
  8. 80491d0: e8 6b fe ff ff     call 8049040 <puts@plt>
  9. 80491d5: 83 c4 10         add $0x10,%esp
  10. 80491d8: eb 69           jmp 8049243 <main+0xc1> //无条件跳转243
  11. 80491da: 83 ec 0c         sub $0xc,%esp
  12. 80491dd: 68 45 a0 04 08     push $0x804a045
  13. 80491e2: e8 59 fe ff ff     call 8049040 <puts@plt>
  14. 80491e7: 83 c4 10         add $0x10,%esp
  15. 80491ea: eb 57           jmp 8049243 <main+0xc1>//无条件跳转243
  16. 80491ec: 83 ec 0c         sub $0xc,%esp
  17. 80491ef: 68 47 a0 04 08     push $0x804a047
  18. 80491f4: e8 47 fe ff ff     call 8049040 <puts@plt>
  19. 80491f9: 83 c4 10         add $0x10,%esp
  20. 80491fc: eb 45           jmp 8049243 <main+0xc1>//无条件跳转243
  21. 80491fe: 83 ec 0c         sub $0xc,%esp
  22. 8049201: 68 49 a0 04 08     push $0x804a049
  23. 8049206: e8 35 fe ff ff     call 8049040 <puts@plt>
  24. 804920b: 83 c4 10         add $0x10,%esp
  25. 804920e: eb 33          jmp 8049243 <main+0xc1>//无条件跳转243
  26. 8049210: 83 ec 0c         sub $0xc,%esp
  27. 8049213: 68 4b a0 04 08    push $0x804a04b
  28. 8049218: e8 23 fe ff ff    call 8049040 <puts@plt>
  29. 804921d: 83 c4 10        add $0x10,%esp
  30. 8049220: 83 ec 0c       sub $0xc,%esp
  31. 8049223: 68 4d a0 04 08   push $0x804a04d
  32. 8049228: e8 13 fe ff ff   call 8049040 <puts@plt>
  33. 804922d: 83 c4 10       add $0x10,%esp
  34. 8049230: eb 11         jmp 8049243 <main+0xc1>//无条件跳转243
  35. 8049232: 83 ec 0c       sub $0xc,%esp
  36. 8049235: 68 4f a0 04 08   push $0x804a04f
  37. 804923a: e8 01 fe ff ff   call 8049040 <puts@plt>
  38. 804923f: 83 c4 10       add $0x10,%esp
  39. 8049242: 90           nop
  40. 8049243: b8 00 00 00 00   mov $0x0,%eax
  41. 8049248: 8b 4d fc       mov -0x4(%ebp),%ecx
  42. 804924b: c9 leave
  43. 804924c: 8d 61 fc lea -0x4(%ecx),%esp
  44. 804924f: c3 ret

 C语言代码参考 

#include <stdio.h>
int main()
{int a;scanf("%d", &a);printf("评测结果:成功\n评测脚本:C\n返回结果:");switch (a){   case 1:printf("1\n");break;//**********Begin********case 2:printf("2\n");break;case 3:printf("3\n");break;case 4:printf("4\n");break;case 5:printf("5\n");printf("6\n");break;case 6:printf("6\n");break;default: printf("else"); break;//**********End**********}return 0;
}

3 循环结构分析

        3.1 for 循环结构

08049172 <main>:8049172:       8d 4c 24 04             lea    0x4(%esp),%ecx8049176:       83 e4 f0                and    $0xfffffff0,%esp8049179:       ff 71 fc                pushl  -0x4(%ecx)804917c:       55                      push   %ebp804917d:       89 e5                   mov    %esp,%ebp804917f:       51                      push   %ecx8049180:       83 ec 14                sub    $0x14,%esp8049183:       c7 45 f4 00 00 00 00    movl   $0x0,-0xc(%ebp)804918a:       83 ec 08                sub    $0x8,%esp804918d:       8d 45 f0                lea    -0x10(%ebp),%eax8049190:       50                      push   %eax8049191:       68 08 a0 04 08          push   $0x804a0088049196:       e8 b5 fe ff ff          call   8049050 <__isoc99_scanf@plt>804919b:       83 c4 10                add    $0x10,%esp804919e:       eb 0c                   jmp    80491ac <main+0x3a>80491a0:       8b 55 f0                mov    -0x10(%ebp),%edx80491a3:       8b 45 f0                mov    -0x10(%ebp),%eax80491a6:       0f af c2                imul   %edx,%eax80491a9:       01 45 f4                add    %eax,-0xc(%ebp)80491ac:       8b 45 f0                mov    -0x10(%ebp),%eax80491af:       8d 50 ff                lea    -0x1(%eax),%edx80491b2:       89 55 f0                mov    %edx,-0x10(%ebp)80491b5:       85 c0                   test   %eax,%eax80491b7:       75 e7                   jne    80491a0 <main+0x2e>80491b9:       83 ec 08                sub    $0x8,%esp80491bc:       ff 75 f4                pushl  -0xc(%ebp)80491bf:       68 08 a0 04 08          push   $0x804a00880491c4:       e8 67 fe ff ff          call   8049030 <printf@plt>80491c9:       83 c4 10                add    $0x10,%esp80491cc:       b8 00 00 00 00          mov    $0x0,%eax80491d1:       8b 4d fc                mov    -0x4(%ebp),%ecx80491d4:       c9                      leave80491d5:       8d 61 fc                lea    -0x4(%ecx),%esp80491d8:       c3                      ret

详解:只看for循环结构

  1. 804919e: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp) //把立即数0赋给地址
  2. 80491a5: eb 0a           jmp 80491b1 <main+0x3f>//跳转
  3. 80491a7: 8b 45 f4         mov -0xc(%ebp),%eax //i值传递
  4. 80491aa: 01 45 f0         add %eax,-0x10(%ebp)// i+sum
  5. 80491ad: 83 45 f4 01       addl $0x1,-0xc(%ebp)//i++
  6. 80491b1: 8b 45 ec          mov -0x14(%ebp),%eax //n值传递
  7. 80491b4: 39 45 f4         cmp %eax,-0xc(%ebp)   //比较i与n
  8. 80491b7: 7c ee           jl 80491a7 <main+0x35> //小于跳转
  9. 80491b9: 83 ec 08         sub $0x8,%esp
  10. 80491bc: ff 75 f0         pushl -0x10(%ebp)
  11. 80491bf: 68 08 a0 04 08    push $0x804a008
  12. 80491c4: e8 67 fe ff ff    call 8049030 <printf@plt>
  13. 80491c9: 83 c4 10        add $0x10,%esp
  14. 80491cc: b8 00 00 00 00    mov $0x0,%eax
  15. 80491d1: 8b 4d fc        mov -0x4(%ebp),%ecx
  16. 80491d4: c9 leave
  17. 80491d5: 8d 61 fc lea -0x4(%ecx),%esp
  18. 80491d8: c3 ret

 C语言代码参考 

#include <stdio.h>int main()
{int n, i, sum = 0;scanf("%d", &n);printf("评测结果:成功\n评测脚本:C\n返回结果:");//此行不在汇编代码中//**********Begin**********for(i=1;i<n;i++){sum+=i;}//**********End**********printf("%d", sum);return 0;
}

        3.2 while 循环结构

08049172 <main>:8049172:       8d 4c 24 04             lea    0x4(%esp),%ecx8049176:       83 e4 f0                and    $0xfffffff0,%esp8049179:       ff 71 fc                pushl  -0x4(%ecx)804917c:       55                      push   %ebp804917d:       89 e5                   mov    %esp,%ebp804917f:       51                      push   %ecx8049180:       83 ec 14                sub    $0x14,%esp8049183:       c7 45 f4 00 00 00 00    movl   $0x0,-0xc(%ebp)804918a:       83 ec 08                sub    $0x8,%esp804918d:       8d 45 f0                lea    -0x10(%ebp),%eax8049190:       50                      push   %eax8049191:       68 08 a0 04 08          push   $0x804a0088049196:       e8 b5 fe ff ff          call   8049050 <__isoc99_scanf@plt>804919b:       83 c4 10                add    $0x10,%esp804919e:       eb 0c                   jmp    80491ac <main+0x3a>80491a0:       8b 55 f0                mov    -0x10(%ebp),%edx80491a3:       8b 45 f0                mov    -0x10(%ebp),%eax80491a6:       0f af c2                imul   %edx,%eax80491a9:       01 45 f4                add    %eax,-0xc(%ebp)80491ac:       8b 45 f0                mov    -0x10(%ebp),%eax80491af:       8d 50 ff                lea    -0x1(%eax),%edx80491b2:       89 55 f0                mov    %edx,-0x10(%ebp)80491b5:       85 c0                   test   %eax,%eax80491b7:       75 e7                   jne    80491a0 <main+0x2e>80491b9:       83 ec 08                sub    $0x8,%esp80491bc:       ff 75 f4                pushl  -0xc(%ebp)80491bf:       68 08 a0 04 08          push   $0x804a00880491c4:       e8 67 fe ff ff          call   8049030 <printf@plt>80491c9:       83 c4 10                add    $0x10,%esp80491cc:       b8 00 00 00 00          mov    $0x0,%eax80491d1:       8b 4d fc                mov    -0x4(%ebp),%ecx80491d4:       c9                      leave80491d5:       8d 61 fc                lea    -0x4(%ecx),%esp80491d8:       c3                      ret

详解:只看while循环结构

  1. 804919e: eb 0c     jmp 80491ac <main+0x3a>//无条件跳转
  2. 80491a0: 8b 55 f0   mov -0x10(%ebp),%edx
  3. 80491a3: 8b 45 f0   mov -0x10(%ebp),%eax
  4. 80491a6: 0f af c2   imul %edx,%eax
  5. 80491a9: 01 45 f4   add %eax,-0xc(%ebp) //sum=sum+n*n
  6. 80491ac: 8b 45 f0   mov -0x10(%ebp),%eax
  7. 80491af: 8d 50 ff   lea -0x1(%eax),%edx //减去一
  8. 80491b2: 89 55 f0   mov %edx,-0x10(%ebp)
  9. 80491b5: 85 c0     test %eax,%eax
  10. 80491b7: 75 e7     jne 80491a0 <main+0x2e>//非0跳转
  11. 80491b9: 83 ec 08   sub $0x8,%esp
  12. 80491bc: ff 75 f4   pushl -0xc(%ebp)
  13. 80491bf: 68 08 a0 04 08 push $0x804a008
  14. 80491c4: e8 67 fe ff ff call 8049030 <printf@plt>
  15. 80491c9: 83 c4 10   add $0x10,%esp
  16. 80491cc: b8 00 00 00 00 mov $0x0,%eax
  17. 80491d1: 8b 4d fc   mov -0x4(%ebp),%ecx
  18. 80491d4: c9 leave
  19. 80491d5: 8d 61 fc lea -0x4(%ecx),%esp
  20. 80491d8: c3 ret

C语言代码参考 

#include <stdio.h>int main()
{int n, sum = 0;scanf("%d", &n);printf("评测结果:成功\n评测脚本:C\n返回结果:");//此行不在汇编代码中//**********Begin********while(n>0){n--;sum=sum+n*n;}//**********End**********printf("%d", sum);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Docker】实战:nginx、redis

▒ 目录 ▒ &#x1f6eb; 导读开发环境 1️⃣ Nginx 拉取 Nginx 镜像nginx.conf启动 Nginx访问 Nginx 2️⃣ redis拉取 Redis 镜像启动 Redis 容器测试 Redis &#x1f4d6; 参考资料 &#x1f6eb; 导读 开发环境 版本号描述文章日期2023-12-15操作系统Win10 - 22H222621.2…

【离线】牛客小白月赛39 G

登录—专业IT笔试面试备考平台_牛客网 题意 思路 考虑离线Bit做法 这种离线Bit&#xff0c;一般都是去考虑二维数点就能写清楚了 确定好两维&#xff1a;x 轴是1 ~ n&#xff0c; y 轴是 k 的大小 然后去遍历值域&#xff0c;如果值域很大的话需要排序离散化&#xff0c;但…

metagpt学习实践

metagpt 官方库目录 一级目录 tree -L 1 -I "__pycache__" . ├── actions ├── _compat.py ├── config.py ├── const.py ├── document_store ├── environment.py ├── __init__.py ├── inspect_module.py ├── learn ├── llm.py ├── …

Pydantic 中 validator 和 validators 的区别

前言 pydantic 是一个数据验证库&#xff0c;使用 Python 类型注解来验证输入或转换数据 开始 validator 是 pydantic 的一个装饰器&#xff0c;它用于在数据模型上创建自定义验证函数。这些验证函数会在 Pydantic 模型的字段被初始化时运行。例如&#xff1a; from pydant…

JVM类加载器的分类以及双亲委派机制

目录 前言 1. 类加载器的分类&#xff1a; 1.1 启动类加载器&#xff08;Bootstrap ClassLoader&#xff09;&#xff1a; 1.2 扩展类加载器&#xff08;Extension ClassLoader&#xff09;&#xff1a; 1.3 应用程序类加载器&#xff08;Application ClassLoader&#xff…

Linux第一个小程序——进度条

Linux第一个小程序——进度条 1. 前言2. 缓冲区概念3. \r && \n4. 进度条实现4.1 初级进度条4.2 升级进度条 1. 前言 在我们写这个小程序之前&#xff0c;我们要用到我们学的三个知识点 gcc的使用vim的使用make/makefile的使用 除此之外还需要一些其他的知识点&…

uniapp微信小程序下载base64图片流或https图片

常规https的图片下载是这样的 const urlPath https://test/logo.png uni.downloadFile({url: urlPath,success(res){// 这时会产生一个临时路径&#xff0c;在应用本次启动期间可以正常使用。if (res.statusCode 200) {// 需要将图片保存到相册uni.saveImageToPhotosAlbum({…

学习Django从零开始之三

搭建虚拟python环境 搭建开发环境有多种方式&#xff0c;其中包括本地直接安装Python的可执行文件&#xff0c;使用virtualenv&#xff0c;以及使用Anaconda和Miniconda等工具。这些工具在创建Python虚拟环境方面各有特点。具体不同之处感兴趣的同学可以自行查阅相关资料。 简…

2-go-变量定义、类型、常量、函数

1 变量定义 2 类型 3 常量 4 函数 1 变量定义 package mainimport "fmt"//注释 单行注释/* 多行注释 */ func main() {// 变量定义// 1 完整定义 var关键字 变量名 变量类型 变量值//var age int 19 // 变量定义了必须使用&#xff0c;不使用就报错//fmt.Prin…

锚定价值(现代诗)

一 已知苹果价值5元&#xff0c;香蕉价值6元。 用它们产生杂交水果&#xff0c;称为香果。 请问香果价值为多少&#xff1f; A. 11 B. 5.5 C. 5 D. 6 E. 30 F. 1000000 二 已知金奖苹果价值12元&#xff0c;银奖苹果价值9元。 请问铜奖苹果价值为多少&#xff1f; A. 6…

【Java后端】Tomcat(学习笔记)

一、Web服务器 1、Web服务器概述 服务器&#xff1a;装服务器软件的计算机 服务器软件&#xff1a;接收用户请求&#xff0c;处理请求&#xff0c;做出响应 2、常见的服务器软件 webLogicwebSphereJBOSSTomcatJavaEE&#xff1a;Java语言企业版开发的13个规范 二、tomcat…

IP代理如何影响网站的速度?代理ip服务器有哪些作用?

目录 前言 一、如何影响速度 二、代理服务器的作用 1. 隐藏真实IP地址 2. 绕过访问限制 3. 分布式访问 4. 数据缓存和加速 总结 前言 IP代理是一种通过在用户和目标网站之间引入代理服务器来访问目标网站的方式。代理服务器充当中间人&#xff0c;将用户的请求转发给目…

flyway快速入门基础教程

flyway快速入门 一、flyway是什么&#xff1f;二、flyway使用目的1. 使用原因&#xff1a;2. 举个例子&#xff1a; 三、flyway工作原理四、flyway使用约定和命名规则1. 数据库版本文件整体约定2. 数据库版本文件夹管理约定3. 数据库版本文件命名约定4. 禁止项 五、flyway配置和…

Lua 模仿C++类

Lua类的声明与定义 在文件中"AInfoClass.lua"声明并定义一个Lua类。 local AInfoClass {}function AInfoClass.New(id)local tempTab {}tempTab.id idsetmetatable(tempTab, {__index AInfoClass})tempTab:InitClass()return tempTab endfunction AInfoClass:I…

功能测试转向自动化测试 。10 年 心路历程——愿测试人不再迷茫

十年测试心路历程&#xff1a; 由于历史原因&#xff0c;大部分测试人员&#xff0c;最开始接触都是纯功能界面测试&#xff0c;随着工作年限&#xff0c;会接触到一些常用测试工具&#xff0c;比如抓包&#xff0c;数据库&#xff0c;linux 等。 我大学学的计算机专业&#…

Python自动化测试如何自动生成测试用例?

汽车软件开发自动化测试攻略 随着软件开发在造车行业中占有越来越重要的地位&#xff0c;敏捷开发的思想在造车领域中也逐渐地被重视起来&#xff0c;随之而来的是整车厂对自动化测试需求越来越强烈。本文结合北汇在自动化测试方面的丰富经验&#xff0c;简单介绍一下实施自动…

List当中的stream流使用

Java中的Stream流是一种用于处理集合数据的抽象概念。它可以让我们以一种类似于SQL查询的方式对集合进行操作&#xff0c;例如过滤、映射、排序、聚合等。Stream流可以让我们以更简洁的方式实现集合的处理和转换&#xff0c;同时也提供了更高效的并行处理能力。 对于List集合&…

密码管理器:方便与安全并存的选择

日常生活中使用各种应用程序时&#xff0c;密码安全问题是我们难以避免的。如果您也像我一样&#xff0c;经常忘记密码或混淆密码&#xff0c;就需要一款优秀的密码管理工具来帮助您解决这一问题。今天&#xff0c;我就来介绍一下密码管理器的功能和优势&#xff0c;看看它是如…

一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程

MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档&#xff0c;数据结…

【问题解决】Buildroot文件系统dropbear 上位机scp命令Permission denied, please try again.

前提&#xff1a; 上位机&#xff1a;Ubuntu虚拟机与开发板同局域网开发板&#xff1a;Buildroot文件系统&#xff0c;开启了dropbear&#xff0c;已经联网与虚拟机同局域网 liefyuanubuntu:~/tcp-test/tcp-c-client$ scp tcp_client root192.168.8.199:/opt root192.168.8.1…