[c] AT & T와 비교 한 인텔 어셈블리 구문의 한계 [닫힘]

나에게 인텔 구문은 훨씬 읽기 쉽습니다. 인텔 구문에만 집중하는 어셈블리 포리스트를 탐색하면 놓친 것이 있습니까? AT & T로 전환하고 싶은 이유가 있습니까 (다른 사람의 AT & T 어셈블리를 읽을 수있는 것 외에)? 내 첫 번째 단서는 gdb가 기본적으로 AT & T를 사용한다는 것입니다.

이것이 중요하다면, 내 초점은 모든 관계 어셈블리와 구문이 Linux / BSD 및 C 언어에있을 수 있습니다.



답변

하나는 다른 것보다 이점이 없습니다. Intel 구문이 훨씬 읽기 쉽다 는 데 동의합니다 . AFAIK, 모든 GNU 도구에는 Intel 구문을 사용하는 옵션도 있습니다.

다음과 같이 GDB가 Intel 구문을 사용하도록 할 수 있습니다.

분해 풍미 정보 설정

GCC는 -masm=intel.


답변

GNU 어셈블러 (GAS)의 기본 구문은 AT & T입니다. 인텔 구문은 비교적 새로운 추가 기능입니다. Linux 커널의 x86 어셈블리는 AT & T 구문입니다. Linux 세계에서는 일반적인 구문입니다. MS 세계에서는 Intel 구문이 더 일반적입니다.

개인적으로 저는 AT & T 구문을 싫어합니다 . Intel 구문을 지원하는 GAS와 함께 많은 무료 어셈블러 (NASM, YASM)가 있으므로 Linux에서 Intel 구문을 수행하는 데 문제가 없습니다.

그 외에도 구문상의 차이 일뿐입니다. 둘 다 결과는 동일한 x86 기계어 코드입니다.


답변

하나는 다른 것보다 이점이 없습니다. 인텔의 구문은 훨씬 더 쉽게 읽을 수 비록 개인적 때문에, 동의 내가 인텔 구문을 싫어한다 . AFAIK, 모든 GNU 도구에는 Intel 구문을 사용하는 옵션도 있습니다.

at&t noprefix                   intel
mov eax, -4(ebp,edx,4)          mov DWORD PTR[-4 +ebp +edx *4], eax
mov eax, -4(ebp)                mov DWORD PTR[-4 +ebp], eax
mov edx, (ecx)                  mov DWORD PTR[ecx], edx
lea (   ,eax,4), eax            lea eax, DWORD PTR[8 + eax*4]
lea (eax,eax,2), eax            lea eax, DWORD PTR[eax*2+eax]

… 더 복잡한 명령으로 인해 더 복잡해집니다.

‘그런가 말했다.

추신 :이 답변은 주로 다른 답변의 약점을 강조하기 위해 존재합니다. 실제로 답변이 아니라 의견입니다. 물론이 대답은 실제로 내 겸손한 의견 일뿐입니다.

PPS : 저는 Intel 구문을 싫어하지 않고 상관하지 않습니다.


답변

동일한 기계 코드로 컴파일되고 동일한 opcode를 갖는다는 점에서 “동일한 언어”입니다. 반면에 GCC를 사용한다면 AT & T 구문을 배우고 싶을 것입니다. 기본값-컴파일러 옵션 등을 변경하지 않고 가져옵니다.

나도 Intel-syntax x86 ASM (DOS에서도)에 대해 이빨을 자르고 C / UNIX로 전환 할 때 처음에는 더 직관적이라는 것을 알았습니다. 하지만 일단 AT & T를 배우면 쉽게 보일 것입니다.

그렇게 많이 생각하지는 않겠습니다. 인텔을 알게되면 AT & T를 배우는 것은 쉬우 며 그 반대도 마찬가지입니다. 실제 언어는 구문보다 머리 속에 들어가기가 훨씬 더 어렵습니다. 그러니 반드시 하나에 집중하고 다른 하나가 나올 때 배우십시오.


답변

사용중인 모든 것에 기꺼이 적응할 의사가 있다는 것은 전문성의 표시입니다. 둘 중 하나에 실질적인 이점이 없습니다. 인텔 구문은 Microsoft 세계에서 일반적이며 AT & T는 Linux / Unix의 표준입니다. 어느 쪽에게도 이점이 없기 때문에 사람들은 처음 본 것이 무엇이든 각인하는 경향이 있습니다. 즉, 전문 프로그래머는 그런 것 이상을 제기합니다. 직장이나 작업중인 도메인에서 사용하는 모든 것을 사용하십시오.


답변

인텔 구문은 모든 것을 다룹니다 (어셈블러 / 디 어셈블러가 최신 정크 인텔이 명령어 세트에 추가 된 최신 상태라고 가정). at & t가 동일하다고 확신합니다.

at & t 인텔
movl -4 (% ebp, % edx, 4), % eax mov eax, [ebp-4 + edx * 4]
movl -4 (% ebp), % eax mov eax, [ebp-4]
movl (% ecx), % edx mov edx, [ecx]
leal 8 (, % eax, 4), % eax lea eax, [eax * 4 + 8]
leal (% eax, % eax, 2), % eax lea eax, [eax * 2 + eax]

… 더 복잡한 명령으로 인해 더 복잡해집니다.

‘그런가 말했다.


답변

내 첫 번째 어셈블리 언어는 MIPS 였는데, ATT 구문과 매우 유사하다는 것을 알았습니다. 그래서 저는 ATT 구문을 선호하지만 읽을 수있는 한 그다지 중요하지 않습니다.