zoukankan      html  css  js  c++  java
  • OpenEuler树莓派基础实验

    OpenEuler树莓派基础实验

    3.2 实验 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
    

    运行结果:

    调试信息:

    3.3 实验 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 实验 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 实验 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);
    }
    

    运行结果:

  • 相关阅读:
    第31-35课
    Cisco学习笔记
    ScreenOS地址转换
    Bootstrap3组件--2
    Bootstrap3组件--1
    Bootstrap3全局CSS样式
    MySQL数据库中字段含逗号的数据,分隔成多条数据
    EF Core 关联数据
    ABP 创建 webapi
    Abp ajax The required antiforgery request token was not provided in either form field
  • 原文地址:https://www.cnblogs.com/1301cn/p/15484559.html
Copyright © 2011-2022 走看看