Ainda vale a pena aprender ASM ?
Sei um pouco disso, mas não usei ou aprendi direito porque tudo que aprendo no assembler posso fazer em 1/10 do tempo com alguma linguagem como C ou C ++. Então, devo realmente aprender e usar o ASM? Isso vai me fazer bem profissionalmente? Isso aumentará minha desenvoltura? Resumindo, isso me tornaria um programador melhor?
Nota: Estou falando sobre montagem de baixo nível como FASM ou NASM e não algo como HLA (High-Level Assembler).
programming-languages
assembly
nasm
ApprenticeHacker
fonte
fonte
Respostas:
Aprendi com o livro de Kip Irvine . Se você ignorar as críticas (justas) de suas bibliotecas (irrelevantes), posso recomendá-lo como uma boa introdução à linguagem em si - embora para as coisas realmente interessantes você tenha que caçar os obsessivos na rede.
Acho que é útil entender o que acontece nos níveis inferiores. Conforme você pesquisa o assembler, você aprenderá sobre pipelining de CPU, previsão de ramificação, alinhamento de cache, SIMD, reordenação de instruções e assim por diante. O conhecimento deles o ajudará a escrever um código de alto nível melhor.
Além disso, a sabedoria convencional é não tentar otimizar manualmente a montagem na maior parte do tempo, mas deixar o compilador se preocupar com isso. Quando você vir alguns exemplos das coisas distorcidas que os compiladores geram, entenderá melhor por que a sabedoria convencional se mantém.
Exemplo: LFSRs são executados rapidamente com a instrução rotate-with-carry, para casos específicos como este é tão fácil escrever a versão em assembler quanto descobrir se o compilador é ou não inteligente o suficiente para descobrir. Às vezes, você simplesmente sabe algo que o compilador não sabe.
Ele também aumenta sua compreensão dos problemas de segurança - gravar ou executar, saturações de pilha, etc.
Alguns problemas de simultaneidade só se tornam aparentes quando você está ciente do que está acontecendo no nível por instrução.
Pode ser útil às vezes durante a depuração, se você não tiver o código-fonte completo.
Existe o valor da curiosidade. Como as funções virtuais são implementadas? Você já tentou escrever programas DirectX ou COM em assembler? Como grandes estruturas são retornadas, a função de chamada oferece um espaço para elas ou vice-versa?
Depois, há linguagens assembly especiais para hardware gráfico, embora as linguagens de shader fossem de alto nível alguns anos atrás, qualquer coisa que permita pensar sobre um problema de uma maneira diferente é bom.
fonte
Acho interessante que tantas pessoas saltem para dizer que sim, você precisa / deve aprender montagem. Para mim, a questão é quanta montagem você precisa saber? Não acho que você precise conhecer assembly como uma linguagem de programação, ou seja, não acredito que todo mundo deva ser capaz de escrever um programa em assembly, mas por outro lado, ser capaz de lê-lo e entender o que ele realmente meios (que podem exigir mais conhecimento da arquitetura do que o montador) é suficiente.
Eu com certeza não posso escrever assembly (ou seja, escrever qualquer código não trivial em assembly), mas posso lê-lo e isso junto com o conhecimento da arquitetura de hardware real e as convenções de chamada que estão sendo usadas são o suficiente para analisar o desempenho, e identificar qual parte do código C ++ foi a fonte desse assembly.
fonte
Sim - o principal motivo para aprender montagem para desenvolvedores C e C ++ é que ajuda a entender o que está acontecendo nos bastidores do código C e C ++. Não é que você realmente vá escrever código em assembly, mas será capaz de examinar a desmontagem do código para avaliar sua eficiência e compreender como os diferentes recursos C e C ++ funcionam muito melhor.
fonte
Vale a pena aprender muitas linguagens diferentes, de muitos paradigmas diferentes. Aprender Java, C ++, C # e Python não conta, já que todos são instâncias do mesmo paradigma.
Como a montagem está na raiz (bem, perto da raiz) de todas as linguagens, eu digo que vale a pena aprender montagem.
Então, novamente, vale a pena aprender uma linguagem de programação funcional, programação lógica, linguagens de script, linguagens baseadas em matemática. Você tem apenas um limite de tempo, então você tem que escolher e escolher.
fonte
Conhecer o ASM também é útil ao depurar, pois às vezes tudo o que você tem é "despejo do erro do ASM".
fonte
Você tem alguma utilidade para isso no que planeja fazer? vai ajudá-lo de alguma forma no que você faz ou planeja fazer atualmente? essas são as duas perguntas que você deve se perguntar, a resposta a elas é a resposta à sua pergunta.
Em um sentido mais geral, sim, eu diria que na minha opinião vale a pena aprender asm (algo como x86 ou arm), o quão bem ele atende a você depende do que você está programando e como você está depurando.
fonte
Depende de qual nível de programação você deseja alcançar. Se você precisa trabalhar com depuradores, então SIM. Se você precisa saber como funcionam os compiladores, então SIM. Qualquer montador / depurador é dependente da CPU, então há muito trabalho, basta verificar se a família x86 é grande e antiga.
fonte