learningOS开源操作系统社区
  • 首页
  • 训练营
  • 明星学员
  • 共建单位
  • 项目实习
  • 问答论坛
登录
    Copyright © 2024 opencamp.ai All rights reserved.
    关于lab5最后,创建好用户线程返回用户态后在initcode.s里的一些疑问
    匿名2023/07/31 19:54:21提问
      logisticsstudentunanswered
    575

    想请教下大家,这段代码的作用是什么啊。在之前load_icode里设置好用户栈之后(把argc和argc依次装入用户栈),然后把tf的esp设置为相应的用户stacktop,按理说系统调用返回的时候用户栈的结构已经是维护好了,可以进入umain运行。

    但为什么还要有这一段代码呢,在piazza上之前看到相关的回答,但还是不太清楚其中的机制

    https://piazza.com/class/i5j09fnsl7k5x0

    以下是代码

    .globl _start
    _start:
        # set ebp for backtrace
        movl $0x0, %ebp
    
    # load argc and argv
    movl (%esp), %ebx
    lea 0x4(%esp), %ecx
    
    
    # move down the esp register
    # since it may cause page fault in backtrace
    subl $0x20, %esp
    
    # save argc and argv on stack
    pushl %ecx
    pushl %ebx
    
    # call user-program function
    call umain
    

    1: jmp 1b

    回答(0)
    即可发布评论
      推荐问答
        Simple Empty
        暂无数据