21,458
社区成员
发帖
与我相关
我的任务
分享
SAMPLE C CODE:
------------------------
int main( )
{
int value;
printf( "Provide a value: " );
scanf( "%d", &value );
int f = fibRec( value );
printf( "fib( %d ) = %d\n", value, f );
return( 0 );
}
int fibRec( int value )
{
int result = 1;
if (value == 1 || value == 2) // base case
result = 1;
else
result = fibRec( value-1 ) + fibRec( value-2 );
return( result );
}
#include <stdio.h>
int fibRec(int value) {
int result = 1;
if (value == 1 || value == 2) // base case
result = 1;
else
result = fibRec( value-1 ) + fibRec( value-2 );
return( result );
}
int main() {
int value;
printf( "Provide a value: " );
scanf( "%d", &value );
int f = fibRec( value );
printf( "fib( %d ) = %d\n", value, f );
return( 0 );
}
TITLE c:\tmp\tmp\err.cpp
.386P
include listing.inc
if @Version gt 510
.model FLAT
else
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA ENDS
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
_BSS SEGMENT DWORD USE32 PUBLIC 'BSS'
_BSS ENDS
$$SYMBOLS SEGMENT BYTE USE32 'DEBSYM'
$$SYMBOLS ENDS
$$TYPES SEGMENT BYTE USE32 'DEBTYP'
$$TYPES ENDS
_TLS SEGMENT DWORD USE32 PUBLIC 'TLS'
_TLS ENDS
; COMDAT ??_C@_0BC@KGPP@Provide?5a?5value?3?5?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_02MECO@?$CFd?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ??_C@_0BA@MKBB@fib?$CI?5?$CFd?5?$CJ?5?$DN?5?$CFd?6?$AA@
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT ?fibRec@@YAHH@Z
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
; COMDAT _main
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
FLAT GROUP _DATA, CONST, _BSS
ASSUME CS: FLAT, DS: FLAT, SS: FLAT
endif
PUBLIC ?fibRec@@YAHH@Z ; fibRec
; COMDAT ?fibRec@@YAHH@Z
_TEXT SEGMENT
_value$ = 8
_result$ = -4
?fibRec@@YAHH@Z PROC NEAR ; fibRec, COMDAT
; 2 : int fibRec(int value) {
push ebp
mov ebp, esp
sub esp, 68 ; 00000044H
push ebx
push esi
push edi
; 3 : int result = 1;
mov DWORD PTR _result$[ebp], 1
; 4 : if (value == 1 || value == 2) // base case
cmp DWORD PTR _value$[ebp], 1
je SHORT $L584
cmp DWORD PTR _value$[ebp], 2
jne SHORT $L583
$L584:
; 5 : result = 1;
mov DWORD PTR _result$[ebp], 1
; 6 : else
jmp SHORT $L585
$L583:
; 7 : result = fibRec( value-1 ) + fibRec( value-2 );
mov eax, DWORD PTR _value$[ebp]
sub eax, 1
push eax
call ?fibRec@@YAHH@Z ; fibRec
add esp, 4
mov esi, eax
mov ecx, DWORD PTR _value$[ebp]
sub ecx, 2
push ecx
call ?fibRec@@YAHH@Z ; fibRec
add esp, 4
add esi, eax
mov DWORD PTR _result$[ebp], esi
$L585:
; 8 : return( result );
mov eax, DWORD PTR _result$[ebp]
; 9 : }
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0
?fibRec@@YAHH@Z ENDP ; fibRec
_TEXT ENDS
PUBLIC _main
PUBLIC ??_C@_0BC@KGPP@Provide?5a?5value?3?5?$AA@ ; `string'
PUBLIC ??_C@_02MECO@?$CFd?$AA@ ; `string'
PUBLIC ??_C@_0BA@MKBB@fib?$CI?5?$CFd?5?$CJ?5?$DN?5?$CFd?6?$AA@ ; `string'
EXTRN __imp__printf:NEAR
EXTRN __imp__scanf:NEAR
; COMDAT ??_C@_0BC@KGPP@Provide?5a?5value?3?5?$AA@
; File c:\tmp\tmp\err.cpp
CONST SEGMENT
??_C@_0BC@KGPP@Provide?5a?5value?3?5?$AA@ DB 'Provide a value: ', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_02MECO@?$CFd?$AA@
CONST SEGMENT
??_C@_02MECO@?$CFd?$AA@ DB '%d', 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0BA@MKBB@fib?$CI?5?$CFd?5?$CJ?5?$DN?5?$CFd?6?$AA@
CONST SEGMENT
??_C@_0BA@MKBB@fib?$CI?5?$CFd?5?$CJ?5?$DN?5?$CFd?6?$AA@ DB 'fib( %d ) = %'
DB 'd', 0aH, 00H ; `string'
CONST ENDS
; COMDAT _main
_TEXT SEGMENT
_value$ = -4
_f$ = -8
_main PROC NEAR ; COMDAT
; 10 : int main() {
push ebp
mov ebp, esp
sub esp, 72 ; 00000048H
push ebx
push esi
push edi
; 11 : int value;
; 12 : printf( "Provide a value: " );
push OFFSET FLAT:??_C@_0BC@KGPP@Provide?5a?5value?3?5?$AA@ ; `string'
call DWORD PTR __imp__printf
add esp, 4
; 13 : scanf( "%d", &value );
lea eax, DWORD PTR _value$[ebp]
push eax
push OFFSET FLAT:??_C@_02MECO@?$CFd?$AA@ ; `string'
call DWORD PTR __imp__scanf
add esp, 8
; 14 : int f = fibRec( value );
mov ecx, DWORD PTR _value$[ebp]
push ecx
call ?fibRec@@YAHH@Z ; fibRec
add esp, 4
mov DWORD PTR _f$[ebp], eax
; 15 : printf( "fib( %d ) = %d\n", value, f );
mov edx, DWORD PTR _f$[ebp]
push edx
mov eax, DWORD PTR _value$[ebp]
push eax
push OFFSET FLAT:??_C@_0BA@MKBB@fib?$CI?5?$CFd?5?$CJ?5?$DN?5?$CFd?6?$AA@ ; `string'
call DWORD PTR __imp__printf
add esp, 12 ; 0000000cH
; 16 : return( 0 );
xor eax, eax
; 17 : }
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0
_main ENDP
_TEXT ENDS
END