E aí [Música] e essa semana vamos falar de linguagem de montagem espero que vocês gostem bom pessoal o título da nossa aula de hoje é linguagem de montagem e linguagem de máquina vamos lá é em relação aos sistemas computacionais né Para a gente saber como o computador funciona bem é legal a gente entender como as computador ele trata as informações embora haja diferentes linguagens de computador elas são bastante semelhantes portanto quando você aprende uma linguagem computador fica muito mais fácil de vocês aprenderem as outras né Mas aonde que vem essa ideia nessa semelhança basicamente porque
por exemplo linguagem C que falamos na última as aulas os programadores escreve um código em Alto Nível aí a gente deixa os compiladores que usam esse código aí que a gente chama de código-fonte é um programa é tematicamente equivalem porém escrito numa linguagem aí uma linguagem código objeto que na verdade é uma sequência de comandos ou instruções aí numa linguagem de pode né você já abriram o código objeto tão você percebe ali que tem um monte de instruções instruções binárias nas linguagens como o pai tão pega e réptil lua o Big Java os programadores escrevem
código também alto nível só que aí nós temos interpretadores que interpretam e converte em o código e um código executável né em alguns casos o interpretador lê o código-fonte linha linha e converte isso não código objeto ou um vai discutir né o código de máquina né é um código aí no binário E à medida que executa é ele Oi gente aí é o código ou linha linha ou por inteiro né Para depois ele executar Em ambos casos né você tem aí uma linguagem que a gente chama de linguagem compilada né a máquina só vai entender
o código escrito nessa linguagem nessa linguagem compilada né É porque ela tá entendi o código objeto que tá nessa linguagem de máquina Então deve existir uma maneira do computador entender as instruções dadas para operar né para executar e É nesse contexto que a gente vai falar de linguagem de máquina e linguagem de montagem o que é linguagem de montagem né uma linguagem que usa nomes simbólicos que a gente chama de memória incluindo é atribuição de nomes em posições específicas da memória principal e das instruções para operar o computador por exemplo uma linguagem de montagem conhecida
é o asseio né escrevendo um código em assembly você sabe exatamente o que o processador está fazendo e tem aí acesso a recursos que não estariam disponíveis das linguagens de alto nível que a gente se torna em PHP Java e ser né a linguagem de montagem ela é composta de funções que não são executadas diretamente pela máquina né a gente do existe um processo aí de compilação de interpretação Mas elas são úteis nesse processo para que o montador e Se Produza um código máquina é essa linguagem o código de massa ela tem uma característica importante
que ela especificidade de acordo com a arquitetura de computadores então vocês vão ouvir falar que cada é a que te tura tem uma Isa né O que vende Strokes set of ar né conjunto de instruções daquela arquitetura é a linguagem de máquina ela é a única coisa na verdade que o compilador o processador na verdade consegue interpretar estão apenas códigos né não é fácil não dá para o ser humano aí qualquer ser humano lê né então a linguagem de máquina ela consiste em instruções executadas diretamente pelo processador cada instrução uma cadeia binária em conjunto de
01 que contém o que a gente chama de old que é um código de o básica e da instrução referências ao operamos e possivelmente aí bits relacionados à execução né as instruções bem como os endereços de memória eles todos são escritos nessa nessa linguagem que a gente tá se falando aí nessa linguagem de máquina até o bicord é essa instruções do processador né que são representadas aí e números né É que eu decimais e é cara declaração de uma linguagem de montagem produz exatamente uma instrução de máquina Isso quer dizer o que né a conversão
aí vai de uma uma linha né cada linha de linguagem de montagem produz exatamente nisso do Sono de linguagem de máquina né então há uma correspondência aí um-para-um entre as instruções de máquina e as declarações no programa de montagem a linguagem de montagem ela é mais fácil de programar do que a linguagem de máquina né Muito melhor a gente trabalhar com a tênis do que trabalhar com binário hexadecimal né é a linguagem de montagem Ele é mais fácil porque ela tem aquele símbolos né que em vez de usar 01 né que a gente vai usar
o mnemônico né na verdade é que tá desse mal né é ele é convertido pelo sistema operacional os números binários né então programar em linguagem de máquina para se torna um pouco mais difícil tá então a gente tem a utilização na linguagem de montagem é de nome de endereço simbólicos em vez de binários e os hexadecimais o programador de linguagem de montagem Ele precisa se lembrar apenas apenas não né porque é vocês vão a gente vai fazer uma aula prática na próxima semana mas ele precisa se lembrar do que é o nome é o código
né o a instrução que ele vai usar né os nomes aí que ele vai usar o programador de linguagem de máquina ele deve sempre trabalhar com os valores aí numéricos dos endereços ela é toda a instrução do computador aí né Toda arquitetura e seu conjunto de instruções né então é um conjunto com instruções registradores e características visíveis aí para os programadores de baixo nível né a sendgrid uma é uma linguagem aí que a gente chama de baixo nível né mas nesse caso nessa palavra aí não quer dizer que é ruim né na verdade eu baixo
o nível quer dizer que tá mais perto do raiva é é todas as máquinas têm uma linguagem de montagem ou a sempre né que é uma representação simbólica aí da arquitetura utiliza aí os nomes para as operações como é de Subimos né em vez dos números binários daí da linguagem de máquina é um programa de baixo nível de abstração ele apresenta uma longa lista de binárias ou hexadecimais um número por inscrição é formado instruções a executar áreas operamos o programador de linguagem de montagem Como eu disse ele pode dar esses nomes simbólicos a locais de
memória e deixar para o montador o assembler né a preocupação aí de fornecer os valores numéricos correta por outro lado como a gente mencionou o programador de linguagem de máquina né mas baixo nível ainda ele deve sempre trabalhar com esses valores aí é numéricos hexadecimais é então por que que a gente usa né linguagem de montagem né a linguagem de máquina é aquela que a máquina é precisa para fazer as suas operações né então por que que a gente passa para um passo de linguagem de montagem é porque a gente não trabalharia tudo linguagem de
alto nível né Então aí vão algumas questões que eu queria colocar para vocês programar na linguagem de montar ela demora mais do que progama a linguagem de alto nível Então é isso é um problema leva mais tempo que eu para depurar além da manutenção que acaba sendo mais complicada por questões que você tem que trabalhar aí com desempenho que você faz acesso a máquina é mais fácil que a linguagem de máquina né a linguagem de montagem porém também tem as suas dificuldades Oi tantos a linguagem de maltagem né é mais fácil a linguagem de máquina
é mas ainda é mais complicada que uma linguagem de alto nível aí para você decorar e trabalhar né é um programador especializado em linguagem de máquina ele pode produzir muitas vezes um código bem menor e com mais rapidez do que uma programa é de linguagem de alto nível né rapidez e tamanho aí nessa questões elas são bastante Secret em algumas aplicações né Por exemplo as aplicações de sistemas embarcados aplicações embutidas né como o código e um cartão inteligente né os cartões que a gente vê por aí os smartcards os drivers de dispositivos as bibliotecas de
manipulação de string e stringbuffer rotina de BIOS né alguns procedimentos né é controladores de discos né temos embarcados de tempo-real esses exemplos aí que você tem para vocês tão situações que você precisa do acerta completa automática né E aí isso as vezes é impossível não vai linguagem de alto nível então resumindo né Ela é mais fácil que implementar que a linguagem de máquina porém mais difícil que a linguagem de alto nível porém algumas vezes Em algumas situações comer sempre fiquei a gente precisa acessar Honrar ver né Oi e aí então você precisa trabalhar aí na
linguagem de montagem para vocês terem uma ideia Aqui nós temos um programa em assembly nesse canto aqui né Vocês estão vendo um programa em assembly e depois aqui nessa linha nessas duas linhas Vocês estão vendo o hexadecimal desse programa em atende né o sistema operacional depois transforma e ele para binário né E essa transformação aqui né foi gerada pelo que a gente chama de montador ou assembler né é um programa que faz uma tradução entre a linguagem de máquina e a linguagem de montagem desculpa e o código de máquina né é uma época que eu
atendi ele era a única escolha possível né quando você queria trabalhar diretamente aí com linguagem de montagem e os códigos de máquina hoje em dia não é mais assim né a tempo ainda o mais importante faz parte do código de muitas linguagens modernas mas é usada por exemplo para acessar é instruções aí por exemplo que ele trabalha com criptografia por hardware ou quando você quer tarefas de velocidade a exigência de velocidades é do sistema operacional né o pessoal que trabalha no sistema embutidos que vocês circuitos também acabou aprendendo assembly né porque é como os programadores
de assembly Disney né aprender assembly é aprender como os computadores funcionam debaixo da casca né da do RAR da média de baixo do sistema operacional né também não só da máquina e todo programador profissional deveria né aprender a usarem os recursos da máquina né conseguir trabalhar nesse vídeo e Aqui nós temos um outro exemplo né Aqui nós temos programa em linguagem de montagem agora pensando em diferentes arquiteturas né aqui a gente tem é o mesmo programinha que faz o cálculo aqui de n e mais J né E aí você tem no programa em assembly e
pensar não penteou 4 no motor dele numa máquina do tipo estar então aí se vocês olharem nós temos quatro etiquetas né aqui nessa primeira parte aqui né chamada etiqueta que é fórmula e&j Note que é linguagem de modelagem aí de montagem da Spark que a letra C né que a última aqui da figura ela requer: a cada etiqueta né EA da Motorola você não tem os mesmos: aqui na etiqueta a linguagem do Pentium da Intel ela também requer: o e etiquetas de código mas não etiquetas de dados né então na nada de fundamental Mas se
a diferença os projetistas de diferentes está sendo é costumam ter Gostos diferentes né nada na arquitetura subjacente sugere a preferência por uma anotação ou por outra né uma vantagem da notação com dois pontos na verdade a gente pensar é que com ela uma etiqueta pode aparecer sozinha em uma linha com o old na coluna na coluna 1 da linha seguinte né esse estilo às vezes é conveniente para os compiladores porque se você não tiver aí uns: não haveria nenhum modo de você diferenciar uma etiqueta sozinha e uma linha de um outro Cold também sozinho né
É em uma linha os dois pontos acabam tirando essa águia aí que pode acontecer né o o potencial problema de ambiguidade é agora aqui né então para quê que é indicado né as situações de linguagem de montagem né quando a gente já citou né mas a gente quer trabalhar diretamente mais próximo do rádio né esses demais né não ficar por trás do sistema operacional não então numa situação aí na primeira delas é o uso de linguagem de montagem ela é indicada para quando você precisa localizar erro analisando um código em linguagem de montagem gerada pelo
computador ou a janela de montagem depurar um depurador né Então aí para uma situação de depuração e verificação uma outra situação é a de desenvolvimento de compiladores né para criar compiladores depuradores e outras ferramentas de desenvolvimento necessário entender então essas técnicas decodificação da linguagem de o número de terceira situação é de cada linguagem de montagem para sistemas embarcados né porque sistemas embarcados pequenos por exemplo eles têm menos recursos do que os pêssegos e as grandes máquinas né então a programação em linguagem de montagem ela pode otimizar o código tanto em velocidade quanto em tamanho e
sistemas embarcados aí pequenas é uma quarta né É em relação aos Drivers para hardware né e código de sistema é para acessar a arder registradores de controle de sistema em Petra Às vezes você não consegue fazer esse tipo de coisa usando aí uma linguagem Java Python é uma linguagem de alto nível outros indicações de uso né são por exemplo acessar instruções que não são acessíveis a partir de linguagens de alto nível de maneira geral né você algumas instruções em e ela não tem a equivalente linguagem de alto nível né então o programador da linguagem de
montagem tem acesso a todos os recursos e as instruções disponíveis aí na máquina Mas isso não acontece com o programador de alto nível né às vezes ele não tem por exemplo se a máquina alvo tiver aí um hit de Stephanie é um limite para overflow um programa em linguagem de montagem pode testar mais o programa em Java por exemplo né não vai conseguir fazer a mesma coisa é um outro uma outra razão é otimizar o tamanho do código de moda o código é melhorar o desempenho por caber na Cash né então é esse é o
outro Fato né é otimizar o tamanho do código porque a gente sabe que o espaço de armazenamento EA memória atualmente são baratos né às vezes é não vale apenas a linguagem e para reduzir o tamanho de qualquer código né porém o tamanho da Cash ainda um recurso bastante crítico então pode ser útil para algumas situações especiais otimizar o tamanho de um pedaço do código para que ele caiba dentro da caixa né E aí você consegue otimizar aquela aplicação como assim deseja né é outra questão é a utilização de velocidade né Há situações em que você
tem problema de não eficiência do compilador né Aí você aumenta a velocidade aí é por meio de uma programação aí mais próxima do rádio em linguagem de montagem e outras questões em termos de bibliotecas né é por exemplo bibliotecas de função né o benefício total de otimizar o código a é maior utilizando aí as bibliotecas de funções usadas por muitos programadores né a outra questão é compatibilização de biblioteca de função computadores sistemas operacionais né É possível é criar funções de bibliotecas com várias entradas que sejam compatíveis com diferentes compiladores e sistemas operacionais Então como visto
nesse no slide anterior né a palavra chave aí para optar pela linguagem de montagem né o uso da linguagem de montagem né está realizar é está é focada em utilização né então vocês viram aí e diversas situações né Essa figura é uma figura bastante interessante porque vocês vão encontrarem as questões de conversões né Abstrações Aí como eu falei para vocês eu encontrei no livro do Delgado eu trouxe para vocês né só para dar uma explicação aí geral uma linguagem de programação de alto nível né aí vocês vão encontrar no centro da figura né Por exemplo
programa e ela é uma notação textual com base em um conjunto de regras que permite especificar um algoritmo aí não formato é suficiente aí para executar para ser executado no computador os computadores não executam diretamente o programa de alto nível existe uma correspondência entre cada instrução da linguagem de alto nível e a linguagem assembly que há também uma descrição textual como a gente já mencionou mas já com o mapeamento direto aí para uma linguagem de máquina é ela tem ali os nomes simbólicos mas esses novos simbólico já estão mapeados por uma linguagem de máquina é
que o computador aí vai saber fazer automaticamente essa tradução então a tradução entre as linguagens de alto nível para instrução em linguagem assembly vai ser feita pelo compilador as grandes vantagens de utilizar a linguagem de alto nível em relação a linguagem e como a gente viu é a questão da facilidade né É muito mais simples programar é alto nível né do que a gente tratar detalhe aí de compiladores né detalhes de linguagem de montagem aí a gente tende a errar menos né o programa também ele fica né independente do processador em que é executado compilador
que faz a conversão adequada para suportar aí a a portabilidade e dessa figura ela mostra essas situações bem interessantes aqui das conversões né o compilador a a linguagem ao atender né e a própria programação em assembly A então aqui eu achei interessante trazer essas diferenças para vocês Ah é Então linguagens de alto nível acende né comumente a melhor escolha recai sobre a linguagem de alto nível é para a gente não ter que trabalhar com detalhes do computador e aumentar a produtividade aí programadores na a gente acaba não tendo tendo a chance de cometer menos erros
né existe a linguagem de programação não o níveis e todas as plataformas que a gente vai tomar muito cuidado com isso né É aí se aplicação a ser desenvolvida se destina a ser cortada né tem mal portabilidade isso é um aspecto a ser considerado a linguagem assembly é utilizado então situações mais especiais é portanto né para construir uma rotina que necessita está muito utilizado e que seja necessário manipular recursos físico que não consiga ser Expressa em linguagem de alto nível usa-se uma linguagem de montagem 1 ATM Esse é o programador que escolher trabalhar em linguagem
de máquina né em vez de uma linguagem de montagem por exemplo né ele precisa de detalhes aí de memória de unidade lógica aritmética né então é bem interessante vocês pensarem aí na questão da linguagem de alto nível a linguagem de montagem a linguagem de máquina né Em que situações cada uma é é adequada e qual a situação como eles como existem a transformação de uma para outra é em resumo né Porque que a gente estuda Então atende né basicamente porque um compilador deve produzir uma saída usada aí por um a sério realizar um processo de
montar a 5 se você conseguir entender a linguagem você vai entender como funciona os compiladores dos computadores né de geral e porque a máquina acaba ficando exposta para você né escrever esse código em linguagem de montagem a maneira de sistema E aí como as máquinas trabalham no seu nível de arquitetura é Então essa aula a ideia era Trazer isso para discussão né o que que era a linguagem de montagem que que era uma linguagem é de máquina a diferença entre elas quem faz essas traduções né e é as vantagens aí ou melhor uso dessa linguagem
de vontade aí vocês vão encontrar as principais referências utilizadas na aula é bom pessoal era isso nessa primeira aula a discussão das Diferenças aí entre linguagem de montagem e linguagem de máquina e espero que vocês tenham aproveitado nos vemos na próxima aula um abraço a todos e E aí [Música]