다른 명령
편집 요약 없음 |
|||
| 10번째 줄: | 10번째 줄: | ||
* 모든 address가 사용되는 것은 아니며, 사용되지 않는 주소값에 접근하면 오류가 발생한다. | * 모든 address가 사용되는 것은 아니며, 사용되지 않는 주소값에 접근하면 오류가 발생한다. | ||
* 각각의 동작하는 프로그램은 private address space를 가지며, 해당 space에는 다른 프로그램이 접근할 수 없다. | * 각각의 동작하는 프로그램은 private address space를 가지며, 해당 space에는 다른 프로그램이 접근할 수 없다. | ||
==Memory Layout== | |||
추후 추가 | |||
==Machine Word== | ==Machine Word== | ||
2025년 5월 15일 (목) 00:13 기준 최신판
상위 문서: 컴퓨터 시스템
개요
memory(메모리)는 개념적으로 a large array of bytes를 의미한다. 이때 각각의 byte는 그에 대한 address를 가지고 있다.[1] 또한 메모리에 있는 데이터는 CPU와 주고받아지며, 이를 통해 프로그램이 메모리에 address를 사용하여 접근할 수 있다. 이때 다음과 같은 특성을 가진다.
- 프로그램은 다수의 byte에 동시에 접근할 수 있다. 예를 들어 0x200에서 시작하는 4개의 bytes 정보들을 로드할 수 있다.
- C에서의 pointer 변수는 address 값을 의미한다.
- 모든 address가 사용되는 것은 아니며, 사용되지 않는 주소값에 접근하면 오류가 발생한다.
- 각각의 동작하는 프로그램은 private address space를 가지며, 해당 space에는 다른 프로그램이 접근할 수 없다.
Memory Layout
추후 추가
Machine Word
컴퓨터는 CPU가 가장 효율적으로 다룰 수 있는 data의 크기인 word size를 가지고 있다. 이는 다음 세가지 중요한 의미를 가진다.
- word size는 CPU의 register 크기이다.
- word size는 CPU와 메모리간에 주고받을 수 있는 data의 가장 큰 data 크기이다.
- word size는 메모지 address의 크기이다.
옛날에는 대부분의 machine은 32-bit word를 사용했다. 따라서 address또한 4byte로 구성되며, 그 범위는 0 ~232-1에 해당한다.[2] 하지만 요즘은 대부분의 machine이 64-bit word를 사용한다. 따라서 address또한 8byte로 구성되며, 그 범위는 0 ~264-1에 해당한다.[3]
Endianness
컴퓨터가 bit들을 저장하는 byte ordering을 endianness라고 한다. 자세한 내용은 endianness를 참조하십시오.
push instruction
push Src는 특정값을 스택에 저장하는 함수이다.
push Src
- Src의 값을 계산한다.(해당 예제에서는 %rax 사용)
- %rsp를 8만큼 감소시킨다.
- %rsp가 가리키는 주소에 src의 값을 저장한다.
이때 %rsp는 스택 포인터이기 때문에, push 연산을 통해서 스택에 접근하여 값을 쓸 수 있다. 예를 들어 %rsp = 0x2000, %rax = 0x10일 때 다음과 같은 코드가 주어진다면,
push %rax
- %rsp는 0x1ff8로 감소하고
- 0x10이 0x1ff8 주소에 저장된다.
pop instruction
pop Reg는 스택에서 값을 꺼내오고, 이를 레지스터에 저장하는 함수이다.
pop Reg
- %rsp가 가리키는 주소에서 값을 읽는다.
- %rsp를 8만큼 증가시킨다.
- 읽은 값을 Reg에 저장한다.
이때 %rsp는 스택 포인터이기 때문에, pop 연산을 통해서 stack에 접근하여 값을 읽을(쓸) 수 있다. 예를 들어 %rsp = 0x2000, 이고 해당 주소에 0x100이 저장되어 있을 때 다음과 같은 코드가 주어진다면,
push %rbx
- %rsp는 0x2008로 증가하고
- %rbx는 0x100이 된다.