; this prints registers ; expect to be called as interrupt routine isr_debug: push ss push es push ds push di push si push bp push sp push dx push cx push bx push ax call printf db "AX=%X BX=%X CX=%X DX=%X", 0x20 db "SP=%X BP=%X SI=%X DI=%X", 0x0A, 0x0D db "DS=%X ES=%X SS=%X IP=%X CS=%X", 0x20, 0 mov bp, sp mov bx, [ss:bp+26] mov si, .flags mov cx, 0x0010 .loop: mov al, [cs:si] inc si test bx, 0x8000 jnz .write mov al, '-' .write: sal bx, 1 call putc loop .loop call printf db 0x0A, 0x0D, 0 pop ax pop bx pop cx pop dx pop sp pop bp pop si pop di pop ds pop es pop ss iret .flags: ; 16 letters for each bit in flags register db "++++ODITSZ+A+P+C"