了解os bootloading - assembly

时间:2013-04-03 14:39:09

标签: linux assembly operating-system

我试图更深入地理解。因此,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);这个函数是用这个参数调用汇编函数的吗?

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

1 个答案:

答案 0 :(得分:3)

__start是一个标签。

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

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

Assembly Programmer's Guide

中的更多信息