sistemas de computação - decom-ufop · sub : mesmo formato de add inc : ex.: inceax; ax++e ... no...
TRANSCRIPT
![Page 1: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/1.jpg)
Sistemas de ComputaçãoIntrodução a programação Assembly
Haroldo Gambini Santos
Universidade Federal de Ouro Preto - UFOP
5 de novembro de 2009
Haroldo Gambini Santos Sistemas de Computação 1/30
![Page 2: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/2.jpg)
Assembly
Porque não C (ou outra linguagem de alto nível)?
C é mais simplesMais próximo da linguagem natural (inglês, no caso)
C é portávelUm mesmo programa pode rodar nos SOs Linux ouWindows, usando processadores Power PC ou Intel
Haroldo Gambini Santos Sistemas de Computação 2/30
![Page 3: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/3.jpg)
Assembly
Porque programar em Assembly
Código em Assembly pode ser mais rápido e menor do quecódigo gerado por compiladores
Assembly permite o acesso direto a recursos do hardware, oque pode ser difícil em linguagens de alto nível
Programar em Assembly permite que se ganhe umconhecimento profundo de como os computadoresfuncionam
Conclusão
Saber Assembly é muito útil mesmo que nunca se programediretamente nele!
Haroldo Gambini Santos Sistemas de Computação 3/30
![Page 4: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/4.jpg)
Assembly
Porque programar em Assembly
Código em Assembly pode ser mais rápido e menor do quecódigo gerado por compiladores
Assembly permite o acesso direto a recursos do hardware, oque pode ser difícil em linguagens de alto nível
Programar em Assembly permite que se ganhe umconhecimento profundo de como os computadoresfuncionam
Conclusão
Saber Assembly é muito útil mesmo que nunca se programediretamente nele!
Haroldo Gambini Santos Sistemas de Computação 3/30
![Page 5: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/5.jpg)
O Assembly do 80386
Características
Primeiro processador da Intel de 32 bits com recursos�modernos�:
Modo protegido de memória (nas versões antigas, como o8086 havia o �modo real�, onde cada programa poderiabagunçar livremente a memória de algum outro)Todos os sistemas operacionais modernos operam rodandosobre o modo protegidoMultitarefa
Novos chips da Intel mantém compatibilidade: Pentium,Core2Duo, Atom, . . .
Existem diversas ferramentas livres na Internet quefacilitam o desenvolvimento desse tipo de código
Haroldo Gambini Santos Sistemas de Computação 4/30
![Page 6: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/6.jpg)
Assembly com o NASM
Netwide Assembler: NASM
Software livre
Portável: roda em vários sistemas operacionais Windows eLinux
Simples de usar e com suporte a macros
Haroldo Gambini Santos Sistemas de Computação 5/30
![Page 7: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/7.jpg)
Registradores 80386
32 bits
EAX
EBX
ECX
EDX
ESI
EDI
EBP
ESP
32 bits
EFLAGS
CS FS
DS GS
ES SS
16 bits 16 bits
EIP
Haroldo Gambini Santos Sistemas de Computação 6/30
![Page 8: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/8.jpg)
Registradores pré-80386
32 bits
EAX
EBX
ECX
EDX
ESI
EDI
EBP
ESP
32 bits
EFLAGS
CS FS
DS GS
ES SS
16 bits 16 bits
EIP
AX
BX
CX
DX
SI
DI
BP
SP
IP FLAGS
Haroldo Gambini Santos Sistemas de Computação 7/30
![Page 9: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/9.jpg)
Registradores 80386
Registradores de Propósito Geral - Uso Típico
EAX : Registrador acumulador. Usado para endereçarE/S, aritimética, etc.
EBX : Registrador base. Usado como ponteiro paraacesso à memória, interrupções.
ECX : Registrador contador. Usado como contador emlaços, interrupções.
EDX : Registrador de dados. Usado para endereçar E/S,aritmética, interrupções.
Haroldo Gambini Santos Sistemas de Computação 8/30
![Page 10: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/10.jpg)
Registradores 80386
Registradores de Endereço
EIP Ponteiro de índice: guarda um índice indicando apróxima instrução a ser executada.
EBP Endereço base da pilha.
ESP Endereço do topo da pilha.
EDI Índice do destino - na operação de cópia de cadeiasde caracteres.
ESI Índice da fonte - na operação de cópia de cadeiasde caracteres.
Haroldo Gambini Santos Sistemas de Computação 9/30
![Page 11: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/11.jpg)
Registradores 80386
Registador EFLAG
Cada um de seus 32 bits controla ou exibe algum estado �nal/intermediário de uma operação.Exemplo:
6 Zero Flag: indica se o resultado de uma operaçãofoi zero.
10 Direction Flag: usado no processamento de strings,indica quando o processamento deve ser feito doinício para o �m ou o contrário.
11 Over�ow Flag: usado por operações aritméticasque podem gerar over�ow.
Haroldo Gambini Santos Sistemas de Computação 10/30
![Page 12: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/12.jpg)
Palavra - word
Palavra
Registradores de 32 bits, mas palavra no Assembly do 80386tem 16 bits.
unidade de memória tam. em bytes
word 2 bytesdouble word 4 bytesquad word 8 bytesparagraph 16 bytes
Haroldo Gambini Santos Sistemas de Computação 11/30
![Page 13: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/13.jpg)
Tipos de Operandos
registrador o operando refere-se diretamente ao conteúdo deum registrador da CPU;
memória refere-se a um dado em memória - posiçãoconstante ou informada em um registrador;
imediato valores �xos expressos diretamente na instrução
implicado valor não mostrado diretamente. ex.: operação deincremento
Haroldo Gambini Santos Sistemas de Computação 12/30
![Page 14: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/14.jpg)
Instruções Básicas
mov dest , srccopia em dest o src conteúdo de src. Ex.:mov eax, 3; grava 3 no registrador eax
mov ebx, eax; grava o conteúdo de eax em ebx
add
adiciona inteiros. Ex.:add eax, 4; eax = eax + 4
add ebx, eax; ebx = ebx + eax
sub : mesmo formato de addinc : ex.: inc eax; eax++
dec : ex.: dec eax; eax--
Haroldo Gambini Santos Sistemas de Computação 13/30
![Page 15: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/15.jpg)
Diretivas
%de�ne
de�ne um valor constante a ser usado no programa:%define SIZE 100
mov eax SIZE
Haroldo Gambini Santos Sistemas de Computação 14/30
![Page 16: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/16.jpg)
Diretivas de Dados
Reservam de espaços de memória. Os espaços são marcados comrótulos (labels):
L1 db 0 ; byte rotulado L1 com valor inicial 0
L2 dw 1000 ; palavra rotulada L2 com valor inicial 1000
L3 db 110101b ; byte inicializado para 110101 em binário
L4 db 12h ; byte inicializado to 12 em hexadecimal
L5 db 17o ; byte inicializado to 17 em octal
L6 dd 1A92h ; double word inicializado 1A92 em hexadecimal
L7 resb 1 ; 1 byte não inicializado
L8 db "A" ; byte inicializado o código da letra A (65)
L9 db 0, 1, 2, 3 ; define 4 bytes
L10 db "w", "o", "r", 'd', 0 ; uma string compatível com C
L11 db 'word', 0 ; mesmo que L10
Haroldo Gambini Santos Sistemas de Computação 15/30
![Page 17: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/17.jpg)
Rótulos (labels)
10111100
byte
Endereço:
11010110 00001011 00000001 00111010 11110100
0 1 3 4 52
L1
Rótulos
Reservam espaço em algum lugar na memória eopcionalmente inicializam seu conteúdo
No decorrer do programa o mesmo espaço de memória éfacilmente acessado através de seu rótuloExemplo:
L1 db 1
No caso, L1 foi associado a célula de memória com endereço3 e seu conteúdo inicializado com 1
Haroldo Gambini Santos Sistemas de Computação 16/30
![Page 18: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/18.jpg)
Rótulos (labels)
10111100
byte
Endereço:
11010110 00001011 00000001 00111010 11110100
0 1 3 4 52
L1
Usando rótulos
Similar ao conceito de ponteiros em C
Pode-se trabalhar com o endereço do rótulo ou com o seuconteúdo
mov eax, L1
Registrador eax recebe 3
mov eax, [L1]
Registrador eax recebe 1
Haroldo Gambini Santos Sistemas de Computação 17/30
![Page 19: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/19.jpg)
Rótulos de mais de um byte
L1 dd 35
O tipo dd refere-se a um double word do 80386 (32 bits),bom para armazenar inteiros
mov [L1], 15
Não funciona ! O assembler não sabe se deve trabalhar combyte, palavra ou palavra dupla, por exemplo
Correto:mov dword [L1], 15
Haroldo Gambini Santos Sistemas de Computação 18/30
![Page 20: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/20.jpg)
Tipos de Dados
res* e d* - su�xos:
B byte
W word
D double word
Q quad word
T ten bytes
Haroldo Gambini Santos Sistemas de Computação 19/30
![Page 21: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/21.jpg)
Estrutura
Haroldo Gambini Santos Sistemas de Computação 20/30
![Page 22: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/22.jpg)
Comandos de Entrada e Saída
Usualmente dependente do sistema operacional.Solução mais portável:
asm_io.inc
Biblioteca com comandos simpli�cados:Linux:http://www.drpaulcarter.com/pcasm/linux-ex.zipWindows:http://www.drpaulcarter.com/pcasm/ms-ex.zip
Haroldo Gambini Santos Sistemas de Computação 21/30
![Page 23: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/23.jpg)
Imprimindo
%include "asm_io.inc"
segment .data
prompt1 db "Digite um numero: ", 0
segment .text
...
mov eax, prompt1
call print_string
...
Haroldo Gambini Santos Sistemas de Computação 22/30
![Page 24: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/24.jpg)
Lendo um Inteiro
%include "asm_io.inc"
segment .bss
x resd 1
segment .text
...
call read_int
mov [x], eax
...
Haroldo Gambini Santos Sistemas de Computação 23/30
![Page 25: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/25.jpg)
Desvios
Rótulos de Código
Marcam determinada posição no código. Ex.:
mov ebx, [y]
mov eax, [x]
call print_string
...
Instrução Jump: JMP
jmp rotulo_de_codigo
Faz com a próxima instrução executada seja aquela situadaimediatamente após o rótulo �rotulo_de_codigo�.
Haroldo Gambini Santos Sistemas de Computação 24/30
![Page 26: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/26.jpg)
Repetição
Instrução LOOP
Formato: LOOP posição_para_saltar
Veri�ca o valor do registrador ECX, caso o mesmo seja diferentede zero pula para a parte do código rotulada emposição_para_saltar.
Haroldo Gambini Santos Sistemas de Computação 25/30
![Page 27: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/27.jpg)
Repetição
Equivalente em C
for (int i=0 ; (i<10) ; i++ )
printf("%d\n", i);
Assembly
%include "asm_io.inc"
segment .text
...
mov [ECX] 10
inicio:
mov eax, ecx
call print_int
loop inicio
...
Haroldo Gambini Santos Sistemas de Computação 26/30
![Page 28: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/28.jpg)
Testes condicionais
Executando o �if� em assembly
Duas partes:1 Executa uma comparação (instrução CMP)
Altera valor do registrador EFLAGS
2 Avalia resultado (instruções JE, JNE, ...)
Haroldo Gambini Santos Sistemas de Computação 27/30
![Page 29: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/29.jpg)
Testes condicionais
Equivalente em C
if ( x==0 )
comandoA;
else
comandoB;
Assembly
...
mov eax, [x]
cmp eax, 0
je posicaoA
jmp posicaoB
posicaoA:
comandoA
jmp depoisTeste
posicaoB:
comandoB
jmp depoisTeste
depoisTeste:
...
Haroldo Gambini Santos Sistemas de Computação 28/30
![Page 30: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/30.jpg)
Desvios
Incondicional
Haroldo Gambini Santos Sistemas de Computação 29/30
![Page 31: Sistemas de Computação - DECOM-UFOP · sub : mesmo formato de add inc : ex.: inceax; ax++e ... No caso, L1 foi associado a célula de memória com endereço 3 e seu conteúdo inicializado](https://reader036.vdocuments.pub/reader036/viewer/2022062908/5adceb5e7f8b9a213e8c306d/html5/thumbnails/31.jpg)
Referências
PC Assembly Language:http://www.drpaulcarter.com/pcasm/
(livro em PDF)
The Netwide Assembler:http://www.nasm.us/
Writing a Useful Program with NASM:http://leto.net/writing/nasm.php
GNU Compiler Collection:http://gcc.gnu.org/
MingW: Minimalist GNU for Windowshttp://www.mingw.org/
Haroldo Gambini Santos Sistemas de Computação 30/30
1 Introdução à Programação COM 100 Notas de Aula 04 UFOP – ICEB – DECOM Prof. Marcelo Luiz Silva Red
1 Introdução à Programação COM 100 Notas de Aula 03 UFOP – ICEB – DECOM Prof. Marcelo Luiz Silva Red
1 Introdução à Programação COM 100 Notas de Aula 02 UFOP – ICEB – DECOM Prof. Marcelo Luiz Silva Red