Pergunta

Meus objetivos estão focados no desenvolvimento de aplicativos de software e talvez no desenvolvimento de aplicativos da Web, mas provavelmente em aplicativos de desktop.Estou embarcando em um caminho para me familiarizar mais com C/C++, mas devo ir muito além disso, em assembly?Ou não teria um benefício para meus objetivos de longo prazo?

Foi útil?

Solução

Provavelmente não trará muitos benefícios, a menos que você tenha uma aplicação direta para ele.Se você busca conhecimento geral, C/C++ é um ótimo lugar para começar.

Dito isto, os desafios que a montagem apresenta são muito interessantes e requerem uma mentalidade bem diferente para fazer as coisas.

Passei um pouco de tempo aprendendo a montagem do Z80 programando o TI-86 calculadora.O conjunto de instruções do Z80 é bem pequeno e a novidade de programar uma calculadora em assembly é muito divertida.

ticalc.org tem muitos bons recursos em Programação de montagem TI.

Outras dicas

Estou realmente surpreso ao ver tantas respostas “não” para essa pergunta.eu acho que você deve aprenda montagem.

Eu não espero que você jamais usar montagem diretamente como parte do seu trabalho.Mas disso não se segue que você não deva aprender.

Aprender assembly irá lhe ensinar o que está acontecendo dentro do computador.Isso o ajudará a entender o que o software está realmente fazendo.

É realmente uma questão de profissionalismo.Você vai ser um engenheiro de software profissional?Ou você será um hacker de copiar e colar?Claro, este último pode pagar as contas, mas ser profissional é muito mais gratificante.

Ouvir alguém dizer: “Não, não se preocupe em aprender montagem”, soa aos meus ouvidos como “Aqui está o livro de receitas para construir pontes.Você não precisa aprender física ou engenharia para construir uma ponte.Basta seguir estas receitas." Não, obrigado.

Bom dia,

Aprendi montador PDP quando fiz meu Elect.Eng.licenciatura no final dos anos 70.O último dialeto de assembler que realmente usei tinha quatro modos diferentes de endereçamento de memória.O último dialeto que procurei tinha 17 modos!

Não tenho certeza do que aprender assembler realmente oferece hoje em dia.Naquela época, era uma parte essencial de um fluxo de CS entre meus eleitos.inglês.grau.

Quanto a aprender C++, eu apenas sentaria e trabalharia "C++ acelerado" que se aproxima do C++ por si só e não como "C com outros bits".

Quanto ao C, eu apenas trabalharia com a versão mais recente do "Linguagem de programação C" (também conhecido como) K'n'R

Espero que isto ajude.

Saúde, Rob

Agora, se você perguntasse sobre nanoprogramação...(-:

"Vale a pena aprender um dialeto de montagem?"

Eu programei assembly profissionalmente.M68k executando um aparelho de fax e scanner.Também o Windows VxDs (drivers de dispositivos virtuais) estava no Windows 3/3.1 dias antes de terem um kernel real.

Quando você codifica o Assembly para realizar tarefas comuns de software (copiar memória, concatenar strings, chamar manipuladores de interrupção, etc.), é bastante interessante.Às vezes, você codifica o assembly para ser chamado pelo código C para executar alguma tarefa especializada o mais rápido possível em um determinado processador.Isso pode ser mais interessante porque você está procurando maneiras de aproveitar cada ciclo que o processador oferece.Você se preocupa com o que está no cache L1 do processador.Você se preocupa em alinhar os dados na memória para evitar acertos no cache (se bem me lembro do termo).Você se preocupa com a arquitetura do processador de pipeline duplo e com o uso de 2, 3 ou 4 instruções corretas na ordem correta, para que 2, 3 ou 4 coisas aconteçam com um único tick de clock (-um- daqueles HZ no XgHz do processador).

Ao codificar o assembly para acionar hardware personalizado, agora você está fazendo coisas como preencher um buffer de memória de 16 bytes, configurar uma operação DMA e enviar esses dados para um controlador que está fazendo algo como acionar o tambor de uma impressora a laser.E o tambor está girando e não pode ser parado e deseja seus próximos 16 bytes nos próximos 5us.Claro que isso pode ser feito em C ou C++.Mas os exemplos são infinitos.

Talvez eu aparasse a última metade da sua pergunta "vale a pena aprender um dialeto de montagem?" E fazer isso "vale a pena aprender?"

Se você adora programar, a forma como você define “valor” envolve algum componente do amor pela programação.Nesse sentido, nunca aprendi nada em programação e nem achei que valesse a pena.Mesmo que eu não tenha usado muito depois.

Nesse mesmo sentido, eu quase diria que quanto mais difícil é aprender algo, mais “vale” ele.

Mas deixando de lado toda essa porcaria fofinha, acredito que vale a pena pelo menos obter algum conhecimento de montagem.Vá em frente e descubra como escrever o assembly para substituir algumas rotinas stdlib simples como strcpy, memmove etc.Em seguida, tente otimizá-los, chamando-os de C um milhão de vezes enquanto cronometra.

Eu não começaria a aprender ASM.Se você quiser aprender C/C++, comece com isso.À medida que a qualidade do seu código amadurece, você pode descobrir que precisa do ASM.99% das vezes você não vai, mas de vez em quando você pode precisar.

Além disso, ajuda conhecer o ASM em termos de compreensão do que o C/C++ está fazendo nos bastidores.Mas, novamente, até que você fique mais avançado, provavelmente não precisará disso.

Eu fiz, e acho que isso me ajudou na época.Não me ajuda mais no dia a dia, mas acho que dependeria do seu trabalho.

Aprendi montador há 20 anos em um Commodore e novamente na universidade em um mainframe IBM.Não posso dizer que isso me ajude no meu trabalho atual.

Eu concordo com Marcos.Acho que é semelhante a aprender MSIL ao escrever em C#, VB.NET ou outra linguagem .NET.Ajuda saber o que está acontecendo nos bastidores, mas você pode passar a vida inteira criando aplicativos que funcionam e nunca precisam deles.

Não.A menos que você queira se divertir, você realmente não precisa aprender montagem.

Há algumas coisas que você precisa saber sobre assembly, como criação de driver, desenvolvimento de sistema operacional, desenvolvimento de exploit, mas fora isso, eu pessoalmente acredito que você pode codificar felizmente para sempre sem saber disso.

Se você precisar aprender montagem, você saberá - eu não aprenderia só por aprender.

Se você estiver escrevendo C++ não gerenciado, ocasionalmente é inestimável conhecer pelo menos assembly x86 básico, sistemas numéricos binários, etc.Eu faço principalmente desenvolvimento em C/C++ e ocasionalmente preciso depurar o código de produção para erros que são tão específicos da representação do código de máquina produzida pelo compilador que a única maneira de encontrar e corrigir o bug é ler o assembly descompilado e verifique por que o compilador o gerou como tal.

Para mais informações sobre montagem, veja a pergunta: Qual a melhor forma de aprender Assembly?Especificamente, para quem tem experiência em linguagens dinâmicas.

A montagem não é muito difícil.Quando estiver familiarizado com C, passe um ou dois dias aprendendo montagem básica.Sua utilidade em termos de depuração é tremenda, além de ser divertido ser capaz de escrever código que supera o equivalente em C em termos de velocidade por um fator de 10, 15 ou mais.

Eu não sugeriria aprender uma "linguagem assembler moderna".

Porém sabendo um pouco sobre MOS 6510 Montador e navegando pelo desmontado Capítulo 64 Kernel, também conhecido comoé o OS e o BASIC Interpreter, me ajudou muito a entender o que está acontecendo dentro de um computador - coisas como interrupções e páginas de memória.

Isso pode ajudá-lo a dar dicas de como escrever código otimizado em outras linguagens.Muito disso - entretanto - já é feito por compiladores modernos, então eu só sugeriria isso se você estiver interessado no que está acontecendo dentro dessa caixa preta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top