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 구문을 선호하지만 읽을 수있는 한 그다지 중요하지 않습니다.
참고 URL : https://stackoverflow.com/questions/972602/limitations-of-intel-assembly-syntax-compared-to-att
'programing' 카테고리의 다른 글
키 스키마의 속성 수는 속성 정의에 정의 된 속성 수와 일치해야합니다. (0) | 2020.10.09 |
---|---|
Xcode 8 자동 생성 빠른 도움말 문서 (0) | 2020.10.09 |
쉘 스크립트의 전역 환경 변수 (0) | 2020.10.09 |
다시 시작해도 중단되지 않도록 Docker 컨테이너 간의 연결을 어떻게 설정합니까? (0) | 2020.10.08 |
Docker가 이미 Docker 레지스트리 서버에 로그인되어 있는지 확인하는 방법 (0) | 2020.10.08 |