lesson04-设计初始化bss段、读写寄存器值的汇编函数

在内核启动时需要将bss段的所有数据清0,这里就需要memzero函数。

.global memzero    ;全局可见
memzero:
    str xzr, [x0], #8  
    subs x1, x1, #8
    b.gt memzero
    ret

内核启动时需要经常读写soc内部寄存器的值,这里就需要用到对应的函数put32和get32。

.global put32
put32:
    str w1,[x0]     ;storage register 存储寄存器中的数据到内存中 x
    ret             ;x0是第一个参数 w1是第二个参数的低32位

.global get32
get32:
    ldr w0,[x0]     ;load register 将内存中的数据加载到内存中
    ret             ;x0为第一个参数 w0为返回的参数

.global delay
delay:
    sub x0, x0, #1  ;延迟函数
    bne delay
    ret

声明汇编函数的头文件,指定输入和输出的参数。

#ifndef _BOOT_H
#define _BOOT_H

//汇编函数的头文件
extern void delay(unsigned long);
extern void put32(unsigned long, unsigned int);
extern unsigned int get32(unsigned long);

#endif
posted @ 2024-09-13 22:22  蔚蓝蔷薇  阅读(5)  评论(0编辑  收藏  举报