汇编:int中断
?int ------》 pushf, push cs, push ip
?iret-----》 pop ip, pop cs, popf
編寫自己的中斷程序. ?改寫0號中斷,當調用0號中斷時,屏幕顯示'!'字符。
assume cs:code, ds:data, ss:stackdata segmentdb 128 dup (0) data endsstack segmentdb 128 dup (0) stack endscode segmentstart: mov dx, stackmov ss, dxmov sp, 128call cpy_new_int0call set_new_int0 int 0mov ax, 4C00Hint 21H;================================================ set_new_int0:mov bx, 0mov es, bxclimov word ptr es:[0*4], 7E00Hmov word ptr es:[0*4+2], 0stiret ;================================================ new_int0:push bxpush cxpush dxpush esmov bx, 0B800Hmov es, bxmov dl, '!'mov cx, 2000mov bx, 0show_asc: mov es:[bx], dladd bx,2loop show_ascpop espop dxpop cxpop bxiretnew_int0_end: nop;================================================ cpy_new_int0:mov bx, csmov ds, bxmov si, OFFSET new_int0mov bx, 0mov es, bxmov di, 7E00Hmov cx, OFFSET new_int0_end - new_int0cldrep movsbretcode endsend start?
?
?實現73H中斷, 當調用73H中斷時,計算ax的平方。
assume cs:code, ds:data, ss:stackdata segmentdb 128 dup(0) data endsstack segmentdb 128 dup(0) stack endscode segmentstart: mov dx, stackmov ss, dxmov sp, 128call cpy_new_int73Hcall set_new_int73Hmov ax, 3456int 73H ; 調用73H中斷mov ax, 4C00Hint 21H;=============================================== set_new_int73H:mov bx, 0mov es, bxcli mov word ptr es:[73H*4], 7E00Hmov word ptr es:[73H*4+2], 0stiret ;=============================================== new_int73H:mul axiret new_int73H_end: nop;=============================================== cpy_new_int73H:mov dx, csmov ds, dxmov dx, 0mov es, dxmov si, OFFSET new_int73Hmov di, 7E00Hmov cx, OFFSET new_int73H_end - new_int73Hcldrep movsbretcode endsend start?
總結
- 上一篇: python五十二:__setattr_
- 下一篇: java:lock锁