zoukankan      html  css  js  c++  java
  • 树莓派实验指导第三章实验

    树莓派实验指导第三章实验


    实验 3-2:汇编语言练习——查找最大数

    使用 ARM64 汇编语言来实现如下功能:在给定的一组数中查找最大数。程序可使用
    GCC(Aarch64 版本)工具来编译,并且可在树莓派 Linux 系统或者 QEMU + ARM64 实验平台上运行。

    .section .data
     .align 3
     my_data:
     .quad 1
    
     .quad 2
     .quad 5
     .quad 8
     .quad 10
     .quad 12
    
     my_data_count:
     .quad 6
    
     .align 3 
     print_data:
     .string "big data: %d
    "
    
     .section .text
     .globl main
     main:
     stp x29, x30, [sp, -16]!
    
     ldr x0, =my_data
     ldr x1, my_data_count
    
     add x4, x0, #40
    
     mov x3, xzr
     1:
    ldr x2, [x0], #8
    cmp x2, x3
    csel x3, x2, x3, hi
    
    cmp x0, x4
    b.ls 1b
    
    ldr x0, =print_data
    mov x1, x3
    
    bl printf
    
    ldp x29, x30, [sp], 16
    ret
    

    接下来我们编译代码:gcc test3.2.S -o test3.2 -g --static

    随后我们调试代码:gdb test3.2


    实验 3-3:汇编语言练习——通过 C 语言调用汇编函数

    使用汇编语言实现一个汇编函数,用于比较两个数的大小并返回最大值,然后用
    C 语言代码调用这个汇编函数。程序可使用 GCC(Aarch64 版本)工具来编译,并且可在树莓派 Linux 系统或者 QEMU + ARM64 实验平台上运行。

    compare.S

    .section .text
    .globl compare_data
    compare_data:
    cmp x0, x1
    csel x0, x0, x1, hi
    ret
    

    main.c

    #include <stdio.h>
    extern int compare_data(int a, int b);
    int main()
    { 
      int val;
      val = compare_data(5, 6);
      printf("big data: %d
    ", val);
    } 
    

    我们编译代码:gcc 3.3main.c 3.3compare.S -o 3.3main

    编译执行:


    实验 3-4:汇编语言练习——通过汇编语言调用 C 函数

    使用 C 语言实现一个函数,用于比较两个数的大小并返回最大值,然后用汇编代
    码调用这个 C 函数。程序可使用 GCC(Aarch64 版本)来编译,并且可在树莓派 Linux系统或者 QEMU + ARM64 实验平台上运行。

    int compare_data(int a, int b)
    { 
      return (a >= b) ? a : b;
    } 
    
    .section .data
    .align 3
    print_data:
    .string "big data: %d
    "
    .section .text
    .globl main
    main:
      stp x29, x30, [sp, -16]!
      mov x0, #6
      mov x1, #5
      bl compare_data
      mov x1, x0
      ldr x0, =print_data
      bl printf
      ldp x29, x30, [sp], 16
      ret
    

    编译代码:gcc 3.4compare.c 3.4main.S -o 3.4mian

    执行代码:


    实验 3-5:汇编语言练习——GCC 内联汇编

    使用 GCC 内联汇编实现一个函数,用于比较两个数的大小并返回最大值,然后
    用 C 语言代码调用这个函数。程序可使用 GCC(Aarch64 版本)工具来编译,并且可在树莓派 Linux 系统或者 QEMU + ARM64 实验平台上运行。

    #include <stdio.h>
    static int compare_data(int a, int b)
    { 
      int val;
      asm volatile (
       "cmp %1, %2
    "
       "csel %0, %1, %2, hi
    "
       : "+r" (val)
       : "r" (a), "r" (b)
       : "memory");
    return val;
    } 
    int main()
    { 
      int val;
      val = compare_data(5, 6);
      printf("big data: %d
    ", val);
      val = compare_data(6, 4);
      printf("big data: %d
    ", val);
    } 
    
    

    编译执行:

  • 相关阅读:
    javascript基础
    杂谈
    六大设计原则
    MVC的理解
    不错的资源哦
    平时你从哪里获取前端知识?
    网站背景平铺
    js 获取节点
    自适应后的页面用户点击后会放大
    innerHTML的运用
  • 原文地址:https://www.cnblogs.com/wpy-1049363419/p/15483603.html
Copyright © 2011-2022 走看看