Solution to Problem 4.14

We can see that the instruction is located at address 0x02c and consists of 2 bytes with values 0xb0 and 0x00f.

명령어가 주소 0x02c에 위치해 있으며, 0xb0와 0x00f 값을 가진 2바이트로 구성되어 있음을 알 수 있습니다.

 

Register %rsp was set to 120 by the pushq instruction(line 6), which also stored 9 at this memory location

pushq 명령어(6번째 줄)가 실행되면서 레지스터 %rsp 값이 120으로 설정되었고, 동시에 해당 메모리 위치에 값 9도 저장되었습니다.

 

Stage : 파이프라인 단계

파이프라인 : 물류 체인과 유사한 개념으로, 각각의 작업 단계가 독립적으로 실행되며 결과물을 다음 단계로 전달하는 기능이다.

Generic pop q rA : 일반적인 pop 동작 원리

Specific pop q %rax : 이번 실행에서 실제로 일어난 pop 과정

 

Fetch(명령어 인출 단계) : 메모리에서 명령어를 가져온다. 프로그램 카운터(PC)는 현재 실행 중인 명령어의 주소를 가리키며, Fetch 후 다음 명령어 주소로 증가한다.

Decode(명령어 해석 단계) : 가져온 명령어를 해석하여 어떤 작업을 수행할지를 결정한다.

  • 명령어 Opcode(작업 종류)와 Operand(작업 대상)으로 나뉜다.
  • Opcode(연산 코드) : 명령어가 수행해야 할 작업을 지정한다. ex) ADD(덧셈), LOAD(데이터 읽기), JUMP(분기) 등
  • Operand(피연산자) : 작업 대상 데이터를 지정한다. 데이터는 레지스터, 메모리 주소, 상수 등으로 제공된다.

Execute(명령어 실행 단계) : 해석된 명령어에 따라 ALU(산술 논리 장치)에서 연산을 수행하거나, 데이터를 이동하거나, 분기를 수행한다.

 

Memory Access(메모리 엑세스 단계) : 필요한 경우, 메모리에서 데이터를 가져오거나 저장한다. ex) LOAD(데이터 읽기), STORE(데이터 저장) 명령어가 이 단계에서 수행된다.

 

Write Back(결과 저장 단계) : 명령어로 처리된 데이터(연산 결과)를 레지스터 또는 메모리에 저장한다.

 

PC Update(PC 업데이트) : 현재 명령어 실행이 끝난 후, CPU가 다음에 실행할 명령어의 주소로 프로그램 카운터(PC)를 업데이트한다.


범용 레지스터 : 값을 담는 용도. 연산 결과, 변수 값, 주소 등 '일반 데이터'를 담는 용도.

ex) rax, rbx, rcx, rdx, rsi, rdi, r8 ~ r15

 

스택 포인터 레지스터 : 함수 호출, 지역 변수, push/pop, return 주소 관리

%rsp :  현재 스택의 맨 위 주소(TOP 주소)

pushq %rax    // rsp감소

popq %rbx      // rsp증가