AT & T 구문에서 (%eax)의 의미?
-
06-07-2019 - |
문제
당신은 저를 변명해야합니다. 저는 X86 어셈블리에 익숙하고 일반적으로 어셈블리에 익숙합니다.
그래서 내 질문은 다음과 같은 것이 있습니다.
addl %edx,(%eax)
%EAX는 정수에 대한 포인터를 보유하는 레지스터입니다. XP라고합시다
이것은 다음과 같이 말하는 것을 의미합니까? *xp = *xp + %edx
? (%edx
정수입니다)
Addl이 결과를 저장하는 곳은 혼란 스러워요. 만약에 %eax
그렇다면 int에 대한 포인터입니다 (%eax)
그 int의 실제 값이어야합니다. 그렇습니다 addl
결과를 저장하십시오 %edx+(%eax)
안에 *xp
? 나는 누군가가 이것을 나에게 설명하기를 정말로 좋아합니다!
도움이 정말 감사합니다!
해결책
예,이 교육은 당신이 생각하는 일을 정확하게하고 있습니다.
대부분의 x86 산술 지침은 소스와 목적지의 2 개의 피연산자를 사용합니다. AT & T Syntax (여기에서 사용)에서 대상은 항상 올바른 피연산자입니다. 그래서 다음과 같은 지시로 :
addl %edx, %eax
값 edx
그리고 eax
함께 추가되고 결과가 저장됩니다 eax
. 그러나 당신의 예에서 (%eax)
메모리 피연산자입니다. 이것이 AT & T 구문 (NASM 구문의 정사각형 브래킷과 같은)에서 괄호가 의미하는 바입니다.
이것은 그것을 의미합니다 eax
포인터로 취급되므로 오른쪽 피연산자는 eax
, 결과는 동일한 주소로 저장됩니다.
제휴하지 않습니다 StackOverflow