movq 학습내용은 아래에
mov 인스트럭션 - CS:APP 3.4.2
메모리 ↔ 레지스터 ↔ 즉시값(상수) 간 데이터를 복사하는 명령어모든 조작의 기본 단위기본 형태mov[b|w|l|q] S, D ; D S : Source operand (어디서 가져올지)D : Destination operand (어디다 저장할지)가능한
ahpicl.tistory.com
long exchange(long *xp, long y)
{
long x = *xp;
*xp = y;
return x;
}
- 포인터 xp가 가리키는 값을 읽어서 x에 저장
- 그 메모리 위치에 y를 다시 씀
- 원래 있던 값 (x)를 반환
어셈블리 코드
exchange:
movq (%rdi), %rax ; x = *xp → xp는 %rdi에 있음
movq %rsi, (%rdi) ; *xp = y → y는 %rsi에 있음
ret ; return x → 결과는 %rax
[C 메모리] [레지스터] [어셈블리 코드]
------------ -------------- --------------------------
*xp (주소 rdi) ───▶ %rax movq (%rdi), %rax
%rsi (y 값) ─────▶ *xp movq %rsi, (%rdi)
%rax (x 값) ─────▶ 반환 ret728x90
'CS:APP' 카테고리의 다른 글
| 함수는 추상화의 결과다 - CS:APP 3.7 프로시저 호출 (0) | 2025.04.08 |
|---|---|
| 스택은 사실 아래로 자란다(push,pop) - CS:APP 3.4.4 (0) | 2025.04.07 |
| mov 인스트럭션 - CS:APP 3.4.2 (0) | 2025.04.07 |
| 오퍼랜드 식별자(operand specifier 어셈블리의 시작과 끝 - CS:APP 3.4.1 (0) | 2025.04.07 |
| 레지스터가 뭔데 - CS:APP 3.4 (0) | 2025.04.07 |