다른 명령
편집 요약 없음 |
|||
| 43번째 줄: | 43번째 줄: | ||
# %rsp를 8만큼 증가시킨다. | # %rsp를 8만큼 증가시킨다. | ||
# 읽은 값을 Reg에 저장한다. | # 읽은 값을 Reg에 저장한다. | ||
이때 %rsp는 스택 포인터이기 때문에, pop 연산을 통해서 stack에 접근하여 값을 읽을( | 이때 %rsp는 스택 포인터이기 때문에, pop 연산을 통해서 stack에 접근하여 값을 읽을(쓸) 수 있다. | ||
==각주== | ==각주== | ||
[[분류:컴퓨터 시스템]] | [[분류:컴퓨터 시스템]] | ||
2025년 4월 10일 (목) 01:03 판
상위 문서: 컴퓨터 시스템
개요
memory(메모리)는 개념적으로 a large array of bytes를 의미한다. 이때 각각의 byte는 그에 대한 address를 가지고 있다.[1] 또한 메모리에 있는 데이터는 CPU와 주고받아지며, 이를 통해 프로그램이 메모리에 address를 사용하여 접근할 수 있다. 이때 다음과 같은 특성을 가진다.
- 프로그램은 다수의 byte에 동시에 접근할 수 있다. 예를 들어 0x200에서 시작하는 4개의
- C에서의 pointer 변수는 address 값을 의미한다.
- 모든 address가 사용되는 것은 아니며, 사용되지 않는 주소값에 접근하면 오류가 발생한다.
- 각각의 동작하는 프로그램은 private address space를 가지며, 해당 space에는 다른 프로그램이 접근할 수 없다.
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 연산을 통해서 스택에 접근하여 값을 쓸 수 있다.
pop instruction
pop Reg는 스택에서 값을 꺼내오고, 이를 레지스터에 저장하는 함수이다.
pop Reg
- %rsp가 가리키는 주소에서 값을 읽는다.
- %rsp를 8만큼 증가시킨다.
- 읽은 값을 Reg에 저장한다.
이때 %rsp는 스택 포인터이기 때문에, pop 연산을 통해서 stack에 접근하여 값을 읽을(쓸) 수 있다.