Então, eu estou querendo aprender Assembly primeiro em um MP, depois passar para C (já que parece que é o que a maioria deles usa).
Estou querendo entrar na programação incorporada, adoro coisas de baixo nível C (o Kernels / Modules for Linux é principalmente o que eu fiz), mas adoro a ideia de poder programar um nível ainda mais baixo do que isso (microcontroladores / Microprocessadores).
Eu sei sobre o Arduino, e isso é ótimo e tudo, mas não consigo encontrar muitos recursos para usar o Assembly com eles. Os AVRs da Atmel parecem ser muito populares (e baratos), mas quando se trata da parte de hardware real (conectando-os em uma placa de ensaio, etc.), não estou encontrando muita informação.
Quaisquer sugestões / informações ou recursos que vocês / galões conheçam, por favor me avise.
Edit: Outra coisa: parece que todos os livros de microprocessador que eu li (geralmente AVRs) falam sobre o próprio microprocessador e sobre a programação. Mas ainda estou para ver um livro que fala sobre a instalação de todos os componentes (microprocessador, memória, energia etc.). Se eu pudesse encontrar algo que me orientasse, estaria nos negócios. (Quero aprender desde o início.) Sem mencionar que não tenho idéia de como você se comunicaria entre eles.
fonte
Respostas:
Eu aprendi em um 68HC11 na faculdade. Eles são muito simples de trabalhar, mas honestamente a maioria dos microcontroladores de baixa potência será semelhante (AVR, 8051, PIC, MSP430). A maior coisa que adicionará complexidade à programação ASM para microcontroladores é o número e o tipo de modos de endereçamento de memória suportados . Você deve evitar dispositivos mais complicados a princípio, como processadores ARM de ponta.
Eu provavelmente recomendaria o MSP430 como um bom ponto de partida. Talvez escreva um programa em C e aprenda substituindo várias funções pela montagem em linha. Comece simples, x + y = z, etc.
Depois de substituir uma função ou algoritmo pelo assembly, compare e compare como você o codificou e o que o compilador C gerou. Essa é provavelmente uma das melhores maneiras de aprender montagem na minha opinião e, ao mesmo tempo, aprender sobre como funciona um compilador, o que é incrivelmente valioso como programador incorporado. Apenas certifique-se de desativar as otimizações no compilador C primeiro, ou você provavelmente ficará muito confuso com o código gerado pelo compilador. Ative gradualmente as otimizações e observe o que o compilador faz.
RISC vs CISC
RISC significa 'Computação com Conjunto de Instruções Reduzidas', não se refere a um conjunto de instruções em particular, mas apenas a uma estratégia de design que diz que a CPU possui um conjunto de instruções mínimo. Poucas instruções para que cada um faça algo básico. Não existe uma definição estritamente técnica do que é necessário 'para ser RISC'. Por outro lado, as arquiteturas CISC têm muitas instruções, mas cada uma 'faz mais'.
As vantagens propostas pelo RISC são que o design de sua CPU precisa de menos transistores, o que significa menos uso de energia (grande para microcontroladores), fabricação mais barata e taxas de clock mais altas, resultando em melhor desempenho. Geralmente, o menor uso de energia e a fabricação mais barata são verdadeiros; o desempenho ainda não alcançou a meta como resultado de melhorias no projeto das arquiteturas CISC.
Atualmente, quase todos os núcleos da CPU são de RISC ou "meio termo". Mesmo com a arquitetura CISC mais famosa (ou infame), x86. As CPUs x86 modernas são núcleos internamente semelhantes a RISC, com um decodificador aparafusado na extremidade frontal que divide as instruções x86 em várias instruções semelhantes a RISC. Eu acho que a Intel chama isso de 'micro-ops'.
Quanto a qual (RISC vs CISC) é mais fácil de aprender na montagem, acho que é uma brincadeira. Fazer algo com um conjunto de instruções RISC geralmente requer mais linhas de montagem do que fazer o mesmo com um conjunto de instruções CISC. Por outro lado, os conjuntos de instruções CISC são mais complicados de aprender devido ao maior número de instruções disponíveis.
A maior parte do motivo pelo qual o CISC tem um nome ruim é que o x86 é, de longe, o exemplo mais comum e é uma bagunça para se trabalhar. Eu acho que isso é principalmente resultado do conjunto de instruções x86 ser muito antigo e ter sido expandido meia dúzia ou mais de vezes, mantendo a compatibilidade com versões anteriores. Até o seu Core i7 de 4.5Ghz pode ser executado no modo 286 (e é inicializado).
Quanto ao ARM ser uma arquitetura RISC, consideraria isso moderadamente discutível. Certamente é uma arquitetura de armazenamento de carga. O conjunto de instruções base é semelhante ao RISC, mas nas revisões recentes o conjunto de instruções cresceu bastante até o ponto em que eu consideraria pessoalmente mais um meio termo entre o RISC e o CISC. O conjunto de instruções do polegar é realmente o mais 'RISCish' dos conjuntos de instruções do ARM.
fonte
Eu acho que os microcontroladores PIC de 8 bits são a melhor escolha devido ao número reduzido de instruções.
O efeito colateral do número reduzido de instruções é que você precisa reinventar a roda em comparação com outros microcontroladores com mais instruções.
Porém, depois de aprender com o PIC, você pode migrar para outros microcontroladores e ver o que é melhor para você.
fonte
Semelhante à sugestão de Mark do 68HC11, o conjunto de instruções da família Freescale 68HCS08 é uma versão reduzida do Motorola 6809, que eu pensava ter um dos conjuntos de instruções de 8 bits mais limpos do seu tempo. Você pode obter uma placa de desenvolvimento com interruptores, LEDs, acelerômetro de 3 eixos e buzina piezo por US $ 79 aqui .
fonte
O conjunto de instruções msp430 é bom para aprender sobre o assembler. Evite x86. O braço é outro bom, mas tem muito mais instruções e opções e pode não ser o mais adequado como primeiro conjunto de instruções. Thumb é um subconjunto do conjunto de instruções arm e não é ruim, no github eu tenho um emulador de polegar (thumbulator) e um emulador msp430 (não testado tanto quanto o thumb) que são barebones, apenas o processador e a memória e pouco mais , para que você possa ter uma boa visibilidade do que está acontecendo. Uma alternativa seria o qemu, por exemplo, onde a visibilidade está lá, mas é muito mais difícil de obter, da mesma forma que com uma solução semelhante ao qemu, é preciso muito mais trabalho antes de você descobrir se tem alguma coisa funcionando.
vá para mspgcc4.sf.net para criar uma cadeia de ferramentas e / ou binutils de ações (./configure --target = msp430 --prefix = / something) em combinação com uma llvm de ações. Quando você estiver pronto para o hardware, uma placa de desenvolvimento msp430 custa menos de 5 dólares. Para ferramentas de braço / polegar, basta obter a versão lite em codesourcery. Uma placa córtex-m3 (polegar / polegada2) custa cerca de 12 dólares no momento. Eu evitaria x86 e avr e outros como um primeiro conjunto de instruções; você desejará aprender que outros devem ser bem-arredondados. O conjunto de instruções de foto antigo / original também é algo que vale a pena examinar. Você pode escrever um simulador em uma tarde para ele e aprender o montador. Eu não aprenderia isso primeiro necessariamente, ele ensina algumas coisas interessantes, mas ao mesmo tempo não escala e não é necessariamente representativo dos recursos comuns que você encontra na maioria dos conjuntos de instruções. O msp430 me deu a sensação do pdp11, que é o primeiro conjunto de instruções que eu realmente aprendi, ambos com recursos bem arredondados, principalmente ortogonais. Os conjuntos de instruções msp430 e microchip pic estão documentados na wikipedia, pelo menos como referência, para obter uma imagem completa, obter as fichas / manuais dos fornecedores que descreverão cada modo de registro e endereçamento, redefinição / inicialização, etc.
fonte
Tem certeza de que deseja aprender montagem? Você pode dizer o porquê? É uma tarefa e é cada vez menos relevante ou útil nos dias de hoje. É de uma pessoa que escreveu nele e até mesmo criou programas montados à mão (sem montador, vinculador, apenas um cartão com o conjunto de instruções).
fonte
Eu também aprendi em um 68HC11 na faculdade. Em vez disso, eles sugerem isso sobre qualquer outro MPU / MCU, eu só queria destacar que a placa de desenvolvimento que usamos tinha um programa de monitor. Assim, a partir de um terminal idiota, poderíamos percorrer o código e examinar os registros ... Sugiro que, quando você souber qual processador se adapta às suas necessidades, verifique também quais placas de desenvolvimento estão disponíveis com um programa de monitor.
fonte
Ensino as montagens PIC (núcleo de 14 bits) e ARM. A classe PIC digo que, depois de dominarem a feiura dessa arquitetura, podem assumir qualquer outra coisa. O ARM (não o Thumb / Cortex!) É uma arquitetura muito boa para aprender montagem. Usamos uma placa LPC2148.
fonte
Aprendi a montagem PIC de 16 bits com um dsPIC33F. O conjunto do processador é parecido com o C, pois suporta ponteiros e três operações variáveis (A = B + C, por exemplo), o que facilita muito o aprendizado e a adaptação.
fonte
Você está confundindo microcontroladores e microprocessadores aqui. O AVR é uma linha de microcontroladores da Atmel, não um microprocessador. Sugiro que você pesquise na wikipedia para entender melhor quais são as diferenças entre elas. Basicamente, um microcontrolador é um sistema mais ou menos completo, enquanto um microprocessador é apenas a CPU (portanto, um microcontrolador possui um microprocessador dentro).
fonte
Na minha universidade, aprendemos o design / arquitetura de hardware juntamente com a linguagem assembly (as duas andam de mãos dadas, obviamente) com a arquitetura MIPS (ou talvez DLX ). Desde então, me envolvi um pouco na montagem PIC e AVR na escola / trabalho, e todos são bem parecidos. Eu acho que a montagem do MIPS foi um ótimo ponto de partida, pois a linguagem é muito simples, assim como a arquitetura do processador.
Veja também: este livro . Não é o melhor livro do mundo, mas é o livro padrão de design de computadores para muitas universidades.
fonte
minha sugestão é que qualquer pessoa que comece a estudar sobre microcontroladores e processadores deve ler o livro nomeando "codifique a linguagem oculta do computador" se você estudar que quase é especialista em processadores e para programar ou usar melhor o programador e o programa poney prog atmel studio6.1 from atmel site oficial
fonte