中断,异常,系统调用,进程切换时的堆栈变化和寄存器保存

本文详细介绍了CPU在处理中断、异常和系统调用时的堆栈变化和寄存器保存过程。在这些情况下,CPU会自动压入特定的寄存器,如ss, esp, eflag, cs, eip和error code,并且程序会额外压入es, ds, ebp等。异常如divide_error会垫上0作为错误码,而中断处理则不同。文章还提及了进程切换时的相关操作,但内容未完全展开。" 103988905,7682185,程序员如何运用设计思维解决需求问题,"['设计思维', '项目管理', '需求分析', '软件开发', '用户体验']
摘要由CSDN通过智能技术生成
 1. 中断,异常,系统调用相同:
 
  CPU自动压入:

  ss            运行级别提升时需切换堆栈,因此多压入用户态的栈段ss,
  esp           运行级别提升时需切换堆栈,因此多压入用户态的堆栈指针esp,
  eflag
  cs
  eip
  error code

  程序压入部分压入如下寄存器:

  es
  ds
  ebp
  edi
  esi
  edx
  ecx
  ebx

  但是压入的方法各不相同,见entry.S。#define SAVE_ALL,和pt_reg的关系?

  a. 异常:
ENTRY(divide_error)
    pushl$0            #no error code  Wood: 当没有硬件错误码时,在栈中垫上一个空值。
    pushl $do_divide_error    # 压入返回地址
    ALIGN
error_code:
    pushl %ds
    pushl %eax
    xorl %eax, %eax
    pushl %ebp
    pushl %edi
    pushl %esi
    pushl %edx
    decl %eax            # eax = -1
    pushl %ecx
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值