    10: 
    11:	void f() 
    12:	{ 
    13:	   int x = 123; 
    14:	   printf("x == %d\n",  x); 
    15:	} 
    
    
    ЗАМЕЧАНИЕ 

    Нe стоит вводить или ассемблировать файл VOIDKASM. Вы можете создать свою 
собственную немодифиднрованную копию с помощью компиляции листинга 17.1 с 
опцией -S. На диске файл VOIDFM.ASM (лишнее М означает модификацию) содержит 
листинг 17.2. Я добавил поясняющие комментарии справа в большинстве строк. 

    Листинг 17.2. VOIDFM.ASM (снабженный комментариями файл на ассемблере VOIDF.CPP) 

    1:	_ТЕХТ segment byte public 'CODE'	; Начало сегмента кода 
    2:	;
    3:	; main() 
    4:	; 
    5:	assume cs:_TEXT	;Директива ассемблера 
    6:	_main proc near	;Начало функции main() 
    7:	push bp	;Сохранить указатель базы 
    8:	mov bp, sp	;Задать bp равным sp 
    9:	; 
    10:	;{ 
    11:	;f(); 
    12: 	;
    13:	call near ptr @f$qv	; Вызвать функцию f() 
    14: 	;
    15:	;return 0; 
    16: 	;
    17:	xor ax, ax	; Задать возвращаемое в- ах значение равным 0 
    18:	jmp short §1058	; Бесполезная инструкция! 
    19:	91958: 
    20: 	;
    21:	;} 
    22: 	;
    23:	pop bp	Восстановить bp 
    24:	ret	Вернуться в место вызова 
    25:	_main endp	Конец функции main() 
    26:	; 
    27:	; void f(void) 
    28:	; 
    29:	assume cs:_TEXT	Директива ассемблера 
    30:	@f$qv proc near	Начало функции f() 
    31:	push bp	Сохранить регистр bp 
    32:	mov bp.sp	Задать bp равным sp 
    33:	sub sp,2	Зарезервировать стек для х 
    34: 	;
    35:	;{ 
    36.	;int x = 123; 
    37: 	;
    38:	mov word ptr [bp-2],123	; Присвоить 123 целому х 
    39: 	;
    40:	;printf("x == %d\n", x); 
    41:	; 
    42:	push word ptr [bp-2]	Запомнить значение х 
    43:	mov ax, offset DGROUP:s@	Запомнить адрес строки s, 
    44:	push ax	;хранящейся в сегменте данных 
    45:	call near ptr _printf	;Вызвать функцию printf() 
    46:	pop ex	;Удалить элемент из стека 
    47:	pop ex	;Удалить элемент из стека 
    48: 	;
    49:	;} 
    50: 	;
    51:	mov sp.bp	; Очистить указатель стека 
    52:	pop bp	; Восстановить регистр bp 
    53:	ret	; Вернуться в место вызова 
    54:	ef$qv endp 
    55:	?debug С Е9 .	; Отладочная информация 
    56:	?debug С FA00000000	; для Turbo Debugger 

    
   440     Часть IV. Разработка приложений 
