📄 asm.s
字号:
.globl divide_error , debug , nmi , int3 , overflow , bounds , invalid_op.globl device_not_available , double_fault , coprocessor_segment_overrun.globl invalid_TSS , segment_not_present , stack_segment.globl general_protection , page_fault , reserved , coprocessor_error.align 4
_error_code:
///////////////////////////////////////////////////
cld
xchgl %eax,4(%esp)
xchgl %ebx,(%esp)
pushl %ecx
pushl %edx
pushl %esi
pushl %edi
pushl %ebp
push %ds
push %es
push %fs
push %gs
pushl %eax # "error code"
lea 48(%esp),%eax
pushl %eax
movl $0x10,%eax
mov %ax,%ds
mov %ax,%es
mov %ax,%fs
call *%ebx
addl $8,%esp
pop %gs
pop %fs
pop %es
pop %ds
popl %ebp
popl %edi
popl %esi
popl %edx
popl %ecx
popl %ebx
popl %eax
/////////////////////////////////////////////////////
iret
divide_error:
pushl $0 pushl $do_divide_error
jmp _error_codedebug: pushl $0
pushl $do_debug jmp _error_codenmi:
pushl $0 pushl $do_nmi jmp _error_codeint3:
pushl $0 pushl $do_int3 jmp _error_codeoverflow:
pushl $0 pushl $do_overflow jmp _error_codebounds:
pushl $0 pushl $do_bounds jmp _error_codeinvalid_op:
pushl $0 pushl $do_invalid_op jmp _error_codedevice_not_available:
pushl $0 pushl $do_device_not_available
jmp _error_code
double_fault:
pushl $do_double_fault
jmp _error_code
coprocessor_segment_overrun: pushl $0
pushl $do_coprocessor_segment_overrun jmp _error_codeinvalid_TSS: pushl $do_invalid_TSS jmp _error_codesegment_not_present: pushl $do_segment_not_present jmp _error_codestack_segment: pushl $do_stack_segment jmp _error_codegeneral_protection: pushl $do_general_protection jmp _error_code
page_fault:
pushl $do_page_fault
jmp _error_code
reserved:
pushl $0
pushl $do_reserved
jmp _error_code
coprocessor_error:
pushl $0
pushl $do_coprocessor_error
jmp _error_code
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -