x86 어셈블리에서 함수 호출

1430 단어 nasmassemblyx86
이것은 x86 어셈블리에 관한 다섯 번째 문장이다.본문에서, 나는 x86 어셈블리에서 함수를 어떻게 호출하는지 보여줄 것이다.
다음은main 이외에 세 가지 기능이 있는 간단한 프로그램입니다.
global main
extern printf
section .text
main:
        mov rdi, 5
        call times2
        mov rdi, rax
        call print_value
        call exit
times2:
        push rbp
        mov rbp, rsp

        mov rax, rdi
        add rax, rax

        mov rsp, rbp
        pop rbp
        ret
print_value:
        push rbp
        mov rbp, rsp

        push rdi
        mov rdi, fmt
        pop rsi
        mov rax, 0
        call printf wrt ..plt

        mov rsp, rbp
        pop rbp
        ret
exit:
        mov rdi, 0 ; exit code 0
        mov rax, 60 ; system call for exit
        syscall

section .data
fmt: db "The value is %d", 10, 0


함수에 값 전달
위의 코드는 리눅스 64비트 ABI를 따르는데, 그 중 여섯 개의 매개 변수 (정수와 바늘) 가 레지스터를 통해 전달된다.창고나 하드코딩 메모리 위치에서 파라미터를 전달할 수도 있다.

함수 서문과 결어
함수의 시작과 끝times2함수 서문과 끝소리라고 불린다.
  push rbp
  mov rbp, rsp

  ...

  mov rsp, rbp
  pop rbp
  ret

창고를 사용하겠다는 약속이오.호출된 함수에 대한 새 창고 프레임을 만들고, 끝은 호출된 함수에 대한 창고 프레임을 복원합니다.

좋은 웹페이지 즐겨찾기