asm.s函数
asm.s包含着CPU探测到故障异常的底层代码程序,与traps.c关系密切,调用traps.c的程序打印出错信息,并退出。
中断调用包括:没有出错号和有出错号两种情况
其区别如下图
无出错号包括:除0错误,debug调式中断,溢出出错中断等
有错误号包括:段不存在,堆栈段错误等
无错误号的代码:
核心代码:xchg1 %eax,(%esp) 交换ax和sp
push $0 0作为错误号压栈
lea 44(%esp), %edx 把中断的地方压栈
call *%eax 调用中断打印函数
add1 $8 %esp 函数的参数出栈
全代码如下:
有错误号情况:
核心代码:
把错误号和函数分别交换保存在ax和bx中
错误号和函数入栈
调用函数,并把参数出栈
全代码如下:
中断包含: