A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Programação em Assembly Ambiente de Programação Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores."— Transcrição da apresentação:

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

2 Ambiente de Programação NASM - The Netwide Assembler Assembler que será utilizado nas práticas Manual em: http://nasm.sourceforge.net/doc/nasmdoc0.html http://nasm.sourceforge.net/doc/nasmdoc0.html Editor Qualquer editor de texto Eclipse tem plugin para Assembly Criar um executável Assemblagem e linkagem

3 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

4 Ambiente de Depuração DDD – Data Display Debugger Visualizador gráfico do gdb http://www.gnu.org/software/ddd/

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

6 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

7 Alguns registradores

8 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.

9 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.

10 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

11 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

12 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

13 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 1111 1111 FFh (255) add al, 4 0000 0100 04 (4) 1 0000 0011 1 03h (259) CF = 1 al = 0000 0011 (limite válido é 255)

14 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 0000 0100 (4) add al, 7Fh 0111 1111 (127) 1000 0011 (-125? ) 131 A soma de dois números positivos não pode dar negativo! OF = 1 (4+127 > limite de 127)

15 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

16 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

17 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

18 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

19 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:

20 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:

21 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

22 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:

23 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

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


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

Apresentações semelhantes


Anúncios Google