Ainda vale a pena estudar assembly?

Só para você ter uma idéia do conhecimento que é usado para fazer o Java, por exemplo.

Basicamente, o Java contém:
um compilador - transforma arquivos-texto em linguagem Java em arquivos .class (bytecodes)
uma máquina virtual - contém um interpretador (obrigatório) e um Just-in-time compiler (opcional, mas presente nas implementações da Sun/Oracle, da IBM e da Apple).

Esse Just-in-time compiler foi escrito em C++, mas gera código de máquina (nem assembly - o código assembly equivalente está só em comentários!) dinamicamente, de acordo com as necessidades.

Se você gosta de estudar, e sabe ler um pouquinho de C++, baixe os fontes do JDK, e veja como é que o just-in-time compiler implementa o System.arraycopy, por exemplo (essa rotina não está em C, por incrível que pareça, e muito menos em Java, mas é gerada dinamicamente em código de máquina dependendo da necessidade, se não me engano).

Nem torturada a Dilma fugiu da faculdade - por que é que você não quer (ou acha que não precisa) dela?

[quote]Assembly ou linguagem de montagem é uma notação legível por humanos para o código de máquina que uma arquitetura de computador específica usa, utilizada para programar dispositivos computacionais, como microprocessadores e microcontroladores. A linguagem de máquina, que é um mero padrão de bits, torna-se legível pela substituição dos valores em bruto por símbolos chamados mnemónicos[1][2].

Por exemplo, enquanto um computador sabe o que a instrução-máquina IA-21 (10110000 01100001) faz, para os programadores é mais fácil recordar a representação equivalente em instruções mnemónicas MOV AL, 61h. Tal instrução ordena que o valor hexadecimal 61 (97, em decimal) seja movido para o registrador ‘AL’.

A conversão da linguagem de montagem para o código de máquina é feita pelo montador ou assembler, que é basicamente um tradutor de comandos, sendo mais simples que um compilador.[/quote]

[quote=entanglement][quote=assembler]Galera, me desculpem se falei o que não deveria ter falado, mas fiz o melhor que pude.

Se essas informações forem verdade, tentarei praticá-las.

O que devo fazer para estar atualizado sobre essas informações, por exemplo, quando não mais valer a pena estudar assembly, o que deverei fazer para saber disso? Por exemplo, se chegar o tempo que ninguém usará assembly assim como nos nossos dias ninguém usa a linguagem binária, o que deverei fazer para saber disso?
[/quote]

“Quando” é modo de dizer.
Quando é que não valerá mais a pena estudar latim, por exemplo?
É a linguagem que deu origem ao português, ao francês e indiretamente ao inglês (que é basicamente uma língua germânica mas com uma boa parte do seu vocabulário vinda do francês).
Você não precisa aprender latim para viver, mas um pouquinho de latim você acaba sabendo por osmose.
Se for estudar Economia, por exemplo, vai aprender o que é “ceteris paribus”.
Se for estudar Direito, vai se encher de latim jurídico até dizer chega.
Se for estudar Biologia, pelo menos vai saber dizer por que o Argentinossaurus tem esse nome :slight_smile:

E é por isso que não estipulo um prazo. Coisas antigas não morrem, só mudam de figura. [/quote]

Errei em perguntar quando não mais valerá a pena estudar assembly, fiz essa pergunta tentando dizer o que quis dizer, mas errei.
Era para ter perguntado assim:O que devo fazer para estar atualizado sobre essas informações, por exemplo, se não mais valer a pena estudar assembly, o que deverei fazer para saber disso?

Me desculpem, galera, por favor!

O que eu digo é: eu já estudei isso faz muito tempo, mas realmente não uso.

Acho que você precisa aprender o básico, para esquecer quase tudo (isso parece zen, não? Mas muitas coisas são assim mesmo. Você tem de aprender, para poder esquecer quase tudo, e o que você realmente aprendeu é o que não esqueceu.)

Você vai precisar mesmo saber isso profundamente - e isso, se você for esperto, vai aprender rapidinho - se tiver que realmente trabalhar com isso.

Senão, aprenda como funcionam as coisas, mas não é preciso ir até o último picossegundo de diferença para saber decidir entre usar REP STOSW ou LOOPNE em um código de movimentação de bytes - esse tipo de coisas você aprende depois se precisar, ou acha na Internet.

Por exemplo, a equipe que trabalhou escrevendo os compiladores Just-In-Time do Java (que convertem bytecodes em código de máquina) teve de aprender isso profundamente.

EDIT - aham, citei CMPSW, mas isso é para ser usado para comparar duas strings, não para fazer cópias de memória - desculpem nossa falha :slight_smile:

O que pode fazer é ficar antenado, acompanhar a evolução do mercado. Tanto pela Internet quanto no dia a dia do trabalho, fazendo cursos, lendo livros e revistas, faculdade, etc.
Não acho que chegará um dia em que não valha mais a pena estudar Assembly (ou pelo menos conhecer), a não ser que mudem radicalmente a arquitetura dos computadores.
Mas conhecer C acho bastante útil também.

  1. A linguagem Assembly é na verdade uma linguagem de ALTO NÍVEL como qualquer outra linguagem moderna existente no mercado. É considerada de baixo nível quando comparada com outras linguagens como C, JAVA, Pascal e etc…

  2. O processo para se chegar a um executável utilizando uma linguagem regular (existem exceções - Java, Javascript, Vbscript, etc…) está incluída a linkedição, último passo para se chegar ao executável; antes deste passo está a compilação. A linguagem Assembly se encaixa neste processo -> Edição do código fonte, compilação, linkedição => objeto executável.

  3. A dita linguagem de máquina se refere ao código binário, antes da linguagem Assembly utilizava-se (se não me engano) umas máquinas especiais para ligar e desligar os bits das palavras (formação dos comandos e etc…). Olhando por este angulo nota-se que a linguagem Assembly possui um nível altíssimo.

  4. Você saberá que a linguagem Assembly não vale mais a pena para você da mesma forma como você faz em relação as outras coisas. Se não estiver dando algum retorno positivo financeiro ou emocional você descarta.

  5. Acredito que nos dias de hoje a linguagem Assembly seja pré-requisito para quem domina linguagens como C, C++, Pascal em alguns projetos. Ou seja, o seu uso deve ser pontual em alguns setores do projeto, o programador não irá ficar trabalhando full time com Assembly durante todo o projeto; fara apenas rotinas bem especifica.

  6. Quem utiliza Assembly normalmente visa: Utilização de pouquíssimo espaço e velocidade de processamento.

  7. A linguagem C não substitue a Assembly porem as duas em conjunto forma um excelente casamento.

  8. Boa parte do segredo, pulo do gato ou seja lá como queira chamar, não está na linguagem está na linkedição através do qual se obtem o objeto executável.

flws

Sim, você pode aprender assembly sozinho, a Internet tem muito material, porém, apenas Assembly não te faz um profissional completo. Por exemplo, se você for trabalhar com automação, você vai precisar conhecer eletrônica, física, etc. Sendo assim, é altamente recomendável que você curse uma faculdade. Pelo seu perfil, talvez EE ou EC sejam os ideais, embora alguns cursos de CC tem um bom conteúdo de programação de baixo nível.[/quote]

Rmendes08, você me disse que para eu ser um profissional completo em Assembly é altamente recomendável que eu curse uma faculdade, pelo meu perfil, talvez EE ou EC sejam os ideais, embora alguns cursos de CC tem um bom conteúdo de programação de baixo nível.

Galera, qual ou quais cursos devo ter no mínimo para ser um programador Assembly completo?

Sim, você pode aprender assembly sozinho, a Internet tem muito material, porém, apenas Assembly não te faz um profissional completo. Por exemplo, se você for trabalhar com automação, você vai precisar conhecer eletrônica, física, etc. Sendo assim, é altamente recomendável que você curse uma faculdade. Pelo seu perfil, talvez EE ou EC sejam os ideais, embora alguns cursos de CC tem um bom conteúdo de programação de baixo nível.[/quote]

Rmendes08, você me disse que para eu ser um profissional completo em Assembly é altamente recomendável que eu curse uma faculdade, pelo meu perfil, talvez EE ou EC sejam os ideais, embora alguns cursos de CC tem um bom conteúdo de programação de baixo nível.

Galera, qual ou quais cursos devo ter no mínimo para ser um programador Assembly completo?[/quote]

Uma faculdade é mais do que o suficiente. O fato é que dificilmente haverá uma profissão que seja restrita a programar em Assembly. Geralmente a programação é apenas parte de uma atividade maior: pode ser o projeto de um hardware, a automação de uma linha de produção, o desenvolvimento de um robô … nesse ponto que a faculdade é importante.

Qual faculdade é menos suficiente? Imagino que em Engenharia Elétrica é mais suficiente do que Engenharia da Computação.

Veja bem, eu disse isso como forma de expressão …

Cara, eu vou ser franco … Se você quer entrar no ramo de programação e ficar com corpo mole para estudar … sinto muito, mas você não vai ter futuro não. A faculdade facilita em muito a sua vida, pois você tem toda a informação de que você precisa, e um pouco mais toda organizada e com professores e colega para você trocar idéias. Eu diria que esse é o seu ponto de partida.

Estou aqui no meu departamento e meu chefe é formado engenheiro químico, eu sou engenheiro eletrônico, assim como o indiano que também está trabalhando aqui, e o outro carinha aqui do meu lado tem doutorado não lembro exatamente em quê - sei lá se engenheiro civil é “menos suficiente” que engenheiro da computação. Aliás, não tem muitos engenheiros de computação aqui.
O que é ‘mais suficiente’ é você procurar o seu caminho e estudar numa escola de nome - até para conseguir bons contatos (mais conhecidos como “Q.I.” - “quem indica”).
E para estudar numa escola de nome, se você não nasceu filhinho de papai, vai ter de ralar bastante. Não é fácil não.

Estou decidido não fugir da faculdade. Mas acho muito boa idéia aprender assembly antes de ir para a faculdade, um dos motivos é eu suspeitar que no curso Engenharia da Computação não ensina Assembly, O DavidUser perguntou no GUJ no Assunto Assembly Language - Programar em liguagem baixo nível [ajuda!] no dia 11/10/2009 perguntando onde aprender Assembly mesmo dizendo que cursa Engenharia da Computação na PUC-GO.

O curso Engenharia da Computação ensina Assembly?
Onde aprender Assembly pela Internet?

[quote=assembler]Estou decidido não fugir da faculdade. Mas acho muito boa idéia aprender assembly antes de ir para a faculdade, um dos motivos é eu suspeitar que no curso Engenharia da Computação não ensina Assembly, O DavidUser perguntou no GUJ no Assunto Assembly Language - Programar em liguagem baixo nível [ajuda!] no dia 11/10/2009 perguntando onde aprender Assembly mesmo dizendo que cursa Engenharia da Computação na PUC-GO.

O curso Engenharia da Computação ensina Assembly?
Onde aprender Assembly pela Internet?
[/quote]

Nesse caso, vale a pena olhar na grade curricular do curso. Eu cursei Ciência da Computação e tive Assembly e ainda tive uma matéria de Microcontroladores.

[quote=entanglement]Estou aqui no meu departamento e meu chefe é formado engenheiro químico, eu sou engenheiro eletrônico, assim como o indiano que também está trabalhando aqui, e o outro carinha aqui do meu lado tem doutorado não lembro exatamente em quê - sei lá se engenheiro civil é “menos suficiente” que engenheiro da computação. Aliás, não tem muitos engenheiros de computação aqui.
O que é ‘mais suficiente’ é você procurar o seu caminho e estudar numa escola de nome - até para conseguir bons contatos (mais conhecidos como “Q.I.” - “quem indica”).
E para estudar numa escola de nome, se você não nasceu filhinho de papai, vai ter de ralar bastante. Não é fácil não. [/quote]

Nunca ouvi falar quais são essas escolas de nome? Entanglement, se você puder, me diga quais são essas escolas de nome?

Vou repetir uma pergunta que fiz só mais uma vez, onde aprender Assembly pela Internet?

Prefiro aprender o comportamento das minhocas morjadas no deserto, é mais útil !

[quote=assembler][quote=entanglement]Estou aqui no meu departamento e meu chefe é formado engenheiro químico, eu sou engenheiro eletrônico, assim como o indiano que também está trabalhando aqui, e o outro carinha aqui do meu lado tem doutorado não lembro exatamente em quê - sei lá se engenheiro civil é “menos suficiente” que engenheiro da computação. Aliás, não tem muitos engenheiros de computação aqui.
O que é ‘mais suficiente’ é você procurar o seu caminho e estudar numa escola de nome - até para conseguir bons contatos (mais conhecidos como “Q.I.” - “quem indica”).
E para estudar numa escola de nome, se você não nasceu filhinho de papai, vai ter de ralar bastante. Não é fácil não. [/quote]

Nunca ouvi falar quais são essas escolas de nome? Entanglement, se você puder, me diga quais são essas escolas de nome?[/quote]

Eu não tenho nenhum contato!

Galera, Entanglemente, nunca ouvi falar quais são essas escolas de nome? Se puderem, me digam quais são essas escolas de nome?

[quote=rmendes08]

Cara, isso é aí é bobagem. Assembly É a linguagem de máquina, tanto que cada arquitetura de processador tem sua própria linguagem Assembly. Uma instrução Assembly nada mais é do que um código seguido por 1 ou 2 parâmetros. Esse código é numérico, sendo assim, ele pode ser representado em qualquer base numérica, a mais comum é a hexadecimal. Porém, pode-se representar esse código também através de mnemônicos, para facilitar a leitura das instruções. Mas o fato de representar uma instrução através de um mnemônico está longe de definir uma linguagem nova.[/quote]

Pessoal, seguinte:
Assembly não é linguagem de máquina. Assembly são mnemônicos que facilitam o entendimento dos conjuntos de instruções de uma plataforma(microcontrolador ou microprocessador), além de não ser linguagem de programação, mas de montagem.
Esses mnemônicos representam uma instrução. O código de máquina não tem segredo, é 0 ou 1. Portanto se alguém quiser escrever um programa nessa linguagem pode conseguir um teclado de 3 teclas, 0, 1 e enter criar um arquivo .com no win 98 e digitar instruções lá.

A parte sobre a linguagem c fazer praticamente tudo o que o assembly faz é real. Você pode otimizar partes do programa inserindo os mnemônicos inline. Mas é inviável usar c em um programa para um micro de 1kb de memória. O programa tem que ser muito enxuto então se opta pelo assembly. Mas a grande maioria das plataformas hoje usam c, pascal ou basic.

Sobre a parte rentável da coisa pode acreditar que ela existe e é muito boa. Mas você precisa trabalhar com engenharia elétrica.

No campo das aplicações você não usa linguagem de baixo nível, a não ser que você recaia em um problema de otimização que foi o meu a muito tempo atraz. Estávamos desenvolvendo um sistema de cftv e descobrimos que memcopy do windows 98 na época era muito lento para copiar a imagem da placa de captura para o programa. Para podermos montar um quadro do vídeo no tempo certo precisamos reescrever essa função e o fizemos em assembly. E resolveu.

reforçando o artigo aqui da wiki

É verdade que hoje em dia dificilmente o Assembly é usado fora do ambiente de faculdade, pois geralmente mesmo máquina são programadas usando linguagem C, que em ambiente de trabalho é 99% de chance que você nunca mais verá Assembly?

É verdade que hoje em dia, são pouquíssimos os casos onde não se usa C no lugar de assembly, mesmo no desenvolvimento de hardware?