Tuuna Computer Science

[Assembly] 어셈블리어 팩토리얼 소스코드 구현하기 본문

Assembly

[Assembly] 어셈블리어 팩토리얼 소스코드 구현하기

GuTTe 2018. 10. 29. 17:30


[ 하루 일 어셈블리 코딩 ]


nasm intel 32bit assembly


descriptor : factorial을 구현해보자




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
%isdnclude "asm_io.inc"
 
segment .bss
    number resd 1
 
segment .data
    outmsg1 db "input your number : "0
    format1 db "%s"0
    format2 db "%d"0
 
segment .text
    extern printf
    extern scanf
    global main
    global factorial
 
main:
    push ebp
    mov ebp, esp
    push outmsg1
    push format1
    call printf
    add esp, 8
 
    push number
    push format2
    call scanf
    add esp, 8
 
    xor eaxeax
    push dword [number]
    call factorial ;factorial함수 호출
    add esp, 4
 
    push eax
    push format2
    call printf
    add esp,8
    call print_nl ;개행
    pop ebp
    ret
 
factorial:
    push ebp
    mov ebp, esp
    cmp dword [ebp+8], 0 ;input값이 0일시
    je end    
    mov ebx[ebp+8]
    sub ebx1 ;n-1
    push ebx
    call factorial ;다시 호출
    add esp, 4   
    imul eax[ebp+8] ;return f(n-1) * n
 
    pop ebp
    ret
 
end:
    mov eax1
    pop ebp
    ret
 
 
 
cs


Comments