[STUDY] 어셈블리어 - 4

2023. 2. 25. 23:57코딩/공부 [STUDY]

반응형

1. 과제 

목표 > 어셈블리어로 재귀함수를 이용한 팩토리얼 코드 구현하기

 


2. 조건 

1. 스택을 활용할 것.

2. system V x86_64 abi를 사용 할 것.

3. 아래의 C언어 코드를 참고할 것.

int fact(int n){
	if(1<=n){
    	return 1;
    }
 return n * fact(n-1)
}

3. 결과

section .text
    global fact

global _start

_start:
    mov rdi, 10
    call fact
    mov rax, 60
    xor rdi, rdi
    syscall
    
fact:
    push rbp
    mov rbp, rsp
    sub rsp, 0x10
    mov QWORD [rbp-0x8], rdi
    cmp QWORD [rbp-0x8], 0x1
    jg .if
    mov eax, 0x1
    jmp .end

.if:
    mov rax, QWORD [rbp-0x8]
    sub rax, 0x1
    mov rdi, rax
    call fact
    imul rax, QWORD [rbp-0x8]

.end:
    leave
    ret

재귀함수 자체를 이용한 팩토리얼 함수 자체가 어셈으로 구현하는게 처음이라 이해하고 만드는데 상당히 오래 걸렸다..

반응형

'코딩 > 공부 [STUDY]' 카테고리의 다른 글

[STUDY] 어셈블리어 - 6  (0) 2023.02.28
[STUDY] 어셈블리어 - 5  (0) 2023.02.28
[STUDY] 어셈블리어 - 3 (rip,rsp,rbp,스택프레임)  (1) 2023.02.23
[STUDY] 어셈블리어 - 2  (1) 2023.02.23
[STUDY] 어셈블리어 - 1  (0) 2023.02.22