Memory Structure 메모리의 구조

http://www.tcpschool.com/c/c_memory_structure

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

https://jinshine.github.io/2018/05/17/%EC%BB%B4%ED%93%A8%ED%84%B0%20%EA%B8%B0%EC%B4%88/%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0/

 

[컴퓨터 기초] 메모리구조(Memory Structure) - jinShine

프로그램 실행 순서 메모리 영역에 관해 이야기하기 전에 어떤식으로 프러그램이 실행되는지 과정을 살펴 보겠습니다. 프로그램의 정보를 읽어 메모리에 로드되는 과정을 보실 수 있으실텐데,

jinshine.github.io

https://hyunable.github.io/2018/01/15/CS-memory/

 

메모리 저장구조 및 관리 - 현아의 IT Playground

 

hyunable.github.io

 

Stack Frame 스택 프레임

http://www.tcpschool.com/c/c_memory_stackframe

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

 

 

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
70
71
72
73
%include "io64.inc"
 
section .text
global CMAIN
CMAIN:
    mov rbp, rsp; for correct debugging
 
    ; 스택 메모리, 스택 프레임
    
    ; 레지스터는 다양한 용도로 사용
    ; - a b c d 범용 레지스터
    ; - 포인터 레지스터 (포인터 = 위치를 가리키는!)
    ; -- ip (Instruction Pointer) : 다음 수행 명령어의 위치
    ; -- sp (Stack Pointer) : 현재 스택 top 위치(일종의 cursor)
    ; -- bp (Base Pointer) : 스택 상대주소 계산용
    
    ;--------------------------
    ;push 1
    ;push 2
    ;push 3
        
    ;pop rax
    ;pop rbx
    ;pop rcx
    ;--------------------------
    
    push rax ;rax값 임시저장
    push rbx ;rbx값 임시저장
    push 1
    push 2
    call MAX
    PRINT_DEC 8, rax
    NEWLINE
    add rsp, 16
    pop rbx ;rbx값 복원
    pop rax ;rax값 복원
    
    xor rax, rax
    ret
    
MAX:
    push rbp
    mov rbp, rsp
    
    mov rax, [rbp+16]
    mov rbx, [rbp+24]
    cmp rax, rbx
    jg L1
    mov rax, rbx
L1: 
    pop rbp
    ret            
     
    ; [!] 스택(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