加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux – 了解os bootloading – assembly

发布时间:2020-12-24 13:54:32 所属栏目:Linux 来源:网络整理
导读:我正试图更深入地理解.因此,linux启动必须处理一个程序集文件.我知道mov,push,pop,但在这里我很遗憾: .globl __start .ent __start__start: br $29,2f2: ldgp $29,0($29) jsr $26,start_kernel call_pal PAL_halt .end __startswitch_to_osf_pal: subq $3

我正试图更深入地理解.因此,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是一个标签,我是否正确?一旦它被另一个代码和平调用,它会被调用吗?我试图谷歌周围了解ldgp,或call_pal符号,但我什么都没发现.最后,我在c文件中发现switch_to_osf_pal以这种方式调用switch_to_osf_pal(2,pcb_va,pcb_pa,VPTB);这个函数用这个函数调用汇编函数吗?

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

解决方法

__start是一个标签.

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

call_palmeans调用特权架构库.它是一个无条件跳转到异常处理程序.

更多信息,请参见Assembly Programmer’s Guide

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读