【问题标题】:Understanding os bootloading - assembly了解操作系统引导加载 - 程序集
【发布时间】:2013-03-25 07:11:34
【问题描述】:

我正在尝试更深入地了解操作系统。所以,linux引导必须处理一个汇编文件。我知道mov, push, pop,,但在这里我很迷茫:

.globl  __start
    .ent    __start
__start:
    br  $29,2f
2:  ldgp    $29,0($29)
    jsr $26,start_kernel
    call_pal PAL_halt
    .end __start

switch_to_osf_pal:
    subq    $30,128,$30
...

如果我说__start 是一个标签,我是否正确?那么一旦在其他代码和平中调用它就会被调用吗?我试图用谷歌搜索以了解ldgpcall_pal 符号,但我一无所获。最后我在c文件中发现switch_to_osf_pal是这样调用的switch_to_osf_pal(2, pcb_va, pcb_pa, VPTB);这个函数取这个参数是调用汇编函数吗?

抱歉,如果有太多问题,但我没有找到任何明确的文档

【问题讨论】:

  • 这是 Alpha 架构的代码吗?如果您想探索 linux 引导加载程序,如果您探索更常见的架构,您可能会更容易找到信息
  • @msam 我认为它确实是一个 Alpha 架构。我应该探索什么样的架构?
  • x86 和 arm 浮现在脑海中......

标签: linux assembly operating-system


【解决方案1】:

__start 是一个标签。

ldgp 表示在Alpha assembly加载全局指针

call_pal表示调用特权架构库。它是无条件跳转到异常处理程序。

更多信息在Assembly Programmer's Guide

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2019-07-24
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    相关资源
    最近更新 更多