zoukankan      html  css  js  c++  java
  • 树莓派实验指导(第三章实验华为云)

    本次实验都在华为云服务器中进行

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

    1.实验目的

    通过本实验了解和熟悉 ARM64 汇编语言。

    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
    

    运行结果

    调试内容

    在 main 函数里设置一个断点,用命令s逐步运行
    使用info reg命令来查看寄存器的值。例如查看 x0 寄存器的值。

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

    1.实验目的

    通过本实验了解和熟悉 C 语言中如何调用汇编函数。

    2.实验要求

    使用汇编语言实现一个汇编函数,用于比较两个数的大小并返回最大值,然后用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);
    }
    

    运行结果

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

    1.实验目的

    通过本实验了解和熟悉汇编语言中如何调用 C 函数。

    2.实验要求

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

    //compare.c 文件如下。
    int compare_data(int a, int b)
    { 
    return (a >= b) ? a : b;
    } 
    //main.S 文件如下。
    .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
    

    运行结果

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

    1.实验目的

    通过本实验了解和熟悉 GCC 内联汇编的使用。

    2.实验要求

    使用 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);
    }
    

    实验结果

  • 相关阅读:
    旋转数组的最小数字(JAVA)
    两个队列实现栈&两个栈实现队列(JAVA)
    重建二叉树(JAVA)
    二维数组的查找(JAVA)
    Java垃圾回收机制概述
    前端开发环境
    Java语法糖 : try-with-resources
    立个Flag (20180617-20181231)
    关于标签的整理
    Java反射机制
  • 原文地址:https://www.cnblogs.com/20191211yss/p/15490934.html
Copyright © 2011-2022 走看看