목표를 재고 할 것을 강력히 권장하며 그 이유는 다음과 같습니다.
나는 BBC 마이크로 컴퓨터에서 6502 어셈블리 언어를 처음 배웠다 (모델 B, 32K). 매크로 어셈블러가 포함 된 멋진 BASIC 구현이있었습니다. 우리는 학교에 그들을 가지고 있었기 때문에 기계를 10 분 동안 사용하지 않은 경우 각 스크린을 가로 질러 각 스크린을 가로 질러 걷는 Lemming을 만들기 위해 직접 스크린 버퍼 조작과 같은 모든 종류의 장난스러운 프로그램을 작성했습니다. . 7 학년 친구들 사이에 낄낄 거림이 생겼습니다.
집에서 Commodore 64를 받았을 때 6502 어셈블리 언어를 실행하는 6510 CPU가 있지만 흥미로운 추가 기능이 있다는 것을 알게되었습니다. 나는 어셈블러를 구입하고 ( 카트리지에 와서 ) BASIC을 통해 프로그램을 호출해야했습니다. 베스트셀러 게임을 제작한다는 웅대 한 비전으로, 결국 펑키 한 칩 음악으로 애니메이션되는 흥미로운 색상 막대 효과를 수행하기 위해 비디오 디스플레이 하드웨어 레지스터를 인터럽트하여 비트 트위스트 된 여러 데모를 만들었습니다. 인상적이지만 유용하지는 않습니다.
그런 다음 ARM2 CPU가있는 Acorn Archimedes A310을 얻었으므로 BBC Micro (동일한 유산)와 같은 내장 매크로 어셈블러와 동일한 멋진 BASIC 구현을 사용했습니다. 나는 예술적인 친구가 그래픽을 제공 한 몇 가지 게임과 정현파 기반의 트리 피 데모를 만들었습니다. 이 두 가지 모두 프로그래밍하기가 어려웠으며 잘못된 코드는 시스템을 다운시킬 수 있으며 (실수로 하드웨어 리셋 레지스터 트립 등) 저장하지 않은 경우 모든 것을 잃어 버릴 수 있습니다 (플로피로!).
대학에서 저는 C ++과 C에 대해 소개했습니다.이를 사용하여 Sun / Solaris 및 다른 대형 메인 프레임 컴퓨터를 프로그래밍 할 수있었습니다. 이 머신들이 어떤 CPU 아키텍처를 사용했는지 전혀 모른다. C ++ 툴이 전문 애플리케이션을 만드는 데 필요한 힘을 줬기 때문에 어셈블러를 사용하거나 머신 코드를 읽을 필요가 없었다.
Uni 후, 나는 Windows와 여러 가지 유닉스를 작업했습니다. C와 C ++는이 모든 머신에서 작동했으며 결국 Java도 마찬가지였습니다.
그런 다음 디버깅을 위해 포괄적 인 툴 체인과 함께 DirectX와 함께 C ++을 사용하여 Windows와 Dreamcast에서 작업했습니다.
그런 다음 스마트 TV 용 ARM 기반 칩셋 (2000 년)으로 작업했습니다. ARM2에 대한 나의 경험이 여기에 관련되었을 수도 있지만 작업은 C 기반이었습니다. 아르키메데스에서 수행 한 하드웨어에 대한 모든 파킹은 간단한 비트 트위들 링 작업을 사용하여 C에서도 수행 할 수 있음을 발견했습니다. 저의 역할 중 하나는 코드베이스를 Windows, Playstation 2, Linux, 기타 TV 및 모바일 칩셋으로 마이그레이션하는 것이 었습니다. 이러한 모든 플랫폼은 C 컴파일러 (일반적으로 GCC)와 기본 시스템에 쓰는 일부 수준의 API와 함께 사용할 수있었습니다. 임베디드 세계는 거의 커널 O / S가 아닙니다. 부트 로더와 미니 BIOS를 작성하는 것 이상의 특정 플랫폼에 대한 전체 머신 코드를 알 필요가 없었습니다. 둘 다 가능한 첫 기회에 C 코드로 뛰어 들었습니다 (트랩 벡터를 설정 한 후,
다음 작업은 Windows에서 C ++, C # 및 JavaScript를 사용하는 작업이었습니다. 기계 코드가 없습니다.
현재는 C ++, JavaScript, Python, LUA, HTML 및 다양한 플랫폼에서 다른 언어로 작업하고 있습니다. 이 플랫폼이 어떤 기계 코드를 실행하는지 알 필요가 없습니다. 컴파일러는 코드를 필요한대로 변환합니다. 충돌이 발생하면 디버거 또는 런타임 진단 (예외, 신호 등)을 통해 오류가 발생합니다.
재미를 위해, 나는 집에있는 적은 여가 시간에 iOS 애플리케이션을 개발합니다. Objective-C와 여러 칩셋에서 작동하는 API를 사용합니다. 분명히 그들은 ARM 기반이지만 개발에서 어떤 기계 코드도 보지 못했습니다.
어셈블리 언어를 배우는 것은 매우 흥미 진진한 일이지만 이제는 더 높은 수준의 도구와 언어를 사용하여보다 규모가 큰 (또는 두 가지) 생산성을 높일 수 있습니다.
놀라운 어셈블리 언어 / 기계 코드 프로그래머가 이용할 수있는 직업 기회는 JavaScript, Java, C #, C ++ 또는 ObjC와 비교할 때 아주 적습니다.
나는 이것이 당신이 주요 목표가 아닌 취미 / 측면 관심사로 만들 것을 권합니다.