Sistemas Computacionais - Linguagem Assembly (ASM)

15.32k views3520 WordsCopy TextShare
UNIVESP
univesp.br Eixo de Computação - COM210 Univesp - Universidade Virtual do Estado de São Paulo Profes...
Video Transcript:
E aí [Música] o Olá pessoal da disciplina de sistemas computacionais bem-vindos a semana ser nessa semana a gente vai aplicar os conceitos que a gente viu na semana 6 em alguns programas em assembly usando interrupção e chamada de sistema espero que vocês gostem vamos lá o título da nossa aula de hoje é linguagens assembly a linguagem assembly ou aí eu coloquei a atenção dos Nossos programas assembly é uma linguagem fundamental para o funcionamento dos computadores dos nossos sistemas computacionais se você der uma olhada rápida na linguagem nos conceitos que envolvem a linguagem você vai perceber
rapidamente que ela se encaixa muito bem na questão de abstração aí dos programas de alto nível até o executável aí pela máquina a esse a gente estudar bem a fundo o assembly vocês vão ver que dá para entender um bastante estudando a senha de arquitetura e organização dos nossos computadores tá então assim é aquela linguagem que a CPU fala né "" aí então se vocês olharem aqui na figura o que eu trouxe para vocês foi essa questão da abstração né então você tem aí linguagens de alto nível algumas compilados e outras interpretar e é isso
aí a gente tem ser para exemplificar as compilados Java por exemplo para exemplificar as interpretadas e aí você tem o que a gente chama de linguagem intermediária linguagem de montagem né que elas Emily a que passa por um montador E aí gera a linguagem Nossa objeto né E essa linguagem bobjeto passa por um link era um ligador né E aí a gente sabe que foi importante as bibliotecas de funções aí para gerar o executável ou binário aí para máquina tá então aqui desse lado você vê dois exemplos um exemplo de um programa ser em Alto
Nível aqui tá é uma função aqui explicar nada e aqui você vê o assembly né a linguagem de montagem considerando a gente falou bastante na aula passada né a linguagem de montagem ela tá muito relacionada com arquitetura nelas l e em um assembly com comandos arquitetura Intel x86 né que estaria nesse nível aqui então existem mais traduções aí de abstração Até chegar na máquina tá essa outro rascunho aqui é para encaixar outras linguagens que vocês ouvem falar e talvez vocês não saibam onde colocá-las né que a questão das linguagens declarativas né HTML Jason então a
gente poderia colocar nessa nessa nesse nível de abstração se a gente quiser quebrar mais um pouquinho a gente tem as linguagens scripts né E aí que que também as linguagens interpretadas né aqui a gente tem o Java Script o pai então né lua e aí entra nas linguagens aí mas características né de programas daí de linguagem de alto nível tá e o a sempre tá embaixo disso aqui né o a sempre tá no nível de abstração mais baixo tá não vamos trabalhar com linguagem de máquina 01 né mas a malha um pouquinho nessa semana nessa
aqui que seria a nossa parte aí de linguagem intermediária tá bom da da dessa contextualização vamos relembrar por que que a gente aprende a sempre né é atendido e mostra que o compilador faz então você a linguagem que a CPU não fala né com a memória Então ela mostra o que o compilador faz e também o que eu compilador não faz né Então aí a gente quando quer fazer algumas utilizações né assembly é uma linguagem bastante interessante assembly é mais preciso para indicar detalhes de programa então se você tá com alguma expressão algum problema né
não tem como mascarar né o assembly deixa mais visual né deixa mais fácil de você encontrar e encaixa bem nesse segundo né Band surgem não baixo nível e fica mais fácil de você corrigir manipularem acento da palavra Assembleia é quando você precisa além das questões de quem trabalha com microeletrônica né quem trabalha em Sistemas embarcados esse tipo de coisa e a gente precisa otimizar né seja utilizar tempo processamento passo né então a linguagem assembly vem com essa característica é a que eu trouxe mais uma contextualização para vocês né a gente aí tem é a CPU
né Essa CPU ela troca informações aí com a nossa memória principal a Random Access Memory que a nossa hum né ela tem vários nomes mas é a nossa memória esse comparativamente mais rápida do que a nossa HD Nossa memória secundária né e que tipo de informação ela manda ela pede endereço né e aham e tem troca de dados entre arranhar CPU se você for pensar friamente aham Na verdade ele é um vetor de endereços e informações né que eu representei aquele do lado de baixo e agora se a gente for pensar né então o computador
aqui nessa figura e é uma máquina né que possui uma unidade central de processamento né que é representada aqui por essa figura né e uma hum né que tá aqui aqui também a gente tem a CPU e RAM né a comunicação básica entre esses dois componentes e quer CPU vai enviar dele endereço né informações e ler e escrever dados em uma certa localização da memória na memória principal a gente falou bastante dessa questão aí quando a gente falou escalonamento para ginástica basicamente aham é esse ativamente um vetor de codificadores aí de números né de índices
a o índice e dados que estão a inscritos nesse Beetle a largura ou tamanho dos dados Ela depende da arquitetura que a gente tá falando então você já deve ter ouvido aí falar máquina de 32 bits 128 250 é o mesmo antigamente as máquinas de 16-bits né que representam aí o tamanho dos dados armazenados aí nessa memória principal isso não vem ao caso né pois agora a gente vai falar é menos de Arquitetura em mais de programas assim né enquanto a hum é usada para guardar dados então a CPU é usada para manipular os dados
né E ela faz isso usando os seus componentes internos que é o que a gente representa aqui nessa figura Ao lado né os componentes internos da nossa ocp né traduzido em português unidade central de processamento ou CPU né do inglês muitas pessoas só usam CPU né então dentro dessa dessa CPU né ela tem aí esses componentes que são usados para manipular os dados então por exemplo aí se vocês olharem na figura vocês vão encontrar componentes como a unidade lógica aritmética a bula vocês vão encontrar registradores né e dispositivos de entrada e saída para comunicação Isso
quer dizer né aqueles que pegam enviam dados para CPU e uma parte importante que vocês vão encontrar nessa figura né aqui são os nossos registradores aqui eles estão representados aqui embaixo né mas são os nossos registradores então vocês vão ver que alguns têm nomes aqui já definidos né porque existem registradores que tem algumas funções específicas né então por exemplo a gente tem um registrador chamado de registrador de instrução ele é responsável por armazenar a instrução que a CPU está executando nós temos registrador dos dados de memória que são responsáveis por armazenar os dados que vem
da memória né então Unidos ou que vão para memória para ser entre escritos né a gente tem registrador de endereço e armazena o endereço enviado para memória né E aí ele é útil quando ocorre uma festa a memória né seja de leitura o descrita nós temos um o registrador de stack Pointer que aquele que armazena aí o topo da pilha né o ponteiro aí para o topo da pilha e outro seja está dores né importantíssimos como o contador de programa né vocês vão ver falar dele ele armazena o endereço da próxima instrução sempre as executadas
pela CPU é como se ele fosse um contador e conforme a CPU vai executando uma sequência de instruções ele vai incrementando esse contador o contador de programa né o programa é Country né o PC ele pode ser usado conforme o resultado de alguma coisa aí dos registradores de status da CPU e aí Finalmente né o registrador de status da CPU que estão Beats é como uma bandeira como uma Flag né para dizer qual é o status da CPU e da unidade lógica aritmética Então a gente vai falar bastante principalmente desses dois últimos registrados aqui tem
uma figura para mostrar que ainda na organização de computadores né existe dentro da memória principal uma parte dela destilada ao que a gente chama de memória de programa né que essa parte aí que tá desenhado aqui em cima da nossa memória principal há algumas vezes por exemplo sistemas embarcados essa memória de programa ela fica como tá aqui na figura separada da memória RAM né É agora e para efeito didático é bastante útil você fazer assim uma separação agora nos nossos computadores desktop né Elas Ficam aí Integradas então você não veria um desenho exatamente pulmões a
função dessa memória né eu receber o PC lá o programa Country o contador de programa né ela recebe e envia a próxima instrução a ser executada né então ela faz a interface estou aqui exatamente isso que nós estamos mostrando né ela recebe informações do computador de problema que aquele registrador especial que tem lá na nossa CPU e manda a instrução tá bom E aí quem na verdade eu troco os dados né é a CPU e mandar o endereço e trocados né então programa Country conversa aí com essa área especial da memória principal bom é quando
você tem uma função em linguagem ser né Se vocês olharam lá no nosso primeiro slide tinha uma função um exemplo né em outras linguagens de programação a gente também tem função você sabe que a função ela é composta né pelo nome da função né E aí você tem dois argumentos ou três ou quatro né quando os argumentos da função tiver né é fazendo um paralelo aí a declaração em assembly ela é bastante similar né mas na verdade a gente não tem uma função né a gente tem um ou com a gente fala que é um
código simbólico né que esse código simbólico vai manipular e trabalhar ou operando então aqui a gente não pego menos a gente tem operando né E aí a gente vai agora projetar um processo aí simples com cunhado de instruções Wilson e eles podem ser aqueles registradores que eu falei para vocês nos slides passados né e também eles podem ser endereços de memórias ou mesmo constantes e valores numéricos Essa é a que a gente tem 4 instruções básicas de assembly é muffin as the addition estoma né subtraction é subtração e Jump jump é baseado em coleção é
em condição e pulo né e salto ele vai para uma informação então é a ideia aqui né do movie é mover o valor do registrador de fonte na então a gente sai de fom e move o valor para o destino né então a gente faz essa esse movimento no na instrução é de ou subir né adição subtração a gente vai realizar as operações aritméticas responde subtração né o primeiro operando né será o registrador que estamos com foco e como resultado da operação já o segundo operando né é ele na verdade é que vai ter a
outra informação né vai ser o valor o registrador a ser somado ou subtraído com o primeiro operando né então ele vai ser adicionado ou ele vai ser subtraído ao primeiro operando agora Indian PE né o primeiro operando é uma condição tá que se respeitada o segundo operando é a localização aonde vai acontecer instrução de Jó A então aí nós vamos pular para localização aqui indicada Nossa CPU né com essas quatro instruções ela consegue aí fazer várias operações tá aqui para mostrar um exemplo para vocês né esse exemplo eu já tinha comentado com vocês né então
além do nome simbólico e do operando a gente pode ter um rótulo que é opcional e um comentário que o funcionam bom então a gente depois vai dizer porque que a gente coloca o rótulo a gente já falou né de repente indiano que vai para um rótulo né e o comentário é para facilitar E aí vocês vão ver se exemplo da figura embaixo né a gente tem por exemplo aí quatro etiquetas né ou chamada de rótulo né a mesma coisa rótulo ou etiqueta que estão as letras i j e n é são as quatro etiquetas
o montador né no caso aí de uma arquitetura x86 o montador é da arquitetura ele chama Vem de Mão de montagem né e miados me né vende Camasmie né ele requer que você coloque: A então você na arquitetura x86 você vai trabalhar aí com dois pontos né logo após a etiqueta né então aquilo que ele tá mostrando é que você coloca 2 pontos e cada máquina tem alguns registradores de é importante né a gente ter os nomes né então é importante saber que o nome dos registradores e alguns detalhes de syntaxe né eles estão muito
relacionadas à arquitetura que você tá trabalhando por exemplo aqui na arquitetura Intel x86 né os registradores de dados que a gente se torna os slides passados ele tem esses nomes que estão aqui e assim e B in our BX não tá aqui né mas tem 6 x USB x ou EC x e assim por diante a o campo copiconde né aqui o nosso ficou onde ele contém uma abreviatura simbólica né se a declaração for uma representação simbólica por uma instrução de máquina ou um comando para o próprio ascende A então que a gente tem um
novo a escolha de um nome adequado é apenas uma questão aí do projetista da língua é de montagem né que muitas vezes pode escolher o nome simbólico de uma maneira diferente tá é os projetistas do maze decidiram usar movies tanto para carregar os registradores a partir da memória quanto para armazenar um registrado o registrado o uma informação né mas poderiam ter Escolhido um ovo e com e por exemplo ou ou né ou Store poderia ir só uma questão de opção os programas de montagem em geral precisa reservar espaço aí para as variáveis né os projetistas
de montagem dos mavs da arquitetura x86 é Eles escolheram aí bebê né bebê para armazenar dados aí nas variáveis Então se vocês encontrarem aqui na variável é e eu tô armazenando três na variável J eu tô armazenando quatro né bebê o d-fine Double né então é Inicial dessas duas palavras já que uma palavra é no 8088 tinha 16 bits né Então aí você tem esse exemplo aqui representando aí quatro meses né com valor inicial aí três é o campo de operando de uma declaração linguagem de montagem ela executa usado para especificar os endereços e os
registradores usados como operando pela instrução de máquina o campo de operando de uma instrução de adição de inteiros informa o valor que será somado aqui né e o dia instrução de desvio informa para onde desviar né operando esse pode ser registrador constante localização de memória né como a gente já falou E aí finalmente que a gente não tinha comentado comentário né um lugar aí onde os programadores podem podem colocar alguma explicação um fala sobre o programa A é muito difícil quando a gente não tem comentário né entender né fica quase a incompreensível para todos os
programadores né então é muito interessante o campo de comentário Tá então vamos lá pro programa aqui a gente tem um programa que a ideia é calcular 3 x 10 né que é a mesma coisa de fazer 10 mais 10 mais 10 né Então nesse programa é um programa Bem Simples né são dois uma multiplicação de dois números né mas aí a gente vai ver um pouquinho de sentar nessa primeira linha aí na linha 10 né Vamos imaginar aí que nós temos o opcode aí no eu não usei o senhor é né eu criei uma sentar
que ser diferente e os operandos R A e três tá o primeiro é o nome do registrador então ele diferente a fasm tô chamando meu registrador aí Dr a né como eu chamei minha menstruação de muro com esse em vez de você tomou o primeiro então é o registrador o segundo por ele está entre colchetes ele é o endereço de memória na linha 12 a gente vai envolver o valor zero né o valor 0 para o registrador RC então você vê que ali na linha 10 e 11 a gente move endereço e na linha 12
a gente move o valor e na linha 13 né A gente trabalha com dois registradores seus valores de dois registradores né então é bem interessante essa essa questão da gente poder fazer Então nesse nesse trecho aí a gente assumi que é memória já tem valores né lá no espaço três lá no espaço quatro e que esses valores foram transferidos né para r a e r&b a RC tem 10 que que vai acontecer depois RC vai receber o valor que tá lá é armazenado em R A né o valor que tá lá na três anos o
cortina 3 né seja o valor 10 então aí RC para receber 10 e r&b vai receber o que o valor um a a gente vai continuar esse programinha mas antes disso eu queria falar para vocês né A questão da do gel né o Jump aí é uma coisa interessante né então nós temos na nossa ula né ela recebe basicamente dois valores né um de instrução para dar o resultado e os valores aí estão registrados e o endereço por exemplo né e a instrução é o subir também entrar Então veja dois valores e isso só a
urna resolve a instrução e atualiza o registrador de status né essa atualização é baseada no cálculo que acabou de ser Executar a ideia simples se o resultado é zero então Flag de status da nossa CPU lembra do Fred de status fica com zero senão fica com um nosso exemplo o frete destaca fica só com essa responsabilidade Mas ele tem outras e possibilidades por exemplo Como tratar o ver flor o erro de divisão por zero ele tá então a condição diante ela Analisa se não é zero no Flag de estátua pois o resultado é não é
zero né então nosso programa faz o jump para linha 13 né Então aí RC vai ser 10 mais 10 e vai dar 20 e RD na verdade vai ser dois menos um né que Vai resultar em um como resultado da subtração aí em RB ainda não é zero aí tu vai acontecer ele pula de novo para linha 13 e é mais fácil para entender né É nesse próximo nesse próximo slime tá então o que que vai acontecer né ele vai colocar lá vamos supor aqui na memória no espaço três tenho 10 e no espaço quatro
né Tem quantas vezes ele vai fazer isso né três vezes 10 né E aí ele vai fazer o que né ele vai colocar zero para RC E aí ele vai passar o valor de arriar para RC né então ele vai receber 10 e aí USB vai fazer o que ele tinha zero né como ele adicionou 0 com 10 da 10 o RB ele vai receber um porque ele vai subir trair um do valor que ele tinha então se ele tinha três quando ele subtraiu um ele vai ficar com dois e aí ainda não é zero
então ele vai para localização da linha 13 aí a linha 13 vai pegar o que vai somar o próximo valor de arriar próximo vai os 10 né tá com 10 que ele vai somar mais uma vez 10 tinha 10 vai ser ouvindo aí ele vai subir trair um do RB CRB tinha dois da vez passada agora ele tem um aí ele vai falar não é zero né nós ir ou ele vai para a linha 13 tinha 20 no RC com mais 10 do RH né lembra que eu erre a ficou conversa deu 30 agora o
rd ele tinha um da vez passada ele subtraiu um vai ficar com zero e agora é zero aí ele vai mover o resultado de Rc para o espaço de memória 5 estão lá na nossa memória né no espaço três tem vai ter dez né eu acabei mexendo né na RB vai ter zero né e no RC né vai ter o valor 30 que é o resultado aí que vai ser passado no Espaço Cinco tá então essa vai ser a nossa organização era isso que vou mandar para vocês na próxima aula agora a gente vai trazer
nos compiladores tá bom Pessoal espero que vocês tenham gostado até a próxima aula pessoal é [Música] E aí [Música]
Related Videos
Sistemas Computacionais - Linguagem C e Linguagem Assembly (ASM)
15:00
Sistemas Computacionais - Linguagem C e Li...
UNIVESP
7,380 views
Sistemas Computacionais - Linguagens de montagem e de máquina
24:55
Sistemas Computacionais - Linguagens de mo...
UNIVESP
12,957 views
Organização de Computadores - Aula 06 - Conjunto de Instruções do MIPS
22:22
Organização de Computadores - Aula 06 - Co...
UNIVESP
56,099 views
O que é Assembly? - Arquitetura x86
43:56
O que é Assembly? - Arquitetura x86
Pedro Botelho
11,327 views
Sistemas Computacionais - Pipeline
20:53
Sistemas Computacionais - Pipeline
UNIVESP
10,941 views
you can learn assembly FAST with this technique (arm64 breakdown)
12:37
you can learn assembly FAST with this tech...
Low Level
200,580 views
Trump gets UNEXPECTED SURPRISE in Greenland
13:11
Trump gets UNEXPECTED SURPRISE in Greenland
Brian Tyler Cohen
493,673 views
Assembly x86-64 - Introdução à Arquitetura
44:22
Assembly x86-64 - Introdução à Arquitetura
Professor Igor Gonzalez
5,973 views
Music for Work — Deep Focus Mix for Programming, Coding
1:29:35
Music for Work — Deep Focus Mix for Progra...
Chill Music Lab
3,447,778 views
Elon Musk exposes why Democrats don’t want ‘waste and fraud’ to be turned off
17:29
Elon Musk exposes why Democrats don’t want...
Fox Business
6,544,225 views
Europe's Just Pulled the Trigger—Counterstrike to Cripple the Entire U.S. Auto Industry!
23:07
Europe's Just Pulled the Trigger—Counterst...
UNOMY
1,079,946 views
Transformers (how LLMs work) explained visually | DL5
27:14
Transformers (how LLMs work) explained vis...
3Blue1Brown
5,363,249 views
Sistemas Computacionais - Unidade Central de Processamento - CPU
22:01
Sistemas Computacionais - Unidade Central ...
UNIVESP
20,058 views
Arquitetura e Conjunto de instruções - 01A - Introdução às Linguagem Assembly e Linguagem de Máquina
42:31
Arquitetura e Conjunto de instruções - 01A...
Adalbery Castro
7,948 views
Morning Coffee: Warm Vintage Music Playlist for Breakfast and a Good Mood
2:30:57
Morning Coffee: Warm Vintage Music Playlis...
Nostalgic Radio
251,789 views
Assembly Language Programming with ARM – Full Tutorial for Beginners
2:29:32
Assembly Language Programming with ARM – F...
freeCodeCamp.org
1,599,429 views
How assembly language loops work
31:39
How assembly language loops work
Ben Eater
754,060 views
A EVOLUÇÃO DOS COMPUTADORES (Do Início até a Atualidade)
43:57
A EVOLUÇÃO DOS COMPUTADORES (Do Início até...
Za Medik
15,883 views
Music for Work — Deep Focus Mix for Programming, Coding
3:24:55
Music for Work — Deep Focus Mix for Progra...
Chill Flow
570,772 views
Linguagem de baixo e alto nível - qual a diferença?
21:14
Linguagem de baixo e alto nível - qual a d...
Victor Lima - Ciência da Computação
21,279 views
Copyright © 2025. Made with ♥ in London by YTScribe.com