[Assembly Language] 함수 기초
함수기초
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 67 68 69 | %include "io64.inc" section .text global CMAIN CMAIN: mov rbp, rsp; for correct debugging ; 함수 (프로시저 procedure 서브루틴 subroutine) ; call PRINT_MSG mov eax, 10 mov ebx, 15 call MAX PRINT_DEC 4, ecx NEWLINE xor rax, rax ret PRINT_MSG: PRINT_STRING msg NEWLINE ret ; ex) 두 값 주 ㅇ더 큰 값을 반환하느 max ; 근데 2값을 어떻게 남겨받지? 반환 어떻게? ; eax와 ebx 입력값을 ecx에 반환 MAX: cmp eax, ebx jg L1 mov ecx, ebx jg L2 L1: mov ecx, eax L2: ret ; 그런데 인자가 10개라면 어떻게 할까? a b c d ; eax, ebx에 이미 중요한 값이 있으면 어떻게 할까? ; [!] .data .bss 사용하면? ; 인자를 도대체 몇개를 할당해야 하지? ; 다른 메모리 구조가 필요하다 ; - 꿈의 유효한 동안에는 그 꿈을 유지시켜야 함.(유효 범위의 개념이 있다) ; - 꿈이 끝나면 그 꿈을 부셔버려도 됨 (정리의 개념이 있다) ; - 꿈에서도 또 꿈을 꿀 수 있다는 것을 고려해야 함 (유동적으로 유효 범위가 확장 가능) ; [!] 스택(stack)이라는 메모리 영역을 사용 ; 함수가 사용하는 일종의 메모장 ; - 매개 변수 전달 ; - 돌아갈 주소 관리 ; 초기화 되지 않은 데이터 ;[변수이름] [크기] [개수]` ;[크기] resb(1) resw(2) resd(4) resq(8) section .data msg db 'Hello World', 0x00 ; 초기화 되지 않은 데이터 ;[변수이름] [크기] [개수]` ;[크기] resb(1) resw(2) resd(4) resq(8) section .bss e resb 10 | cs |
'⭐ Programming > Assembly Language' 카테고리의 다른 글
[Assembly Language] Data Basic (0) | 2022.05.23 |
---|---|
[Assembly Language] Stack Memory 스택 메모리 (0) | 2022.03.19 |
[Assembly Language] 배열과 주소 (0) | 2022.03.18 |
[Assembly Language] 분기문, IA-32 Register (0) | 2022.03.18 |
[Assembly Language] Shift Operation & Logical Operation 시프트 연산과 논리 연산 (0) | 2022.03.17 |
댓글
이 글 공유하기
다른 글
-
[Assembly Language] Data Basic
[Assembly Language] Data Basic
2022.05.23 -
[Assembly Language] Stack Memory 스택 메모리
[Assembly Language] Stack Memory 스택 메모리
2022.03.19 -
[Assembly Language] 배열과 주소
[Assembly Language] 배열과 주소
2022.03.18 -
[Assembly Language] 분기문, IA-32 Register
[Assembly Language] 분기문, IA-32 Register
2022.03.18