어셈블리를 배우기위한 좋은 스타터 마이크로 프로세서 란 무엇입니까?


19

그래서 MP에서 Assembly를 먼저 배우고 나서 C로 넘어 가고 싶습니다 (대부분이 사용하는 것처럼 보입니다).

임베디드 프로그래밍에 들어가고 싶습니다. 저는 C 레벨 (Linux 용 커널 / 모듈은 주로 내가 한 일입니다)을 좋아하지만 그보다 낮은 레벨을 프로그래밍 할 수 있다는 아이디어를 좋아합니다 (마이크로 컨트롤러 / 마이크로 프로세서).

Arduino에 대해 알고 있으며 훌륭하지만 모두 Assembly와 함께 사용할 수있는 많은 리소스를 찾을 수 없습니다. Atmel AVR은 매우 유명하고 저렴하지만 실제 하드웨어 부분 (브레드 보드 등에 연결)과 관련하여 많은 정보를 찾지 못했습니다.

여러분 / 갈리아 사람들이 알고있는 제안 / 정보 또는 자료는 알려주십시오.

편집 : 다른 것 : 내가 읽은 모든 마이크로 프로세서 서적 (보통 AVR)이 마이크로 프로세서 자체에 대해 이야기하고 프로그래밍하는 것처럼 보입니다. 그러나 아직 모든 구성 요소 (마이크로 프로세서, 메모리, 전원 등)를 직접 설치하는 방법에 대한 책을 아직 보지 못했습니다. 내가 사업을 할 수있는 어떤 것을 찾을 수 있다면. (나는 처음부터 배우고 싶다.) 말할 것도없이 나는 당신이 그들 사이에 어떻게 의사 소통 할 것인지 전혀 모른다.


3
다른 곳으로 보내 드리는 것을 싫어하지만 AVR에 관심이 있으시면 AVRfreaks.net 에 대해 알아야 합니다.
Kevin Vermeer

나중에 야 AVR에 기대어 ... 주로 그들에 대한 너무 많은 정보 때문에 그들은 TI-MPS430보다 훨씬 저렴합니다 ...

2
AVR은 애호가들에게 인기가 있지만 비용 데이터를 어디서 구할 수 있는지 잘 모르겠습니다. 두 가족 모두 1 달러 미만의 상품과 20 달러를 추진하는 상품이 있습니다.
케빈 베르메르

음 ..... MPS430을 살펴볼 때 개발 보드에 추가 할 때 소프트웨어 (디버거 등)가 약간 비싸게 보였습니다.

1
초보자라면 내 조언은 MSP430을 선택하지 않습니다. 공식 도구는 훌륭하지만 온라인에서 무료로 제공되는 무료 지원은 PIC / AVR과 일치하지 않습니다
Toby Jaffey

답변:


14

나는 대학에서 68HC11을 배웠다. 그것들은 작업하기가 매우 간단하지만 솔직히 대부분의 저전력 마이크로 컨트롤러는 비슷합니다 (AVR, 8051, PIC, MSP430). 마이크로 컨트롤러에 대한 ASM 프로그래밍에 복잡성을 더하는 가장 큰 것은 지원되는 메모리 어드레싱 모드 의 수와 유형입니다 . 고급 ARM 프로세서와 같이 더 복잡한 장치는 먼저 피해야합니다.

아마도 MSP430을 좋은 출발점으로 추천 할 것입니다. C로 프로그램을 작성하고 다양한 기능을 인라인 어셈블리로 대체하여 배울 수 있습니다. 간단한 시작, x + y = z 등

함수 또는 알고리즘을 어셈블리로 교체 한 후 코드 작성 방법과 C 컴파일러가 생성 한 내용을 비교하고 대조하십시오. 이것은 아마도 내 의견으로는 어셈블리를 배우는 더 좋은 방법 중 하나이며 동시에 임베디드 프로그래머로서 매우 가치있는 컴파일러의 작동 방식에 대해 배우십시오. 처음에 C 컴파일러에서 최적화를 끄십시오. 그렇지 않으면 컴파일러가 생성 한 코드에 혼동 될 수 있습니다. 점차적으로 최적화를 켜고 컴파일러의 기능을 확인하십시오.

RISC 대 CISC

RISC는 'Reduced Instruction Set Computing'을 의미합니다. 특정 명령어 세트가 아니라 CPU에 최소 명령어 세트가 있다는 설계 전략만을 의미합니다. 각각 기본적인 것을하는 지시는 거의 없습니다. 'RISC가되기 위해'필요한 것에 대한 엄격한 기술적 정의는 없습니다. 반면에 CISC 아키텍처에는 많은 명령이 있지만 각각 '더 많은 일'을합니다.

RISC의 목적 상 장점은 CPU 설계에 더 적은 트랜지스터가 필요하다는 것인데, 이는 더 적은 전력 사용 (마이크로 컨트롤러의 경우), 제조 비용이 저렴하고 클럭 속도가 높을수록 성능이 향상된다는 것을 의미합니다. CISC 아키텍처의 설계 개선 결과 더 낮은 전력 사용과 저렴한 제조가 일반적으로 사실이며 더 큰 성능은 목표에 미치지 못합니다.

오늘날 거의 모든 CPU 코어는 RISC 또는 '중간'설계입니다. 가장 유명한 (또는 악명 높은) CISC 아키텍처 인 x86에서도 마찬가지입니다. 최신 x86 CPU는 내부적으로 RISC와 같은 코어로 프런트 엔드에 볼트로 고정되어 x86 명령어를 여러 RISC와 같은 명령어로 분류합니다. 인텔은 이것을 '마이크로 옵스'라고 부릅니다.

어셈블리에서 배우기 쉬운 (RISC vs CISC)에 관해서는, 나는 그것을 던질 것이라고 생각합니다. RISC 명령어 세트로 작업을 수행하려면 일반적으로 CISC 명령어 세트로 동일한 작업을 수행하는 것보다 더 많은 어셈블리 라인이 필요합니다. 반면 CISC 명령어 세트는 사용 가능한 명령어 수가 많기 때문에 배우기가 더 복잡합니다.

CISC가 나쁜 이름을 갖는 대부분의 이유는 x86이 지금까지 가장 일반적인 예이며 작업하기에 약간의 엉망이기 때문입니다. 필자는 x86 명령어 세트가 매우 오래되어 이전 버전과의 호환성을 유지하면서 수십 배 이상 확장 된 결과라고 생각합니다. 4.5Ghz 코어 i7조차도 286 모드에서 실행할 수 있습니다 (부팅시 수행).

ARM이 RISC 아키텍처 인 경우에는 적당히 논쟁의 여지가 있다고 생각합니다. 확실히로드 저장소 아키텍처입니다. 기본 명령어 세트는 RISC와 비슷하지만 최근 개정에서는 명령어 세트가 개인적으로 RISC와 CISC 사이의 중간 정도라고 생각할 정도로 상당히 커졌습니다. Thumb 명령어 세트는 실제로 ARM 명령어 세트 중 가장 'RISCish'입니다.


@Mark-ARM은 또한 RISC 프로세서이며 명령어 세트는 그렇게 나쁘지 않습니다. 실제로 아주 훌륭하게 디자인되었습니다. 사용자 공간과 커널 공간의 차별화 및 기타 복잡성에 대한 몇 가지 지침이 있지만 시작하는 동안 무시할 수 있습니다.
케빈 베르메르

1
@reemrevnivek 나는 ASM을 시작할 때 여러 프로세서 모드와 MMU를 다루는 복잡성에서 벗어나 그를 더 많은 노력을 기울였습니다. 고급 ARM SoC의 초기화 및 설정도 AVR / PIC / MSP430과 같은 것보다 훨씬 더 복잡합니다.
Mark

RISC? 그 점과 다른 점의 차이점을 이해하지 못하는 것이 확실합니까? 대부분의 마이크로 컨트롤러 RISC가 아닙니까? 올바른 명령 세트가 적다는 의미입니까?

1
@sauron 나는 대답 re : RISC vs CISC에 추가했습니다.
Mark

AVR / PICS와 같은 것이 보통 RISC입니까, CISC입니까?

8

명령어 수가 줄어들어 8 비트 PIC 마이크로 컨트롤러가 최선의 선택이라고 생각합니다.

명령 수가 줄어든 부작용은 명령이 더 많은 다른 마이크로 컨트롤러와 비교하여 휠을 재창조해야한다는 것입니다.

그러나 PIC를 배우고 나면 다른 마이크로 컨트롤러로 마이그레이션하여 더 적합한 것이 무엇인지 확인할 수 있습니다.


이것이 내가 지금 연구하고있는 것이므로 완전히 동의하지는 않지만 8, 16 및 32 비트 코어는 완전히 다른 asm 전략을 가지고 있습니다.
Grady Player

7

68HC11에 대한 Mark의 제안과 유사하게, Freescale 68HCS08 제품군 의 명령 세트 는 Motorola 6809의 축소 버전으로, 당시 가장 깨끗한 8 비트 명령 세트 중 하나를 가지고 있다고 생각했습니다. 스위치, LED, 3 축 가속도계 및 피에조 버저가 포함 된 개발 보드를 $ 79에 구입할 수 있습니다 .


S08이 HC11에 비해 줄어든 레지스터의 수는 스택이 무엇이든 할 필요가 있기 때문에 (앞으로 HC11과 함께 내 학습에서 가르쳐 졌거나) 12))). 확장에 의해 AVR은 스택에 대해 걱정하기 전에 32 개의 레지스터를 가지고 있기 때문에 정말 좋습니다.
Nick T

실제로 병목 현상이 발생할 수 있지만 단일 누산기의 단순함을 좋아합니다. 임시 변수에 스택을 사용하는 대신 먼저 짧은 명령으로 액세스 할 수있는 144 바이트의 직접 페이지 변수를 사용하는 것이 더 간단하다는 것을 알았습니다 (다른 112 바이트의 직접 페이지는 I / O 레지스터에 사용됨). 재진입 및 재귀 루틴을 허용하는 스택 사용은 나중에 배울 수 있습니다.
tcrosley

HC (S) 08이 HC05에서 파생되지 않았습니까?
Johan.A

@ Johan.A 예, 당신은 절대적으로 맞습니다. HCS08은 HC05의 향상된 버전입니다. 나는 그것을 언급 했어야했다. 나는 유도가 6800-> 6801-> 6805-> HC (S) 08과 같은 것이라고 생각합니다. 6805 용 어셈블리 코드를 많이 작성했습니다. HCS08을 6809와 비교하여 68HC11 (대략 6809의 마이크로 컨트롤러 버전)에 대한 다른 의견과 연계했습니다.
tcrosley

4

msp430 명령어 세트는 어셈블러를 학습하는 데 적합합니다. x86을 피하십시오. Arm은 또 다른 좋은 방법이지만 더 많은 명령과 옵션이 있으며 첫 번째 명령 세트로 가장 적합하지 않을 수 있습니다. Thumb은 arm 명령어 세트의 하위 세트이며 나쁘지 않습니다 .github에는 프로세서와 메모리 만 있고 엄지 손상 인 Thumb 에뮬레이터 (thumbulator)와 msp430 에뮬레이터 (thumb one만큼 테스트되지 않음)가 있습니다. , 진행 상황을 잘 파악할 수 있습니다. 대안은 예를 들어 가시성이 있지만 도달하기가 훨씬 어려운 qemu 일 것입니다 .qemu와 같은 솔루션과 마찬가지로 작동하는 것이 있는지 알아 내기 전에 많은 작업이 필요합니다.
mspgcc4.sf.net으로 이동하여 툴체인 및 / 또는 스톡 llvm과 함께 스톡 빈 유틸리티 (./configure --target = msp430 --prefix = / something)를 빌드하십시오. 하드웨어 준비가되면 msp430 개발 보드 비용이 5 달러 미만입니다. arm / thumb 도구의 경우 코드 소스에서 라이트 버전을 가져 오십시오. cortex-m3 (thumb / thumb2) 보드는 현재 약 12 ​​달러입니다. 나는 x86과 avr과 다른 사람들을 첫 번째 명령어 세트로 사용하지 않을 것입니다. 다른 사람들이 반올림되도록 배우고 싶을 것입니다. 이전 / 원래 그림 명령 세트도 살펴볼 가치가 있습니다. 오후에는 시뮬레이터를 직접 작성하고 어셈블러를 배울 수 있습니다. 나는 그것을 먼저 배우지 않고, 재미있는 것들을 가르치지 만, 동시에 대부분의 명령어 세트에서 발견되는 공통 기능을 나타내지 않으며 반드시 확장하지는 않습니다. msp430은 필자가 실제로 배운 첫 번째 명령 세트 인 pdp11의 느낌을 주었다. 둘 다 잘 둥글고 대부분 직교하는 특징이있다. msp430 및 microchip pic 명령어 세트는 모두 wikipedia에 최소한 참조로 문서화되어 있으므로 전체 그림을 각 레지스터 및 주소 지정 모드, 재설정 / 부팅 등을 설명하는 공급 업체의 데이터 시트 / 설명서를 가져옵니다.


어셈블러의 경우 최소한 arm / thumb 또는 msp430의 경우 binutils 만 필요하며 어셈블러 및 링커를 빌드 할 수 있습니다. 학습 도구로 어셈블러 출력을 검사 할 수있는 C 컴파일러를 원한다면 mspgcc4 또는 코드 소스가 필요하거나 둘 다에 llvm을 사용해야합니다.
old_timer

4

Assembly를 배우시겠습니까? 이유를 말할 수 있습니까? 그것은 매우 중요한 일이며, 이제는 하루 종일 점점 덜 유쾌하거나 유용합니다. 이것은 작성한 사람이 직접 작성하고 심지어 조립 된 프로그램 (어셈블러, 링커, 명령 집합이있는 카드가 아님)을 수령 한 사람이 작성한 것입니다.


이것은 의견만큼이나 답이 아닙니다. 또한 지금은 약간의 조립 과정을 거치지 않고 프로젝트 동작의 이상한 점을 이해하려고 할 때 임베디드 C 프로그래머를 신뢰하는 것을 주저하고 있습니다.
크리스 스트래튼

4

나도 대학에서 68HC11에 대해 배웠다. 오히려 그들은 다른 MPU / MCU보다 이것을 제안하지만, 우리가 사용한 개발 보드에 모니터 프로그램이 있다고 지적하고 싶었습니다. 그래서 멍청한 터미널에서 우리는 코드를 단계별로 살펴보고 레지스터를 검사 할 수 있습니다 ... 요구 사항에 맞는 프로세서를 알면 모니터 프로그램으로 어떤 개발 보드를 사용할 수 있는지 확인하는 것이 좋습니다.


모니터 프로그램이 도움이 될 것 같습니다. 이것을 배우기 위해 어떤 책을 사용 했습니까? 당신이 나에게 묻는다면 ....

나는 너무 68HC11하고 "모니터링 프로그램의"로 알려져있다 경험했다 버팔로 모니터 . 기본적으로 ROM에 저장되어 PC와 직렬로 통신하는 프로그램 일뿐입니다. 터미널에 입력하면 프로그램이 요청을 해석하고 정보를 제공합니다. 당신은 등, 지침을 통해 화면, 변화 메모리 값 단계로 메모리를 덤프 할 수 우리가 사용하는 보드이었다 하나. 이 컨트롤러는 배우기 쉽지만 매우 구식입니다.
sherrellbc

... 우리가 사용한 책 은 관심 있다면 이것 입니다. AVR과 같은 최신 컨트롤러를 사용하는 것이 좋습니다. 개발 보드는 여기 에서 찾을 수 있습니다 .
sherrellbc

3

PIC (14 비트 코어)와 ARM 어셈블리를 모두 가르칩니다. PIC 클래스는 일단 그 아키텍처의 추악함을 마스터하면 다른 어떤 것도 취할 수 있다고 말합니다. ARM (Thumb / Cortex가 아님)은 어셈블리를 배우기에 매우 훌륭한 아키텍처입니다. 우리는 LPC2148 보드를 사용합니다.


안녕하세요 Wouter, 여기서 만나서 반갑습니다!
Olin Lathrop 2016 년

2

dsPIC33F로 16 비트 PIC 어셈블리를 배웠습니다. 프로세서의 어셈블리는 포인터와 세 가지 변수 연산 (예 : A = B + C)을 지원하므로 학습과 적응이 훨씬 쉽습니다.


1

여기서 마이크로 컨트롤러와 마이크로 프로세서를 혼동하고 있습니다. AVR은 마이크로 프로세서가 아닌 Atmel의 마이크로 컨트롤러 라인입니다. 먼저 위키 백과를 검색하여 차이점이 무엇인지 더 잘 이해하는 것이 좋습니다. 기본적으로 마이크로 컨트롤러는 다소 완전한 시스템 인 반면, 마이크로 프로세서는 CPU 일뿐입니다 (따라서 마이크로 컨트롤러에는 마이크로 프로세서가 내장되어 있음).


나중에 알았는데 왜 넣지 않았는지 모르겠습니다. MP와 메모리 (플래시 나 eeprom 등)를 실제로 연결하는 것에 대해 많은 가이드가 말하는 것은 아닙니다.

1
대부분의 마이크로 프로세서에는 이제 캐시 / 메모리와 일부 I / O가 있으므로 매우 흐릿합니다.
kenny

1
@ Sauron-당신은 알고 있었나요? MP를 다시 사용했습니다. 마이크로 컨트롤러 (AVR에 대한 올바른 용어이며 여기서 논의하는 장치의 99 %)는 거의 항상 온보드 메모리 (EEPROM 및 플래시와 같은 비 휘발성 및 휘발성 SRAM)를 가지고 있습니다. 주변 장치로 환기를 시작하기 전에 온보드 물건을 사용하는 방법을 배웁니다.
케빈 베르메르

1

우리 대학에서는 MIPS와 함께 어셈블리 언어와 함께 하드웨어 디자인 / 아키텍처를 배웠습니다. DLX ) 아키텍처 . 그 이후로 나는 학교와 직장에서 약간의 PIC와 AVR 어셈블리를 다루었 고, 그것들은 모두 꽤 비슷합니다. MIPS 어셈블리는 프로세서 아키텍처와 마찬가지로 언어가 매우 단순하기 때문에 훌륭한 출발점이라고 생각합니다.

이 책 도 참조하십시오 . 세계 최고의 책은 아니지만 많은 대학에서 사용하는 표준 컴퓨터 디자인 책입니다.


Microchip PIC32는 MIPS 아키텍처를 사용하며 MIPS 어셈블러를 C와 쉽게 혼합 할 수 있습니다.
tcrosley

0

내 제안은 마이크로 컨트롤러와 프로세서에 대해 공부하기 시작하는 사람이라면 프로세서에 대해 거의 전문가이며 프로그래밍에 대해 poney prog 프로그래머와 프로그램을 더 잘 사용한다는 것을 연구하면 "컴퓨터의 숨겨진 언어 코드 작성"이라는 책을 읽어야합니다. atmel 공식 사이트의 atmel studio6.1


책과 프로그래머의 주요 기능을 설명하여 OP가 정확하게 사용하도록 기울입니다.
Vorac

이것은 디지털 시스템에서 어떻게 개발되는지 마이크로 컨트롤러를 이해하고 어셈블리 언어를 설명하는 것입니다.
avinash

해당 사이트를 방문하려면이 사이트를 방문하십시오. j.mp/mpcinterest
avinash
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.