Perche un .exe in asm con questo sorgente:
codice:
;Beep.asm - by b0nu$, 1997

.286c
.MODEL  SMALL

INTERRUPT_NUM   EQU             9	;Interrupt da intercettare

                .CODE
                ORG             100H
FIRST:          JMP             LOAD_PROG	;Carico in memoria il prg.
                OLD_KEYBOARD_INT DD     ?	;Memorizza l'indirizzo al 
                 				;vecchio vettore di int.
                
PROG            PROC
                pusha		;salvo i registri

                pushf
                call OLD_KEYBOARD_INT	;chiamo la vecchia routine di int.

;QUI CI VA IL PROGRAMMA: In questo esempio ho deciso di emettere un BEEP ma
;si puņ fare qualunque cosa. Tranne che chiamare un interrupt del DOS!!
;--------------------------------------------------------------------------
	in	al,61h	;Per il BEEP programmo il Timer
	test	al,3
	jne 	skippa		
	or	al,3
	out	61h,al
	mov	al,0B6h
	out	43h,al
	
skippa:	mov	al,06h	;frequenza LSB
	out	42h,al
	mov	al,01h	;frequenza MSB
	out	42h,al
	
	mov	cx,0FFFFh
wait_loop:
	loop	wait_loop	;ciclo di attesa
	
	in	al,61h	;silenzio
	and 	al,0FCh
	out	061h,al
;--------------------------------------------------------------------------
		
EXIT:          
                popa                
                iret
PROG            ENDP

LOAD_PROG       PROC		;Procedura che carica in memoria il prg.
                mov     ah,35h                
                mov     al,INTERRUPT_NUM
                int     21h		;Prelevo il vecchio vettore 
                mov     WORD PTR OLD_KEYBOARD_INT,bx
                mov     WORD PTR OLD_KEYBOARD_INT[2],es
		
                mov	al,INTERRUPT_NUM
                mov     ah,25h
                lea     dx,PROG
                int     21h		;Imposto quello nuovo
		
                mov     dx,OFFSET LOAD_PROG   ;in DX ci va l'ultimo byte del
					      ;prg. + 1
                int     27h		;Termina ma rimani in memoria
LOAD_PROG       ENDP
                END     FIRST
viene disassemblato cosi:
codice:
 
seg000:0100 ;
seg000:0100 ; +-------------------------------------------------------------------------+
seg000:0100 ; ¦     This file is generated by The Interactive Disassembler (IDA)        ¦
seg000:0100 ; ¦     Copyright (c) 2001 by DataRescue sa/nv, <ida@datarescue.com>        ¦
seg000:0100 ; ¦              Licensed to: Roger Cross, 1 user, std, 7/2000              ¦
seg000:0100 ; +-------------------------------------------------------------------------+
seg000:0100 ;
seg000:0100 ; File Name   : C:\Documents and Settings\Luca\Desktop\Nuova cartella\BEEP.COM
seg000:0100 ; Format      : MS-DOS COM-file
seg000:0100 ; Base Address: 1000h Range: 10100h-1014Fh Loaded length: 4Fh
seg000:0100 
seg000:0100 
seg000:0100 ; ---------------------------------------------------------------------------
seg000:0100 
seg000:0100 seg000          segment byte public 'CODE'
seg000:0100                 assume cs:seg000
seg000:0100                 org 100h
seg000:0100                 assume es:nothing, ss:nothing, ds:seg000
seg000:0100 
seg000:0100 ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
seg000:0100 
seg000:0100 
seg000:0100                 public start
seg000:0100 start           proc near
seg000:0100                 jmp     short loc_0_131
seg000:0100 ; ---------------------------------------------------------------------------
seg000:0102                 db  90h ; É
seg000:0103 word_0_103      dw 0                    ; DATA XREF: start+37.w
seg000:0105 word_0_105      dw 0                    ; DATA XREF: start+3C.w
seg000:0107                 db  60h ; `
seg000:0108                 db  9Ch ; £
seg000:0109                 db  2Eh ; .
seg000:010A                 db 0FFh ;  
seg000:010B                 db  1Eh ;  
seg000:010C                 db    3 ;  
seg000:010D                 db    1 ;  
seg000:010E                 db 0E4h ; õ
seg000:010F                 db  61h ; a
seg000:0110                 db 0A8h ; æ
seg000:0111                 db    3 ;  
seg000:0112                 db  75h ; u
seg000:0113                 db    8 ;  
seg000:0114                 db  0Ch ;  
seg000:0115                 db    3 ;  
seg000:0116                 db 0E6h ; µ
seg000:0117                 db  61h ; a
seg000:0118                 db 0B0h ; ¦
seg000:0119                 db 0B6h ; Ā
seg000:011A                 db 0E6h ; µ
seg000:011B                 db  43h ; C
seg000:011C                 db 0B0h ; ¦
seg000:011D                 db    6 ;  
seg000:011E                 db 0E6h ; µ
seg000:011F                 db  42h ; B
seg000:0120                 db 0B0h ; ¦
seg000:0121                 db    1 ;  
seg000:0122                 db 0E6h ; µ
seg000:0123                 db  42h ; B
seg000:0124                 db 0B9h ; ¦
seg000:0125                 db 0FFh ;  
seg000:0126                 db 0FFh ;  
seg000:0127                 db 0E2h ; Ō
seg000:0128                 db 0FEh ; ¦
seg000:0129                 db 0E4h ; õ
seg000:012A                 db  61h ; a
seg000:012B                 db  24h ; $
seg000:012C                 db 0FCh ; ³
seg000:012D                 db 0E6h ; µ
seg000:012E                 db  61h ; a
seg000:012F                 db  61h ; a
seg000:0130                 db 0CFh ; ¤
seg000:0131 ; ---------------------------------------------------------------------------
seg000:0131 
seg000:0131 loc_0_131:                              ; CODE XREF: start.j
seg000:0131                 mov     ah, 35h
seg000:0133                 mov     al, 9
seg000:0135                 int     21h             ; DOS - 2+ - GET INTERRUPT VECTOR
seg000:0135                                         ; AL = interrupt number
seg000:0135                                         ; Return: ES:BX = value of interrupt vector
seg000:0137                 mov     cs:word_0_103, bx
seg000:013C                 mov     cs:word_0_105, es
seg000:0141                 mov     al, 9
seg000:0143                 mov     ah, 25h
seg000:0145                 mov     dx, 107h
seg000:0148                 int     21h             ; DOS - SET INTERRUPT VECTOR
seg000:0148                                         ; AL = interrupt number
seg000:0148                                         ; DS:DX = new vector to be used for specified interrupt
seg000:014A                 mov     dx, 131h
seg000:014D                 int     27h             ; DOS - TERMINATE BUT STAY RESIDENT
seg000:014D start           endp                    ; CS = current program segment
seg000:014D                                         ; DX = last program byte + 1
seg000:014D seg000          ends
seg000:014D 
seg000:014D 
seg000:014D                 end start
Non vedo alcune parti del cod ...


P.S: ma Ida aggiunge i commenti da solo?