zoukankan      html  css  js  c++  java
  • 课堂测试一

    完成家庭作业4.47,4.48,4.49
    相应代码反汇编成X86-64汇编
    把上述X86-64汇编翻译成Y86汇编,并给出相应机器码

    4.47:

    书写一个C版本的冒泡排序法,用指针引用数组元素,而不是数组索引。

    书写并测试这个函数和测试代码组成的Y86-64程序。

    #include<stdio.h>
    void bubble_a(int *data, int count){
        int i,next;
        for(next = 1; next < count; next++){
            for(i = next - 1; i >= 0; i--)
                if(*(data + i + 1) < *(data + i)){
                    int t = *(data + i + 1);
                    *(data + i + 1) = *(data + i);
                    *(data + i) = t;
                }
        }
    }
    void main()
    {
        int data[5]={3,90,1,6,0};
        int i;
        bubble_a(data,5);
        for(i=0;i<5;i++)
        {
            printf("%2d
    ",data[i]);
        }
    }
    

    0x0000:                        | Disassembly of section .text:
                                   | 
    0x0000:                        | 0000000000000000 <bubble_a>:
    0x0000:                        |    0:  83 fe 01                cmp    $0x1,%esi
    0x0000:                        |    3:  7e 41                   jle    46 <bubble_a+0x46>
    0x0000:                        |    5:  44 8d 4e fe             lea    -0x2(%rsi),%r9d
    0x0000:                        |    9:  4c 8d 47 04             lea    0x4(%rdi),%r8
    0x0000:                        |    d:  31 f6                   xor    %esi,%esi
    0x0000:                        |    f:  49 83 c1 01             add    $0x1,%r9
    0x0000:                        |   13:  0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
    0x0000:                        |   18:  85 f6                   test   %esi,%esi
    0x0000:                        |   1a:  4c 89 c0                mov    %r8,%rax
    0x0000:                        |   1d:  78 18                   js     37 <bubble_a+0x37>
    0x0000:                        |   1f:  90                      nop
    0x0000:                        |   20:  8b 10                   mov    (%rax),%edx
    0x0000:                        |   22:  8b 48 fc                mov    -0x4(%rax),%ecx
    0x0000:                        |   25:  39 ca                   cmp    %ecx,%edx
    0x0000:                        |   27:  7d 05                   jge    2e <bubble_a+0x2e>
    0x0000:                        |   29:  89 08                   mov    %ecx,(%rax)
    0x0000:                        |   2b:  89 50 fc                mov    %edx,-0x4(%rax)
    0x0000:                        |   2e:  48 83 e8 04             sub    $0x4,%rax
    0x0000:                        |   32:  48 39 f8                cmp    %rdi,%rax
    0x0000:                        |   35:  75 e9                   jne    20 <bubble_a+0x20>
    0x0000:                        |   37:  48 83 c6 01             add    $0x1,%rsi
    0x0000:                        |   3b:  49 83 c0 04             add    $0x4,%r8
    0x0000:                        |   3f:  4c 39 ce                cmp    %r9,%rsi
    0x0000:                        |   42:  75 d4                   jne    18 <bubble_a+0x18>
                                   | 
                                   | 
    0x0000:                        | Disassembly of section .text.startup:
                                   | 
    0x0000:                        | 0000000000000000 <main>:
    0x0000:                        |    0:  55                      push   %rbp
    0x0000:                        |    1:  53                      push   %rbx
                                   | 
    0x0000:                        |    7:  48 83 ec 28             sub    $0x28,%rsp
    0x0000:                        |    b:  48 8d 6c 24 14          lea    0x14(%rsp),%rbp
    0x0000:                        |   10:  48 89 e7                mov    %rsp,%rdi
    0x0000:                        |   13:  48 89 e3                mov    %rsp,%rbx
    0x0000:                        |   16:  64 48 8b 04 25 28 00    mov    %fs:0x28,%rax
    0x0000:                        |   1d:  00 00 
    0x0000:                        |   1f:  48 89 44 24 18          mov    %rax,0x18(%rsp)
    0x0000:                        |   24:  31 c0                   xor    %eax,%eax
                                   | 
    0x0000:                        |   34:  00 
                                   | 
    0x0000:                        |   3c:  00 
                                   |  
    0x0000:                        |   44:  00 
                                   |   
    0x0000:                        |   60:  48 83 c3 04             add    $0x4,%rbx
                                   |  
    0x0000:                        |   69:  48 39 eb                cmp    %rbp,%rbx
    0x0000:                        |   6c:  75 e4                   jne    52 <main+0x52>
    0x0000:                        |   4c:  00 
                                   |  
    0x0000:                        |   52:  8b 13                   mov    (%rbx),%edx
    0x0000:                        |   54:  31 c0                   xor    %eax,%eax
                                   |  
    0x0000:                        |   6e:  48 8b 44 24 18          mov    0x18(%rsp),%rax
    0x0000:                        |   73:  64 48 33 04 25 28 00    xor    %fs:0x28,%rax
    0x0000:                        |   7a:  00 00 
    0x0000:                        |   7c:  75 07                   jne    85 <main+0x85>
    0x0000:                        |   7e:  48 83 c4 28             add    $0x28,%rsp
    

    4.48:实现冒泡排序,要求不使用跳转,且最多使用3次条件传送。

    0x0000:                        | Disassembly of section .text:
                                   | 
    0x0000:                        | 0000000000000000 <bubble_a>:
    0x0000:                        |    0:  83 fe 01                cmp    $0x1,%esi
    0x0000:                        |    3:  7e 48                   jle    4d <bubble_a+0x4d>
    0x0000:                        |    5:  44 8d 56 fe             lea    -0x2(%rsi),%r10d
    0x0000:                        |    9:  4c 8d 47 fc             lea    -0x4(%rdi),%r8
    0x0000:                        |    d:  45 31 c9                xor    %r9d,%r9d
    0x0000:                        |   10:  49 83 c2 01             add    $0x1,%r10
    0x0000:                        |   14:  0f 1f 40 00             nopl   0x0(%rax)
    0x0000:                        |   18:  45 85 c9                test   %r9d,%r9d
    0x0000:                        |   1b:  48 89 f8                mov    %rdi,%rax
    0x0000:                        |   1e:  78 1e                   js     3e <bubble_a+0x3e>
    0x0000:                        |   20:  8b 10                   mov    (%rax),%edx
    0x0000:                        |   22:  8b 48 04                mov    0x4(%rax),%ecx
    0x0000:                        |   25:  39 ca                   cmp    %ecx,%edx
    0x0000:                        |   27:  89 ce                   mov    %ecx,%esi
    0x0000:                        |   29:  0f 4e f2                cmovle %edx,%esi
    0x0000:                        |   2c:  0f 4c d1                cmovl  %ecx,%edx
    0x0000:                        |   2f:  48 83 e8 04             sub    $0x4,%rax
    0x0000:                        |   33:  89 70 04                mov    %esi,0x4(%rax)
    0x0000:                        |   36:  89 50 08                mov    %edx,0x8(%rax)
    0x0000:                        |   39:  4c 39 c0                cmp    %r8,%rax
    0x0000:                        |   3c:  75 e2                   jne    20 <bubble_a+0x20>
    0x0000:                        |   3e:  49 83 c1 01             add    $0x1,%r9
    0x0000:                        |   42:  48 83 c7 04             add    $0x4,%rdi
    0x0000:                        |   46:  4d 39 d1                cmp    %r10,%r9
    0x0000:                        |   49:  75 cd                   jne    18 <bubble_a+0x18>
                                   | 
    0x0000:                        | Disassembly of section .text.startup:
                                   | 
    0x0000:                        | 0000000000000000 <main>:
    0x0000:                        |    0:  55                      push   %rbp
    0x0000:                        |    1:  53                      push   %rbx
                                   | 
    0x0000:                        |    7:  48 83 ec 28             sub    $0x28,%rsp
    0x0000:                        |    b:  48 8d 6c 24 14          lea    0x14(%rsp),%rbp
    0x0000:                        |   10:  48 89 e7                mov    %rsp,%rdi
    0x0000:                        |   13:  48 89 e3                mov    %rsp,%rbx
    0x0000:                        |   16:  64 48 8b 04 25 28 00    mov    %fs:0x28,%rax
    0x0000:                        |   1d:  00 00 
    0x0000:                        |   1f:  48 89 44 24 18          mov    %rax,0x18(%rsp)
    0x0000:                        |   24:  31 c0                   xor    %eax,%eax
                                   | 
    0x0000:                        |   34:  00 
    0x0000:                        |   35:
    0x0000:                        |   3c:  00 
    0x0000:                        |   3d:
    0x0000:                        |   44:  00 
    0x0000:                        |   45:  
    0x0000:                        |   4c:  00 
                                   | 
    0x0000:                        |   52:  8b 13                   mov    (%rbx),%edx
    0x0000:                        |   54:  31 c0                   xor    %eax,%eax
                                   | 
    0x0000:                        |   60:  48 83 c3 04             add    $0x4,%rbx
                                   | 
    0x0000:                        |   69:  48 39 eb                cmp    %rbp,%rbx
    0x0000:                        |   6c:  75 e4                   jne    52 <main+0x52>
    0x0000:                        |   6e:  48 8b 44 24 18          mov    0x18(%rsp),%rax
    0x0000:                        |   73:  64 48 33 04 25 28 00    xor    %fs:0x28,%rax
    0x0000:                        |   7a:  00 00 
    0x0000:                        |   7c:  75 07                   jne    85 <main+0x85>
    0x0000:                        |   7e:  48 83 c4 28             add    $0x28,%rsp
    0x0000:                        |   82:  5b                      pop    %rbx
    0x0000:                        |   83:  5d                      pop    %rbp
    

    4.49:实现冒泡排序,要求不使用跳转,且最多使用1次条件传送。

  • 相关阅读:
    Hibernate 3入門
    如何调整液晶显示器保护你的视力
    WEB前端开发经验总结实战篇
    【JS】引用类型之Array
    Oracle的DBA管理常用sql
    使用cos组建上传文件
    前台js将json转换成json对象的方法
    关于父页面访问iframe中元素和js的那点事
    数据库中IN和EXISTS的区别
    关于google浏览器有时莫名自动提交表单的问题
  • 原文地址:https://www.cnblogs.com/nhx19970709/p/7822710.html
Copyright © 2011-2022 走看看