Skip to content

lab1_src

head.S

    .extern start_kernel
    .section .text.entry
    .globl _start
_start:

    #error "Unimplemented"
    # ------------------
<div markdown="1" style="margin-top: -30px; font-size: 0.75em; opacity: 0.7;">
:material-circle-edit-outline: 约 395 个字 :material-clock-time-two-outline: 预计阅读时间 1 分钟
</div>
    # - your code here -
    # ------------------


    .section .bss.stack
    .globl boot_stack
boot_stack:
    .space 4096 # <-- change to your stack size

    .globl boot_stack_top
boot_stack_top:

.extern start_kernel:

  • 导入了一个外部的函数

.section .text.entry:

  • 指定接下来的代码属于 .text.entry 段。这个段通常用于存放程序的入口点和相关的代码。

(Segment)是一种将程序的各个部分划分到不同内存区域的机制。这种划分是为了更好地管理内存,提高程序的效率和安全性。

常见的段包括:

  • 代码段(.text): 存放程序的可执行指令。
  • 数据段(.data): 存放程序中已初始化的全局变量和静态变量。
  • BSS段(.bss): 存放程序中未初始化的全局变量和静态变量。
  • 堆(heap): 动态分配的内存区域,用于程序运行时申请的内存。
  • 栈(stack): 用于函数调用、局部变量等临时数据的存储。

.globl _start:

  • _start 声明为一个全局符号。这是链接器和系统其他部分用来找到程序入口点的符号。

.section .bss.stack:

  • 指定接下来的代码属于 .bss.stack 段。这个段用于存放未初始化的数据,在这里就是栈。

.globl boot_stack:

  • boot_stack 声明为一个全局符号,表示栈的起始位置。

boot_stack::

  • 定义了 boot_stack 标签,标志着栈的起始位置。

.space XYZ:

  • 为栈预留了 XYZ 字节的空间。XYZ 的值应该根据内核的实际需求来确定。

.globl boot_stack_top:

  • boot_stack_top 声明为一个全局符号,表示栈顶的位置。

代码功能

这段代码主要完成以下工作:

  • 定义了内核的入口点 _start
  • 为内核的栈预留了空间。
  • 为后续的内核初始化做准备。