⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irqstack.lst

📁 DOS SOURCE CODE,DOS-C started in 1988 as an experiment in writing device drivers in C for Microsof
💻 LST
字号:
Turbo Assembler	 Version 3.1	    04/11/13 12:54:48	    Page 1
irqstack.asm



      1				     ; File:
      2				     ;			       irqstack.asm
      3				     ; Description:
      4				     ;	   Assembly support routines for hardware stack	support
      5				     ;
      6				     ;			     Copyright (c) 1997
      7				     ;				Svante Frey
      8				     ;			     All Rights	Reserved
      9				     ;
     10				     ; This file is part of DOS-C.
     11				     ;
     12				     ; DOS-C is	free software; you can redistribute it and/or
     13				     ; modify it under the terms of the	GNU General Public License
     14				     ; as published by the Free	Software Foundation; either version
     15				     ; 2, or (at your option) any later	version.
     16				     ;
     17				     ; DOS-C is	distributed in the hope	that it	will be	useful,	but
     18				     ; WITHOUT ANY WARRANTY; without even the implied warranty of
     19				     ; MERCHANTABILITY or FITNESS FOR A	PARTICULAR PURPOSE.  See
     20				     ; the GNU General Public License for more details.
     21				     ;
     22				     ; You should have received	a copy of the GNU General Public
     23				     ; License along with DOS-C; see the file COPYING.	If not,
     24				     ; write to	the Free Software Foundation, 675 Mass Ave,
     25				     ; Cambridge, MA 02139, USA.
     26				     ;
     27				     ; $Logfile:   C:/dos-c/src/kernel/irqstack.asv  $
     28				     ;
     29				     ; $Header:	  C:/dos-c/src/kernel/irqstack.asv   1.1   22 Jan 1997 13:15:34	  patv	$
     30				     ;
     31				     ; $Log:   C:/dos-c/src/kernel/irqstack.asv	 $
     32				     ;
     33				     ;	   Rev 1.1   22	Jan 1997 13:15:34   patv
     34				     ;	pre-0.92 Svante	Frey bug fixes
     35				     ;
     36				     ;	   Rev 1.0   16	Jan 1997 21:43:44   patv
     37				     ;	Initial	revision.
     38				     ;
     39
     40
     41				     ;	     Code for stack switching during hardware interrupts.
     42
     43	0000			     _TEXT	     segment WORD PUBLIC 'CODE'
     44						     assume  cs:_TEXT
     45
     46	0000  10*(????????)	     old_vectors     dd	     16	dup(?)
     47	0040  ????		     stack_size	     dw	     ?
     48	0042  ????		     stack_top	     dw	     ?
     49	0044  ????		     stack_offs	     dw	     ?
     50	0046  ????		     stack_seg	     dw	     ?
     51
     52	0048  53		     irq_0:	     push    bx
     53	0049  BB 0000				     mov     bx, 0 * 4
     54	004C  EB 58				     jmp     short general_irq_service
     55
Turbo Assembler	 Version 3.1	    04/11/13 12:54:48	    Page 2
irqstack.asm



     56	004E  53		     irq_1:	     push    bx
     57	004F  BB 0004				     mov     bx, 1 * 4
     58	0052  EB 52				     jmp     short general_irq_service
     59
     60	0054  53		     irq_2:	     push    bx
     61	0055  BB 0008				     mov     bx, 2 * 4
     62	0058  EB 4C				     jmp     short general_irq_service
     63
     64	005A  53		     irq_3:	     push    bx
     65	005B  BB 000C				     mov     bx, 3 * 4
     66	005E  EB 46				     jmp     short general_irq_service
     67
     68	0060  53		     irq_4:	     push    bx
     69	0061  BB 0010				     mov     bx, 4 * 4
     70	0064  EB 40				     jmp     short general_irq_service
     71
     72	0066  53		     irq_5:	     push    bx
     73	0067  BB 0014				     mov     bx, 5 * 4
     74	006A  EB 3A				     jmp     short general_irq_service
     75
     76	006C  53		     irq_6:	     push    bx
     77	006D  BB 0018				     mov     bx, 6 * 4
     78	0070  EB 34				     jmp     short general_irq_service
     79
     80	0072  53		     irq_7:	     push    bx
     81	0073  BB 001C				     mov     bx, 7 * 4
     82	0076  EB 2E				     jmp     short general_irq_service
     83
     84	0078  53		     irq_08:	     push    bx
     85	0079  BB 0020				     mov     bx, 8 * 4
     86	007C  EB 28				     jmp     short general_irq_service
     87
     88	007E  53		     irq_09:	     push    bx
     89	007F  BB 0024				     mov     bx, 9 * 4
     90	0082  EB 22				     jmp     short general_irq_service
     91
     92	0084  53		     irq_0a:	     push    bx
     93	0085  BB 0028				     mov     bx, 0ah * 4
     94	0088  EB 1C				     jmp     short general_irq_service
     95
     96	008A  53		     irq_0b:	     push    bx
     97	008B  BB 002C				     mov     bx, 0bh * 4
     98	008E  EB 16				     jmp     short general_irq_service
     99
    100	0090  53		     irq_0c:	     push    bx
    101	0091  BB 0030				     mov     bx, 0ch * 4
    102	0094  EB 10				     jmp     short general_irq_service
    103
    104	0096  53		     irq_0d:	     push    bx
    105	0097  BB 0034				     mov     bx, 0dh * 4
    106	009A  EB 0A				     jmp     short general_irq_service
    107
    108	009C  53		     irq_0e:	     push    bx
    109	009D  BB 0038				     mov     bx, 0eh * 4
    110	00A0  EB 04				     jmp     short general_irq_service
Turbo Assembler	 Version 3.1	    04/11/13 12:54:48	    Page 3
irqstack.asm



    111
    112	00A2  53		     irq_0f:	     push    bx
    113	00A3  BB 003C				     mov     bx, 0fh * 4
    114				     ;		      jmp     short general_irq_service
    115
    116	00A6			     General_irq_service:
    117	00A6  52				     push    dx
    118	00A7  50				     push    ax
    119	00A8  1E				     push    ds
    120
    121	00A9  8C C8				     mov     ax, cs
    122	00AB  8E D8				     mov     ds, ax
    123
    124	00AD  2E: A1 0042r			     mov     ax, stack_top
    125	00B1  2E: 3B 06	0044r			     cmp     ax, stack_offs
    126	00B6  76 30				     jbe     dont_switch
    127
    128	00B8  8C D2				     mov     dx, ss
    129	00BA  8B C4				     mov     ax, sp
    130
    131	00BC  2E: 8E 16	0046r			     mov     ss, stack_seg
    132	00C1  2E: 8B 26	0042r			     mov     sp, stack_top
    133
    134	00C6  52				     push    dx		     ; save old	SS:SP on new stack
    135	00C7  50				     push    ax
    136
    137	00C8  2E: A1 0040r			     mov     ax, stack_size
    138	00CC  2E: 29 06	0042r			     sub     stack_top,	ax
    139
    140	00D1  9C				     pushf
    141	00D2  2E: FF 9F	0000r			     call    old_vectors[bx]
    142
    143	00D7  FA				     cli
    144	00D8  2E: 01 06	0042r			     add     stack_top,	ax
    145
    146	00DD  58				     pop     ax		     ; get stored SS:SP
    147	00DE  5A				     pop     dx
    148
    149	00DF  8E D2				     mov     ss, dx	     ; switch back to old stack
    150	00E1  8B E0				     mov     sp, ax
    151
    152	00E3  1F				     pop     ds		     ; restore registers and return
    153	00E4  58				     pop     ax
    154	00E5  5A				     pop     dx
    155	00E6  5B				     pop     bx
    156	00E7  CF				     iret
    157
    158	00E8  9C		     dont_switch:    pushf
    159	00E9  2E: FF 9F	0000r			     call    dword ptr old_vectors[bx]
    160	00EE  1F				     pop     ds
    161	00EF  58				     pop     ax
    162	00F0  5A				     pop     dx
    163	00F1  5B				     pop     bx
    164	00F2  CF				     iret
    165
Turbo Assembler	 Version 3.1	    04/11/13 12:54:48	    Page 4
irqstack.asm



    166				     public  _init_stacks
    167				     ; VOID    init_stacks(VOID	FAR *stack_base, COUNT nStacks,	WORD stackSize);
    168
    169	00F3			     _init_stacks    proc    near
    170	00F3  55				     push    bp
    171	00F4  8B EC				     mov     bp, sp
    172	00F6  1E				     push    ds
    173	00F7  57				     push    di
    174	00F8  56				     push    si
    175
    176
    177	00F9  0E				     push    cs
    178	00FA  1F				     pop     ds
    179
    180	00FB  8B 5E 04				     mov     bx, [bp+4]
    181	00FE  8B 56 06				     mov     dx, [bp+6]
    182	0101  8B 46 08				     mov     ax, [bp+8]
    183	0104  8B 4E 0A				     mov     cx, [bp+0ah]
    184
    185	0107  2E: 89 0E	0040r			     mov     stack_size, cx
    186	010C  2E: 89 1E	0044r			     mov     stack_offs, bx
    187	0111  2E: 89 16	0046r			     mov     stack_seg,	dx
    188
    189	0116  F7 E1				     mul     cx
    190	0118  03 C3				     add     ax, bx
    191	011A  2E: A3 0042r			     mov     stack_top,	ax
    192
    193	011E  33 C0				     xor     ax, ax
    194	0120  8E D8				     mov     ds, ax
    195
    196	0122  0E				     push    cs
    197	0123  07				     pop     es
    198
    199	0124  BF 0000r				     mov     di, offset	old_vectors
    200	0127  BE 0020				     mov     si, 8 * 4
    201	012A  B9 0010				     mov     cx, 10h
    202	012D  F3> A5				     rep     movsw
    203
    204	012F  BE 01C0				     mov     si, 70h * 4
    205	0132  B9 0010				     mov     cx, 10h
    206	0135  F3> A5				     rep     movsw
    207
    208	0137  1E				     push    ds
    209	0138  07				     pop     es
    210
    211	0139  BF 0020				     mov     di, 8 * 4
    212	013C  BA 0048r				     mov     dx, offset	irq_0
    213	013F  E8 000B				     call    set_vect
    214
    215	0142  BF 01C0				     mov     di, 70h * 4
    216	0145  E8 0005				     call    set_vect
    217
    218	0148  5E				     pop     si
    219	0149  5F				     pop     di
    220	014A  1F				     pop     ds
Turbo Assembler	 Version 3.1	    04/11/13 12:54:48	    Page 5
irqstack.asm



    221	014B  5D				     pop     bp
    222	014C  C3				     ret
    223	014D			     _init_stacks    endp
    224
    225	014D			     set_vect	     proc
    226	014D  B9 0008				     mov     cx, 8
    227
    228	0150  8B C2		     set_next:	     mov     ax, dx
    229	0152  FA				     cli
    230	0153  AB				     stosw
    231	0154  8C C8				     mov     ax, cs
    232	0156  AB				     stosw
    233	0157  FB				     sti
    234	0158  83 C2 06				     add     dx, offset	irq_1 -	offset irq_0
    235	015B  E2 F3				     loop    set_next
    236
    237	015D  C3				     ret
    238	015E			     set_vect	     endp
    239
    240	015E			     _TEXT	     ENDS
    241
    242						     end
Turbo Assembler	 Version 3.1	    04/11/13 12:54:48	    Page 6
Symbol Table




Symbol Name			  Type	 Value

??DATE				  Text	 "04/11/13"
??FILENAME			  Text	 "irqstack"
??TIME				  Text	 "12:54:48"
??VERSION			  Number 030A
@CPU				  Text	 0101H
@CURSEG				  Text	 _TEXT
@FILENAME			  Text	 IRQSTACK
@WORDSIZE			  Text	 2
DONT_SWITCH			  Near	 _TEXT:00E8
GENERAL_IRQ_SERVICE		  Near	 _TEXT:00A6
IRQ_0				  Near	 _TEXT:0048
IRQ_08				  Near	 _TEXT:0078
IRQ_09				  Near	 _TEXT:007E
IRQ_0A				  Near	 _TEXT:0084
IRQ_0B				  Near	 _TEXT:008A
IRQ_0C				  Near	 _TEXT:0090
IRQ_0D				  Near	 _TEXT:0096
IRQ_0E				  Near	 _TEXT:009C
IRQ_0F				  Near	 _TEXT:00A2
IRQ_1				  Near	 _TEXT:004E
IRQ_2				  Near	 _TEXT:0054
IRQ_3				  Near	 _TEXT:005A
IRQ_4				  Near	 _TEXT:0060
IRQ_5				  Near	 _TEXT:0066
IRQ_6				  Near	 _TEXT:006C
IRQ_7				  Near	 _TEXT:0072
OLD_VECTORS			  Dword	 _TEXT:0000
SET_NEXT			  Near	 _TEXT:0150
SET_VECT			  Near	 _TEXT:014D
STACK_OFFS			  Word	 _TEXT:0044
STACK_SEG			  Word	 _TEXT:0046
STACK_SIZE			  Word	 _TEXT:0040
STACK_TOP			  Word	 _TEXT:0042
STANDALONE			  Text	 1
_INIT_STACKS (_init_stacks)	  Near	 _TEXT:00F3

Groups & Segments		  Bit Size Align  Combine Class

_TEXT				  16  015E Word	  Public  CODE


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -