Assembly
[with GIFs]
Hi!
- Computer Engineer
- Programming
- Electronics
- Math <3 <3
- Physics
- Lego
- Meetups
- Animals
- Coffee
- GIFs
#HumanisingScience #EuRuKo @hannelita
Por que Assembly?
- Web Dev muitas vezes utiliza tempo no alto nível
- E o nível mais baixo?
- O que vem abaixo de C?
- Escovar bits
- É legal!
- Curiosidade
Por que Assembly?
- Desafios de lógica
- Poder sobre o hardware
- É possível ver mais afundo a ligação entre hardware e software
- Queria aprender de forma prazerosa (aprendi de forma traumática)
O que os computadores entendem?
111000011000101010101010110000001111000011100001110000011111100000
Precisamos de uma forma mais eficaz de nos comunicarmos com as máquinas
Linguagem mais concisa
Assembly
Depois algum mecanismo transforma essa linguagem em 1 e 0
Assembler
O desafio
Construir uma linguagem que represente o fluxo de dados num hardware
Pergunta: A estrutura de todas as CPUs são iguais?
Existem algumas diferenças estruturais
Logo, existem variações no Assembly
E no Assembler
É como se fossem dialetos
Os primórdios
Motorola 6800
1975
De volta a imagem
Como forneço um dado para a CPU?
Registradores
Insira seus binários aqui
Acumulador A
A
É possível escrever e ler
Qual o tamanho desses registradores?
Variam com a arquitetura
LDAA #0h
ADDA #1h
A == #1h
Quantos registradores eu tenho?
Depende do processador :)
No 6800, temos um registrador similar ao A. (chutem o nome)
A
B
Faça um programa que
- Carregue #0h no A
- Some #1h no A
- Carregue #1h no B
- Some A e B
Faça um programa que
- LDAA #0h
- ADDA #1h
- LDAB #1h
- ABA
Perguntas
- Qual o valor inicial de A e B?
- Quando realizo o ADDA, pra onde vai o resultado?
- Como o programa sabe qual a próxima instrução a ser executada?
- Posso manipular livremente o conteúdo de todos os registradores?
- O que é esse #?
- Posso manipular apenas hexadecimais?
- Como faz pra números sinalizados?
- E se a resposta fosse maior que 8 bits?
Qual o valor inicial de A e B?
Não sabemos! Por isso precisa zerar. ADDA sem zerar não possui resultado determinado.
- Quando realizo o ADDA, pra onde vai o resultado?
Para A. Os resultados de operações costumam ir para A.
Quer dizer que A é mutável?
Sim.
Então perco o valor inicial de A após a operação?
Sim.
Vish.
Sim.
- Como o programa sabe qual a próxima instrução a ser executada?
Existe (para quase todos os Assembly) um registrador especial que aponta para a próxima instrução, chamado Program Counter (PC). No início dos programas, ele aponta para zero/qualquer valor inicial estabelecido. A primeira instrução começa lá.
Então as instruções estão em memória?
Sim
- Posso manipular livremente o conteúdo de todos os registradores?
Nem todos. Há alguns que só vão aceitar outros endereços de memória como parâmetros. Há também os que não suportam nenhum tipo de operação, a não ser transferir ender
Então eu posso passar um endereço para A?
Sim.
- O que é esse #?
# faz menção ao que chamamos de *Modo de endereçamento*. # pede para o número 0h (0 hexadecimal) ser carregado em A.
E se eu tirar o #? Dá pau?
Não sintaticamente. Mas se tirar o #, ele vai carregar o que estiver na posição 0h de memória
- Ainda sobre esse #
Ah! E sem o # temos outro modo de endereçamento?
Sim! Chama-se endereçamento por offset ou deslocamento. Com o #, temos o chamado 'endereçamento imediato'
- Posso manipular apenas hexadecimais?
Não. Você pode passar decimais, binários. Mas o hexadecimal é o mais comum.
- Como faz pra números sinalizados?
Geralmente o bit da esquerda ('bit mais significativo) representa o sinal. Por exemplo:
10000001 pode ser 129 ou -1
Legal, quem determina isso?
Você e o contexto do programa.
- E se a resposta fosse maior que 8 bits?
( ͡° ͜ʖ ͡°)
Sobre as duas últimas perguntas, sinal e overflow
Existe um registrador que guarda informações relacionadas
Flag status
cada Assembly tem o seu
Flag status
- Carry, Parity, Zero, Sign, Overflow
- Cada bit desse registrador é uma flag
- Se é negativo, olhar bit de sinal
- Se deu overflow, olhar carry bit e overflow bit
ᕕ( ᐛ )ᕗ
Como carregar e manipular números maiores que 8 bits?
Alternativas
- Compre um novo processador
- 16 bits = 8 bits + 8 bits - carregue da memória (endereçamento por offset)
Exemplo no quadro
Outras discussões
Microprocessador vs Microcontrolador
Little Endian vs Big Endian
Sobre os conjuntos de instruções
CISC vs RISC
Divisão, exponenciação, números de 64 bits
Interrupções
Subrotinas
Referências e Créditos
- The Art of Assembly Language - https://www.google.com.br/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=the%20art%20of%20assembly%20language
- 6800 Datasheet https://www.google.com.br/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&sqi=2&ved=0ahUKEwjJ4o-I9Z_JAhUPoJAKHddnCR4QFggbMAA&url=http%3A%2F%2Fwww.alldatasheet.com%2Fdatasheet-pdf%2Fpdf%2F82499%2FMOTOROLA%2F6800.html&usg=AFQjCNHlHGHqAku94dRheH4D54TJGThB5Q&sig2=8Wjc2cj5qgpsXDnNl-pZsQ&bvm=bv.108194040,d.Y2I
- 8080 Datasheet - https://www.google.com.br/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwik28uU9Z_JAhWMJZAKHUwjBEUQFggbMAA&url=http%3A%2F%2Fwww.classiccmp.org%2Fdunfield%2Fr%2F8080.pdf&usg=AFQjCNGGh1mD44t46DDmwf9HPU97tOPBXg&sig2=MlHb7oVwf1D5ekDQtMDrcg&bvm=bv.108194040,d.Y2I
- GIFs by @lafp
Thank you :)
Questions?
hannelita@gmail.com
@hannelita
Assembly
By Hanneli Tavante (hannelita)
Assembly
- 3,630