작은 데모의 상세한 설명
<span style="font-size: 18px;">C :</span>
int exchange(int *xp, int y)
{
int x = *xp;
*xp = y;
return x;
}
오늘은 주로 mov의 지령을 봤기 때문에 프로그램 내의 두 변수로 전환된 조작에 따라 어셈블리 언어에 비치는 상황을 이야기합니다...오늘 막 편집물에 발을 들여놓으면 언제든지 물에 빠져 죽을 것 같은 느낌이 든다...(너무 추상적이어서 나무가 있다)
어셈블리 코드는 다음과 같다.
xp at %ebp + 8
y at %ebp + 12
이것은 어셈블리 코드 안의 두 주석이다. 즉, xp와 y라는 두 변수는 각각 이 두 메모리 주소에 존재한다는 뜻이다. 사실 이 두 변수가 주소 찾기 형식으로 바뀌면 8(%ebp)12(%ebp)로 바뀌어야 한다. 이 두 내용은%ebp+8,%ebp+12와 똑같아야 한다.모두 두 변수의 주소이다
movl 8(%ebp), %edx
movl (%edx) , %eax
movl 12(%ebp), %ecx
movl %ecx. (%edx)
처음에는 사실 잘 이해하지 못했는데 주로 (%ebp)라는 것을 몰랐기 때문에 나중에 책을 뒤져서 알게 되었다. 이것은 주소 찾기 조작을 의미하고 값이 ebp 레지스터에 저장된 값의 메모리 주소를 찾는 것이다.
첫 번째 명령은 xp를%edx라는 레지스터에 주었다는 것입니다. 그러나 이 때의 xp의 값은 주소입니다.
두 번째 명령은 M[%edx]->%eax 같은 조작을 실행하여 *xp를%eax에게 전송합니다
세 번째 지령은 첫 번째 지령과 같아서 y의 값을ecx라는 레지스터에 전송한다
네 번째 지령도 y의 값을 x값이 있는 메모리 영역에 전송하고 x의 값을 덮어쓰는 것을 잘 알고 있다.
어쨌든 어셈블리가 쉽지 않아요. 제가 닦을게요. 바로 제가 이 블로그를 쓸 때 몇 번이나 빙빙 돌면서 기절했어요...CSAPP, 이 책은 정말 보기 힘들다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.