日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenEuler树莓派基础实验 20212802范辰宇

發(fā)布時(shí)間:2024/1/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenEuler树莓派基础实验 20212802范辰宇 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

3.2 實(shí)驗(yàn) 3-2:匯編語言練習(xí)——查找最大數(shù)
1.實(shí)驗(yàn)?zāi)康?br /> 通過本實(shí)驗(yàn)了解和熟悉 ARM64 匯編語言。
2.實(shí)驗(yàn)要求
使用 ARM64 匯編語言來實(shí)現(xiàn)如下功能:在給定的一組數(shù)中查找最大數(shù)。程序可使GCC(Aarch64 版本)工具來編譯,并且可在樹莓派 Linux 系統(tǒng)或者 QEMU + ARM64 實(shí)驗(yàn)平臺上運(yùn)行。

.section .data .align 3 my_data:.quad 1.quad 2.quad 5.quad 8.quad 10.quad 12my_data_count:.quad 6.align 3 print_data:.string "big data: %d\n".section .text .globl main main:stp x29, x30, [sp, -16]!ldr x0, =my_dataldr x1, my_data_countadd x4, x0, #40mov x3, xzr 1:ldr x2, [x0], #8cmp x2, x3csel x3, x2, x3, hicmp x0, x4b.ls 1bldr x0, =print_datamov x1, x3bl printfldp x29, x30, [sp], 16ret

運(yùn)行結(jié)果:

調(diào)試信息:

在main函數(shù)里設(shè)置一個(gè)斷點(diǎn),并輸入“r”命令運(yùn)行test程序,然后就可以單步調(diào)試test程序了。輸入“s”進(jìn)行單步調(diào)試:

?可以使用“info reg”命令來查看寄存器的值。例如查看x0寄存器的值。

3.3 實(shí)驗(yàn) 3-3:匯編語言練習(xí)——通過 C 語言調(diào)用匯編函數(shù)
1.實(shí)驗(yàn)?zāi)康?br /> 通過本實(shí)驗(yàn)了解和熟悉 C 語言中如何調(diào)用匯編函數(shù)。
2. 實(shí)驗(yàn)要求
使用匯編語言實(shí)現(xiàn)一個(gè)匯編函數(shù),用于比較兩個(gè)數(shù)的大小并返回最大值,然后用C 語言代碼調(diào)用這個(gè)匯編函數(shù)。程序可使用 GCC(Aarch64 版本)工具來編譯,并且可在樹莓派 Linux 系統(tǒng)或者 QEMU + ARM64 實(shí)驗(yàn)平臺上運(yùn)行。

//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\n", val); }

?運(yùn)行結(jié)果:

?3.4 實(shí)驗(yàn) 3-4:匯編語言練習(xí)——通過匯編語言調(diào)用 C 函數(shù)
1.實(shí)驗(yàn)?zāi)康?br /> 通過本實(shí)驗(yàn)了解和熟悉匯編語言中如何調(diào)用 C 函數(shù)。
2.實(shí)驗(yàn)要求
使用 C 語言實(shí)現(xiàn)一個(gè)函數(shù),用于比較兩個(gè)數(shù)的大小并返回最大值,然后用匯編代碼調(diào)用這個(gè) C 函數(shù)。程序可使用 GCC(Aarch64 版本)來編譯,并且可在樹莓派 Linux系統(tǒng)或者 QEMU + ARM64 實(shí)驗(yàn)平臺上運(yùn)行。

//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\n" .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

運(yùn)行結(jié)果:

?3.5 實(shí)驗(yàn) 3-5:匯編語言練習(xí)——GCC 內(nèi)聯(lián)匯編
1.實(shí)驗(yàn)?zāi)康?br /> 通過本實(shí)驗(yàn)了解和熟悉 GCC 內(nèi)聯(lián)匯編的使用。
2.實(shí)驗(yàn)要求
使用 GCC 內(nèi)聯(lián)匯編實(shí)現(xiàn)一個(gè)函數(shù),用于比較兩個(gè)數(shù)的大小并返回最大值,然后用 C 語言代碼調(diào)用這個(gè)函數(shù)。程序可使用 GCC(Aarch64 版本)工具來編譯,并且可在樹莓派 Linux 系統(tǒng)或者 QEMU + ARM64 實(shí)驗(yàn)平臺上運(yùn)行。

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

運(yùn)行結(jié)果:

?

總結(jié)

以上是生活随笔為你收集整理的OpenEuler树莓派基础实验 20212802范辰宇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。