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

    树莓派安装openEuler

    博客链接

    树莓派安装openssl

    娄老师博客

    修改环境变量

    在/etc/profile中加入

    export PATH="/root/dopenssl/bin/:$PATH"
    export LD_LIBRARY_PATH="/root/dopenssl/lib:$LD_LIBRARY_PATH"
    
    

    安装后运行截图

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

    .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
            //adrp x0, print_data
            //add x0, x0, :lo12:print_data
            mov x1, x3
    
            bl printf
    
            ldp  x29, x30, [sp], 16
            ret
    
    

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

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

    compare.S

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

    3-4汇编调用C函数

    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
    
    

    compare.c

    int compare_data(int a, int b)
    {
            return (a >= b) ? a : b;
    }
    
    

    3-5GCC内联汇编

    #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);
    }
    
    

    3-6一个裸机程序

    由于裸机没有操作系统,需自行编写链接脚本

    SECTIONS
    {
    	.text.boot : { *(.text.boot) }
    	.text : { *(.text) }
    	.rodata : { *(.rodata) }
    	.data : { *(.data) }
    	. = ALIGN(0x8);
    	bss_begin = .;
    	.bss : { *(.bss*) } 
    	bss_end = .;
    }
    
    

    在第1行中,SECTIONS 是 LS (Linker Script)语法中的关键命令,用来描述输出文件的内存布局。
    SECTIONS命令告诉链接文件如何把输入文件的段映射到输出文件的各个段,如何将输入段合为输出段,以及如何把输出段放入程序地址空间(VMA)和进程地址空间(LMA)。
    SECTIONS命令格式如下。

    SECTIONS
    {
    sections-command
    sections-command
    ...
    }
    

    sections-command有4种。

    • ENTRY命令。
    • 符号赋值语句。
    • 输出段的描述(output section description)。
    • 段的叠加描述(overlay description)。

    在第3行中,“.”非常关键,它代表位置计数(Location Counter , LC),这里把.text段的链接地址被设置为0x0,这里链接地址指的是装载地址(load address)。

    在第4行中,输出文件的.text.boot段内容由所有输入文件(其中的“”可理解为所有的.o文件,也就是二进制文件)的.text.boot段组成。
    ”可理解为所有的.o

    在第5行中,输出文件的.text段内容由所有输入文件(其中的“*”可理解为所有的.o文件,也就是二进制文件)的.text段组成。

    在第6行中,输出文件的.rodata段由所有输入文件的.rodata段组成。

    在第7行中,输出文件的.data段由所有输入文件的.data段组成在第8行中,设置为按8个字节对齐。

    在第9~11行中,定义了一个.bss 段。

    能力有限,先到此为止

  • 相关阅读:
    sqlserver更新数据表结构增加新字段时,和它相关联的视图出现错列现象
    form表单中的Input使用disabled不能提交的解决方法
    MVC4升级到MVC5的问题,安全透明方法“WebMatrix.WebData.PreApplicationStartCode.Start()”尝试访问安全关键方法“System.Web.WebPages.Razor.WebPageRazorHost.AddGlobalImport(System.String)”失败
    快速建立一个手机网站
    NoSQLMongoDB选择
    基于HTML5手机技术方案(如Phonegap)的调试方案
    最后的绝唱Symbian 最新的IDE开发环境搭建(Updated on 20110307)
    由NodeJS浅谈无敌的前端开发工程师
    物联网(1)手机NFC识别方案平台
    大话网站从Hello World到高并发网站
  • 原文地址:https://www.cnblogs.com/cfqlovem-521/p/15463806.html
Copyright © 2011-2022 走看看