• 课堂测试一


    完成家庭作业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次条件传送。

  • 相关阅读:
    UVA 10617 Again Palindrome
    UVA 10154 Weights and Measures
    UVA 10201 Adventures in Moving Part IV
    UVA 10313 Pay the Price
    UVA 10271 Chopsticks
    Restore DB後設置指引 for maximo
    每行SQL語句加go換行
    种服务器角色所拥有的权限
    Framework X support IPV6?
    模擬DeadLock
  • 原文地址:https://www.cnblogs.com/nhx19970709/p/7822710.html
Copyright © 2020-2023  润新知