我正试图更深入地理解.因此,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