AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 汇编语言

汇编源码--break

51自学网 2015-09-08 http://www.51zixue.net
        title   Control-Break handler for Lattice C programs        name    break        include dos.mac;; Control-Break Interrupt Handler for Lattice C programs ; running on IBM PCs (and ROM BIOS compatibles); ; Ray Duncan, May 1985;; This module allows C programs running on the IBM PC; to retain control when the user enters a Control-Break; or Control-C.  This is accomplished by taking over the; Int 23H (MS-DOS Control-Break) and Int 1BH (IBM PC ; ROM BIOS Keyboard Driver Control-Break) interrupt ; vectors.  The interrupt handler sets an internal; flag (which must be declared STATIC INT) to TRUE within; the C program; the C program can poll or ignore this ; flag as it wishes.; ; The module follows the Lattice C parameter passing; conventions, and also relies on the Lattice file DOS.MAC; for the definition of certain constants and macros.;; The Int 23H Control-Break handler is a function of MS-DOS; and is present on all MS-DOS machines, however, the Int 1BH; handler is a function of the IBM PC ROM BIOS and will not; necessarily be present on other machines. ;         if      lprogargs    equ     6               ;offset of arguments, Large models        elseargs    equ     4               ;offset of arguments, Small models        endifcr      equ     0dh             ;ASCII carriage returnlf      equ     0ah             ;ASCII line feed        pseg        public  capture,release ;function names for C;; The function CAPTURE is called by the C program to; take over the MS-DOS and keyboard driver Control-; Break interrupts (1BH and 23H).  It is passed the; address of a flag within the C program which is set; to TRUE whenever a Control-Break or Control-C; is detected.  The function is used in the form:; ;               static int flag;;               capture(&flag);capture proc    near            ;take over Control-Break         push    bp              ;interrupt vectors        mov     bp,sp        push    ds        mov     ax,word ptr [bp+args]        mov     cs:flag,ax      ;save address of integer        mov     cs:flag+2,ds    ;flag variable in C program                                ;pick up original vector contents        mov     ax,3523h        ;for interrupt 23H (MS-DOS        int     21h             ;Control-Break handler)        mov     cs:int23,bx        mov     cs:int23+2,es        mov     ax,351bh        ;and interrupt 1BH         int     21h             ;(IBM PC ROM BIOS keyboard driver        mov     cs:int1b,bx     ;Control-Break interrupt handler)        mov     cs:int1b+2,es        push    cs              ;set address of new handler             pop     ds        mov     dx,offset ctrlbrk        mov     ax,02523H       ;for interrupt 23H        int     21h        mov     ax,0251bH       ;and interrupt 1BH        int     21h        pop     ds              ;restore registers and        pop     bp              ;return to C program        retcapture endp;; The function RELEASE is called by the C program to; return the MS-DOS and keyboard driver Control-Break; interrupt vectors to their original state.  Int 23h is; also automatically restored by MS-DOS upon the termination; of a process, however, calling RELEASE allows the C; program to restore the default action of a Control-C; without terminating.  The function is used in the form:;;               release();release proc    near            ;restore Control-Break interrupt                                ;vectors to their original state                push    bp        mov     bp,sp        push    ds        mov     dx,cs:int1b     ;set interrupt 1BH        mov     ds,cs:int1b+2   ;(MS-DOS Control-Break         mov     ax,251bh        ;interrupt handler)             int     21h        mov     dx,cs:int23     ;set interrupt 23H        mov     ds,cs:int23+2   ;(IBM PC ROM BIOS keyboard driver         mov     ax,2523h        ;Control-Break interrupt handler)        int     21h        pop     ds              ;restore registers and        pop     bp              ;return to C program        retrelease endp;; This is the actual interrupt handler which is called by; the ROM BIOS keyboard driver or by MS-DOS when a Control-C; or Control-Break is detected.  Since the interrupt handler; may be called asynchronously by the keyboard driver, it; is severely restricted in what it may do without crashing; the system (e.g. no calls on DOS allowed).  In this; version, it simply sets a flag within the C program to; TRUE to indicate that a Control-C or Control-Break has; been detected; the address of this flag was passed; by the C program during the call to the CAPTURE function.;ctrlbrk proc    far             ;Control-Break interrupt handler        push    bx              ;save affected registers        push    ds        mov     bx,cs:flag      ;set flag within C program        mov     ds,cs:flag+2    ;to "True"        mov     word ptr ds:[bx],-1                pop     ds              ;restore registers and exit        pop     bx        iretctrlbrk endpflag    dw      0,0             ;long address of C program's                                ;Control-Break detected flagint23   dw      0,0             ;original contents of MS-DOS                                ;Control-Break Interrupt 23H                                ;vector        int1b   dw      0,0             ;original contents of ROM BIOS                                ;keyboard driver Control-Break                                ;Interrupt 1BH vector        endps        end

 

 

 
上一篇:汇编源码--BRK  下一篇:汇编源码--basmain