2012-02-20 3 views
0

저는 초보 프로그래머이고 어셈블리 언어로 시작하려고 합니다만, X86 프로세서 제품군을위한 어셈블리는 새로운 현대 프로세서에 익숙합니까?어셈블리 64 비트 플랫폼 용

+1

정말로 mips와 같은 것으로 시작해야합니다. x86과 x86-64는 거의 복잡합니다. –

+1

실제로 어셈블리 언어로 시작하고 싶지는 않습니다. 높은 수준에서 아래로 작업하십시오. –

+0

C++에 대해서는 좋은 생각을 가지고 있습니다.하지만 절대로 마음에 들지 않습니다 ... 하드웨어에 좀 더 가까이 가고 싶습니다 ...... X86 프로세서 용 어셈블리를 배운다면 (나만 사용할 수 있습니다) 최신 프로세서에서 작동합니까? – user1222007

답변

2

필자의 의견으로는 실제로 x86 32 비트 어셈블리로 시작하는 것이 더 좋으며 리소스가 훨씬 낫다. 당신은 여전히 ​​x64와 동일한 기초 지식을 배우게 될 것이므로 느슨하게하지 않을 것입니다 (x86-64는 단순히 x86 명령어 세트와 아키텍처의 확장 일뿐입니다).

x86-64 프로세서는 (적어도 운영 체제 수준에서 WOW64와 같은 것을 사용하여) 32 비트 어셈블리를 실행할 수 있으므로 환경을 변경할 필요도 없습니다. 단지 fwe 중요한 일을 - 64까지 이동

은 알고 있어야합니다 : 호출 규칙에

  • 더 레지스터
  • 주요 변경 (와 ABI는 시스템 V 등을 볼 수있는 AMD64 ABI의 64에 대한) 어떻게 시스템 호출에
  • 변경이 만들어
  • 공간이이
  • segement의
  • 손실을 해결 RIP는 이리저리 떨어져 등록
  • 더 많은 주소 m GS는 & FS
  • REX.W는

가 빠른 다른 몇 가지 변화가 있습니다 주소 강제 64 비트에 대한 접두사, 그러나 이들은 모두 훌륭한 자원 인 인텔이나 AMD 시스템 아키텍처 설명서에서 입수 할 수있다 32 & 64 비트 개발.

'현대 프로세서'로 작업 할 때 대부분의 데스크탑 및 노트북 프로세서는 x86 기반이며 모두 64 비트 & 32 비트 호환이 가능하므로 배우는 어셈블리가 최신 프로세서에서 작동하는지 정말 걱정할 필요가 없습니다 때문에. 이러한 우려가 제기 될 수있는 유일한 경우는 공급 업체별 지침이 포함되어 있거나 ARM 또는 SPARC와 같은 x86 계열이 아닌 프로세서로 작업해야하는 SSE 및 AXV와 같은 확장 프로그램을 사용하는 경우입니다.

2

이것은 다소 주관적입니다. x86 아키텍처에는 아무런 문제가 없습니다. 그것은 큰 성공을 거두었으며 어셈블러, 디버거, 에뮬레이터 및 책을 찾는 데 아무런 문제가 없습니다. 선택한 특정 버전에 대해 선택적 비트를 선택해야하며, x86 코어는 16 비트, 32 비트 및 64 비트 코드를 실행할 수 있습니다. 그것의 근속 기간에 대한 유언. 각각 다른 어셈블리 코드를 작성합니다. 올해 인도에서는 인기가있는 16 비트 모드에 쉽게 적응할 수 있지만, 16 비트 운영 체제는 박물관의 인공물이기 때문에 전혀 관련이 없습니다.

하지만 궁극적으로 중요하지 않습니다. 특정 종류의 어셈블리를 마스터하면 다른 모든 어셈블리를 처리하는 방법을 알게됩니다. 처음에 속도를 높이려면 몇 달이 걸릴 것입니다. 다음은 몇 주 걸립니다.

실용적인 교훈은 여기 입니다. 시간 낭비입니다. 아무도 실제로 기계 코드를 쓰지 않습니다. 현대 코어에 대한 빠른 코드 작성은 코어가 실제로 어셈블리 코드를 직접 실행하지 않기 때문에 엄청나게 어렵습니다. 하드웨어 컴파일러가 내장되어있어 칩에 내장 된 네이티브 실행 엔진을 위해 기계 코드를 마이크로 연산 명령어로 변환합니다.방법은보다 많은 레지스터를 지원하며, 병렬로 명령을 실행하고 메모리 액세스 지연을 줄이기 위해 캐시가있는 여러 기능 장치가 있습니다.

nderaging 하드웨어의 기본 규칙을 최적화하는 코드를 생성하는 기계가 필요합니다. 또한 C 컴파일러의 코드 생성 단계에 내장 된 소프트웨어입니다.

+0

** 필기 ** 조립을 배우는 것이 시간 낭비 일 수 있다는 것에 동의합니다. 즉, ** 어셈블리를 읽을 수 있다는 것은 귀중한 기술입니다 (성능 분석, 디버깅, 바이너리 작업 등). IMHO 거의 모든 프로그래머는 적어도 레지스터, 스택, 호출 규칙 등과 같은 어셈블리 수준 개념에 대한 기본적인 이해의 이점을 누릴 수 있습니다. –

+0

@Igor - 동의. 제 답변에서 가장 중요한 점은 '특정 종류의 어셈블리를 마스터 할 때'입니다. –

+0

IMHO를 쓰는 것은 항상 읽기보다 쉽습니다. 특히 몇 시간이 지나면 더 좋습니다. – hirschhornsalz

0

첫 번째 어셈블리로 x86 어셈블리를 배우지 않는 것이 좋습니다. 이는 여러 가지 이유로 매우 추악한 명령어 세트입니다.

많은 명령어 세트 시뮬레이터가 있습니다. http://github.com/dwelch67.

thumbulator, thumb은 현재 ARM 명령어 집합의 하위 집합으로, 가장 이동식 팔 명령 집합 (거의 모든 ARM 코어에서 작동 함)입니다. 직각, 직선 등 나쁜 첫 번째 명령 집합.

msp430sim 나는 그것이 msp430 시뮬레이터라고 생각한다. 멋지고 간단한 명령어 세트, 매우 깨끗하고 직설적이다. 좋은 첫 번째 명령 집합.

avr 시뮬레이터는 내가 잘 테스트 한 것이 아니므로 잠시 떨어져 있어야합니다. 나쁜 명령어 세트가 아니라 msp430이 아마도 가장 좋았을 것입니다.

나는 어셈블러 학습을 위해 만들어진 lsasim을 자체적으로 설정했습니다. 시도 할 수있는 자습서가 있습니다.

정말로 정말로 x86을 배워야한다고 생각한다면 인텔의 근원으로 돌아가서 8088/8086으로 시작하는 것이 좋습니다. 필자는 pcemu 에뮬레이터를 포크하고 BIOS 호출을 찢어서 지침 집합 시뮬레이터 만 사용하도록 배웠습니다. 지침을 배우려면 바로 asm을 배우는 이유, 어셈블리 언어를 먼저 배우고 BIOS를 배우려면 bios 나중에 전화.

최근에 opencores에서 앰버 arm2 프로세서 포크를 추가했습니다. Verilator로 실행 시켰습니다. 모든 하드웨어 또는 비싼 시뮬레이터를 사용하지 않고도 실행할 수 있다는 것은 모든 무료 도구와 함께 작동한다는 것입니다. ARM2는 오늘날 널리 사용되는 ARM 프로세서 제품군의 선구자입니다. arm2 명령어 세트를 배우면 ARM 제품군보다 현저한 명령어 세트가 아니라 x86 명령어보다 훨씬 뛰어날 수 있지만 각 명령어를 사용할 수있는 많은 지침과 방법이 있으므로 처음에는 다루기 힘들다.

amber/arm과 thumbulator는 gcc 크로스 컴파일러에서 쉽게 사용할 수 있습니다. msp430 및 avr gcc 파생 상품을 찾거나 지침을 따르면 gcc 파생 상품을 만들 수 있습니다.

전혀 프로그래밍 기술이 없다면 배우기 python 어려운 방법 튜토리얼로 시작하는 것이 좋습니다. 그것은 어렵지 않습니다. 단단한 부분은 단지 그가 당신에게해야 할 일을하고, 싸우지 말고 그냥 타이핑하고 실행 한 다음 그 일이 무엇인지 찾아냅니다. 일단 당신이 몇 가지 기본적인 프로그래밍 기술을 내 lsasim 튜토리얼에서 30 분 정도 보내면, 몇 가지 기본 사항에 젖어보십시오. 그런 다음 다른 사람 msp430 또는 엄지 손가락 중 하나를 선택하고 x86을 사용하십시오. 처음 몇 가지, 정상적인 명령어 세트를 시도한다면 x86은 다소 사소한 것입니다. 먼저 x86을 시도하면 고통 스러우며 다른 명령어 세트로 이동하기 위해서는 몇 가지 기본 사항을 다시 배워야 할 것입니다. x86 하드웨어가 있다고해서 반드시 학습용으로 사용해야한다는 것을 의미하지는 않습니다. 그것도 시작하기가 어렵습니다. 무슨 일이 일어나고 있는지 보려면 시뮬레이터를 사용하십시오. Espress는 호박색 arm2 코어입니다. 어셈블리를 알게되면 각각의 프로그래밍 언어, 어셈블리 또는 기타는 구문의 문제 일뿐입니다 ...

관련 문제