OpenEuler树莓派基础实验

发布时间:2022-07-01 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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: %dn"

.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

运行结果:

OpenEuler树莓派基础实验

调试信息:

OpenEuler树莓派基础实验

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: %dn", val);
}

运行结果:

OpenEuler树莓派基础实验

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: %dn"
.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

运行结果:

OpenEuler树莓派基础实验

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, %2n"
 "csel %0, %1, %2, hin"
 : "+r" (val)
 : "r" (a), "r" (b)
 : "memory");
return val;
} 
int main()
{ 
int val;
val = compare_data(5, 6);
printf("big data: %dn", val);
val = compare_data(6, 4);
printf("big data: %dn", val);
}

运行结果:

OpenEuler树莓派基础实验

脚本宝典总结

以上是脚本宝典为你收集整理的OpenEuler树莓派基础实验全部内容,希望文章能够帮你解决OpenEuler树莓派基础实验所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。