中断处理函数 asm

_divide_error:
pushl $IntFuncName                                               # 首先把将要调用的函数地址入栈。
no_error_code:                                                         # 这里是无出错号处理的入口处,公用代码
xchgl %eax,(%esp)                             # 交换内容,eax 被交换入栈。
pushl %ebx
pushl %ecx
pushl %edx
pushl %edi
pushl %esi
pushl %ebp
push %ds                                         # !!16 位的段寄存器入栈后也要占用4 个字节。
push %es
push %fs
pushl $0                                            # 将出错码入栈。默认的给它留空
lea 44(%esp),%edx                         # 取原调用返回地址处堆栈指针位置,并压入堆栈。
pushl %edx
movl $0x10,%edx                             # 内核代码数据段选择符。
mov %dx,%ds
mov %dx,%es
mov %dx,%fs
call *%eax                                         # 调用C 函数do_divide_error()。
addl $8,%esp                                   # 让堆栈指针重新指向寄存器fs  去掉pushl $0   pushl %edx
pop %fs
pop %es
pop %ds
popl %ebp
popl %esi
popl %edi
popl %edx
popl %ecx
popl %ebx
popl %eax                                            # 弹出原来eax 中的内容。
iret 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值