Programação em Assembly Ambiente de Programação Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.

Slides:



Advertisements
Apresentações semelhantes
SOFTWARE BÁSICO.
Advertisements

Assembly Language for Intel-Based Computers, 5th Edition
ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM
ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM
ARQUITETURA DE COMPUTADORES ANEXO-1: INSTRUÇÕES (LOGICAS) AND DE DADOS ENTRE REGISTRADORES REG 0 :AH,AL,AX,BH,BL,BX,CH,CL,CX,DH,DL,DX,SI,DI,SP,BP,CS, DS,ES,SS.
ANEXO-1: INSTRUÇÕES (MOVIMENTAÇÃO DE DADOS)
Assembly x86.
A arquitectura IA32 A arquitectura de um processador é caracterizada pelo conjunto de atributos que são visíveis ao programador. Tamanho da palavra Número.
A ULA P RÁTICA - A SSEMBLY Ciro Luiz Araujo Ceissler.
Aula Prática - Assembly
Linguagem de Montagem.
Linguagem de Montagem PROVA 4 – 3/12.
Prática de Programação Assembly 8086
Hugo Calazans André Ricardo
Arquitetura de Computadores
Disciplina: Microcontroladores Prof. Remy Eskinazi, MSc
Disciplina: Microcontroladores Prof. Remy Eskinazi, MSc
8 - 1 Organização Básica de Computadores e Linguagem de Montagem Ricardo Pannain ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM A pilha e subrotinas.
Hugo Calazans André Ricardo
Ciro Ceissler / ASSEMBLY Ciro Ceissler /
Lucas Aranha ASSEMBLY Lucas Aranha
ASSEMBLY – aula 2 Hugo Calazans
Ney Laert Vilar Calazans Exemplo de Apresentação de TP1 Descrição Resumida de uma Arquitetura de Processador: o estudo de caso do Intel 8086 ORGANIZAÇÃO.
POLINÔMIOS. Polinômio ou função polinomial na variável complexa x é toda função P: ℂ → ℂ definida por P(x) = a n x n + a n–1 x n–1 + a n–2 x n–2 +...
Programação em Assembly Conceitos Iniciais Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Variáveis e Atribuições.
Introdução à Computação para Engenharia MAC2166
RODOLFO SOARES TEIXEIRA OBMEP NA ESCOLA
Arquitetura do SET de instruções Instruction SET CISC vs RISC
Programação em Assembly
NEANDERWin - Simulador
Banco de Registradores e ALU
ELD - Eletrônica Digital
Microprogramação.
PSI3441 – Arquitetura de Sistemas Embarcados
Fundamentos de Programação 1
Comandos da Linguagem C
Estruturas de Repetição
Programação em C Aula 2.
Prof. Wellington Franco
IP – Condicionais e controle de fluxo
PIT – PROGRAMA INTERNO DE TREINAMENTO 2015
IP – Repetições Prof. Eduardo Falcão.
Arquitetura de Computadores
Introdução à Programação
Divisão de Racionais 5º ano.
Organização de Computadores
Aula 02 – Produtos Notáveis
Binário, Hexadecimal, Decimal
Organização de Computadores
Ney Laert Vilar Calazans
EQUAÇÕES DO 1º E 2º GRAUS (Aula 6)
O que você deve saber sobre
Agenda O que é Operadores Relacionais Operadores Lógicos
Projeto 1: Game Genius usando AppInventor®
Aritmética Computacional
Instruções de Acesso à Memória e de Desvio Condicional
ALGORITMOS.
Lógica e Princípio de Sistemas Digitais
Programação em assembly
RISC vs. CISC Introdução
TOP 10 - DINÂMICO matemátICA MÓDULO 1
Conjunto de instruções
Python: Comandos Básicos
Introdução a progrmação Comandos condicionais: if e switch
RESULUÇÃO DOS EXERCÍCIOS E
MATEMÁTICA.
Aula 3 Professores: Conteúdo: Dante Corbucci Filho
Transcrição da apresentação:

Programação em Assembly Ambiente de Programação Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores

Ambiente de Programação NASM - The Netwide Assembler Assembler que será utilizado nas práticas Manual em: Editor Qualquer editor de texto Eclipse tem plugin para Assembly Criar um executável Assemblagem e linkagem

Ambiente de Programação Assemblagem nasm -f Ex.: nasm -f elf exemplo.asm elf gera arquivo exemplo.o Se quiser informação de debug use -g Ex.: nasm -f elf -g exemplo.asm Linkagem Ex.: gcc -o -g exemplo exemplo.o Cria executável exemplo Para visualizar: objdump -D exemplo

Ambiente de Depuração DDD – Data Display Debugger Visualizador gráfico do gdb

Estrutura do Programa Seções obrigatórias.data.text Rótulo main (quando linkado pelo gcc) section.data ;variaveis section.text globl main main:

Primeiro Programa section.data hello: db ‘Hello word!’, 10 helloLen equ $-hello section.text global main main: mov eax, 4 ; system call para sys_write mov ebx, 1 mov ecx, hello mov edx, helloLen int 80h ; chamada do kernel mov eax, 1 ; system call para exit mov ebx, 0 ; parametro para exit int 80h

Alguns registradores

System Calls no Linux Você pode ter ajuda sobre qualquer chamada de sistema no Linux dando um man 2 syscall Ex.: man 2 write (Para sair da ajuda, tecle q.) O mecanismo de system call no Linux é semelhante ao DOS. Porém, sua interrupção é a int 80h e lidamos com 32 bits. No DOS, tinhamos 16 bits apenas.

System Calls no Linux Coloque o número da system call em EAX; Coloque os argumentos da system call em EBX, ECX e assim por diante - caso todos os regs estejam ocupados, EBX guarda o local na memória onde está a lista de argumentos; Chame a interrupção int 80h; O resultado da chamada geralmente é retornado em EAX.

Operações aritméticas e lógicas Operações: aritméticas: add, sub, inc, dec, cmp lógicas: and, or, xor, not Realizadas pela ALU Cada operação altera o estado das flags Exemplos: CF – Carry OF – Overflow ZF – Zero SF – Sign

ALU- Multiplicação e Divisão MUL fonte multiplica como inteiro sem sinal IMUL fonte multiplica como inteiro com sinal DIV fonte divide como inteiro sem sinal Exemplo: div bx Dividendo em DX e AX, divisor em bx Quociente em AX e o resto em DX IDIV fonte divide como inteiro com sinal

ALU- Multiplicação AL x fonte= AX (multiplicação de bytes, resultado em uma palavra) AXx fonte= DX:AX (multiplicação de palavras, resultado em palavra dupla) EAX x fonte = EDX:EAX (multiplicação de palavras duplas, resultado em 64 bits) CF e OF são ligados se a metade mais significativa do resultado não for apenas extensão do sinal; demais flags indefinidos

Carry Flag - CF CF a 1: se há transporte do bit mais significativo Interpretação do programa: uma op. aritmética sobre números sem sinal deu um resultado fora do domínio de valores válidos mov al, 0FFh FFh (255) add al, (4) h (259) CF = 1 al = (limite válido é 255)

Overflow Flag - OF OF a 1: se uma op. aritmética sobre números com sinal, dá resultado fora do domínio de valores válidos mov al, (4) add al, 7Fh (127) (-125? ) 131 A soma de dois números positivos não pode dar negativo! OF = 1 (4+127 > limite de 127)

Zero Flag - ZF ZF = 1 se resultado da última operação efetuada pela ALU for zero ZF = 0 se o resultado for diferente de zero Exemplo: mov ax, 2 sub ax, 2 ZF = 1 mov ax, 3 sub ax, 2 ZF = 0 0

Saltos condicionais (com um flag) Testam diretamente um flag: Carry CF=1 JC – Jump if Carry CF=0 JNC – Jump if Not Carry Overflow OF=1 JO – Jump if Overflow OF=0 JNO – Jump if Not Overflow Signal SF=1 JS – Jump if Sign SF=0 JNS – Jump if Not Sign Zero ZF=1 JZ – Jump if Zero ZF=0 JNZ – Jump if Not Zero

CMP - Compare cmp x,y faz x-y mas não guarda o resultado, apenas altera as flags CF = 1 se houver bit de borrow, (x<y para números sem sinal) OF=1 se houver overflow, ZF = 1 se os operandos forem iguais conclusão: cmp compara os dois operandos: usa-se em vez do sub quando se quer alterar apenas as flags

Rótulos (labels) Em vez de usar endereços, no assembly pode-se usar rótulos para as posições de memória Exemplo: ciclo representa o endereço de memória onde fica a instrução add eax, ebx ciclo: add eax, ebx jmp ciclo

Exemplo IF Como executar código diferente dependendo de uma condição? condição estado das flags salto condicional (jxx) if (condicao) codigo_do_then; else codigo_do_else; ; código que altere as flags ; (exemplo cmp eax, 5) jxx bloco_else ; codigo_do_then jmp fim_if bloco_else: ; codigo_do_else fim_if:

Exemplo: while while (condicao) codigo_do_ciclo; inicio_while: ; código que altere as flags ; (exemplo cmp ax, 5) jxx fim_while ; codigo_do_ciclo jmp inicio_while fim_while:

Exemplo: do-while do codigo_do_ciclo; while (condicao); inicio_do: ; codigo_do_ciclo ; código que altere as flags ; (exemplo cmp ax, 5) jxx inicio_do

Exemplo For ciclo com base num contador for ( i=n; i>0; i-- ) codigo_do_ciclo; ;exemplo: mov ecx, n inicio_for: cmp ecx, 0 je fim_for ; codigo_do_ciclo dec ecx jmp inicio_for fim_for:

Loop Salto com base num contador, para ciclos que executam pelo menos uma vez equivale a ‘dec cx’ seguido de ‘jnz’ Usa implicitamente o registo CX (16bits) for ( i=n; i>0; i-- ) codigo_do_ciclo; mov cx, n inicio_for: ; codigo_do_ciclo loop inicio_for

Exercícios Escrever os exemplos da aula II, compilar, linkar e executar usando o ddd