2017-03-10 10 views
1

내가 쓴 : 내가 달러 기호가없는 상수 참조는 고유 한 의미입니까?

mov $60, %rax 

이러한 두 통화 사이의 차이가

를 작성해야하지만

mov 60, %rax 

GNU as이 그것을 가능?

+0

"Intel"이라고하는 인간이 선호하는 구문에서는 'mov rax, 60'('$'case in gas) (btw'mov eax, 60'도 똑같이 할 것입니다) vs'mov rax, [60]'(''$''이 없다면) ... 내가 가스/at & t 구문을 왜 싫어하는지 추측하려고 할지도 모른다. – Ped7g

답변

5

예; 첫 번째는 주소 60의 메모리에 저장된 값을로드하고 결과는 rax에 저장하고 두 번째는 즉시 값 60을 rax에 저장합니다.

2

그냥 시도 ...

mov 60,%rax 
mov $60,%rax 
mov 0x60,%rax 


0000000000000000 <.text>: 
    0: 48 8b 04 25 3c 00 00 mov 0x3c,%rax 
    7: 00 
    8: 48 c7 c0 3c 00 00 00 mov $0x3c,%rax 
    f: 48 8b 04 25 60 00 00 mov 0x60,%rax 
    16: 00 

Ewww! 역사적으로 달러 기호는 16 진수 $ 60 = 0x60을 의미했지만 가스도 어셈블리 언어를 망쳐 놓은 역사를 가지고 있습니다 ... 그리고 역사적으로 x86 어셈블리 언어는 60h로 16 진수를 나타낼 수 있었지만 그렇게했을 때 오류가있었습니다.

그래서 달러 한숨이 있거나 없으면 다른 지시를받습니다.

0x8B는 등록 할 레지스터/메모리이며 0xC7은 즉시 등록합니다. 그래서 davmac는 mov 60에 응답했고, % rax는 등록 할 mov 메모리 위치이고, mov $ 60, % rax는 등록 즉시 mov입니다.