1 / 26

Assembly x86

Assembly x86.

ross
Download Presentation

Assembly x86

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Assembly x86

  2. Assembly ou linguagem de montagem é uma notação legível por humanos para o código de máquina que uma arquitetura de computador específica usa. A linguagem de máquina, que é um mero padrão de bits, torna-se legível pela substituição dos valores em bruto por símbolos chamados mnemónicos. Ex.: MOV AL, 61h Oque é assembly?

  3. Conjunto de instruções de baixo nível tanto para arquiteturas de processadores Intel (Intel 8088 e 8086), como para não Intel (5x86 da AMD). Assembly x86

  4. 2 tipos principais, algumas diferenças -Ordem dos parâmetros .Intel: mov ax, 03d00h .AT&T: mov 03d00h, ax Sintaxe

  5. Usados para guardar os dados binários. Registradores

  6. Registradores

  7. Alguns de uso especial: EAX – acumulador (automaticamente usado para divisao e multiplicação) ECX – contador de loop (instrução LOOP) ESP – stack pointer (não deve ser usado para OP aritmeticas e transferir dados) ESI, EDI – index registers (para instruções de transferencia de memoria rapidas) EBP – extended frame pointer (pilha) EIP – Ponteiro para instruções Registradores Especiais

  8. EFLAGS Cada flag tem só 1 bit (set/clear) Carry (CF) -Out of range (sem sinal) Overflow(OF) -Out of range (com sinal) Sign (SF) -Resultado negativo Zero (ZF) -Resultado é zero Auxiliary Carry (AF) - Parity (PF) -Verifica paridade Registradores Flag

  9. Todas as arquiteturas x86 usam uma pilha como uma área de armazenamento temporário em memória RAM, que permite ao processador armazenar e recuperar rapidamente os dados na memória. O topo da pilha atual é apontada pelo registrador ESP. A pilha "cresce" para baixo. Instruções PUSH e POP Pilha

  10. As principais funcionalidades da pilha são: - Preservar valores de registradores em funções - Preservar dados da memória - Transferir dados sem usar registradores - Reverter a ordem de dados - Chamar outras funções e depois retornar - Passar parâmetros para funções Pilha

  11. Byte, Word e Dword são blocos de dados básicos. O processador trabalha com o tamanho de dados adequados para executar as instruções Um byte possui 8 bits, um word possui 16 bits ou 2 bytes e um dword possui 32 bits ou 4 bytes Tipos de Dados

  12. BYTE, SBYTE 8-bit unsigned integer; 8-bit signed integer WORD, SWORD 16-bit unsigned & signed integer DWORD, SDWORD 32-bit unsigned & signed integer QWORD 64-bit integer TBYTE 80-bit integer Tipos de Dados

  13. REAL8 8-byte IEEE long real REAL10 10-byte IEEE extended real REAL4 4-byte IEEE short real ? Indefinido Tipos de Dados

  14. Inteiros Ex: 30d, 6Ah, 42, 42o, 1101b Hexadecimal começando com letra: 0A5h Char e Strings str1 BYTE "Enter your name",0 str2 BYTE 'Error: halting program',0 str3 BYTE 'A','E','I','O','U' Definindo Dados

  15. Usa-se DUP para alocar uma matriz ou string. Contador e argumentos devem ser constantes ou expressões constantes. var1 BYTE 20 DUP(0) ; 20 bytes, all zero var2 BYTE 20 DUP(?) ; 20 bytes, ; uninitialized var3 BYTE 4 DUP("STACK") ; 20 bytes: ;"STACKSTACKSTACKSTACK" var4 BYTE 10,3 DUP(0),20 Operador DUP

  16. Instruções • Transformado em codigo de maquina pelo assembler (TASM) • Membro do instruction set IA-32. • 4 partes: Label: - Mnemônicos - Operandos - ;Comentários

  17. MNEMÔNICOS Exemplos: MOV, ADD, SUB, MUL, INC, DEC OPERANDOS Constante (immediate value), 96 Registradores, eax Memória (rótulo de dados), count NUMERO DE DADOS stc ; set Carry flag inc ax ; add 1 to ax mov count, bx ; move BX to count Instruções

  18. DIRETIVAS Comandos reconhecidos pelo Assembler Parte da sintaxe do assembler Usado para declarar codigo, area de dados, modo de seleção de memoria, Procedures. etc. Case insensitive Diferentes assemblers, diferentes diretivas NASM != TASM, por exemplo Ex: .data .code PROC struc Instruções

  19. Por hardware, exception (ñ-controlada).. Interrupções pelo software são usadas para system calls (sub-rotinas). Muito úteis INT 21h ; muito usada Se AH = 3E , fecha o arquivo Parametros geralmente são requeridos CX,BX,AL. Interrupções

  20. Várias outras intruções: JMP / LOOP ...: Usados para desvios. AND / NOR / OR ...: Operações booleanas nivel bit SZF / STC / STD ... : Setar flags CMP, CALL, PUSH, POP, etc.. Instruções

  21. Três tipos básicos de operandos: Immediate – um inteiro constante (8, 16, or 32 bits) Valor codificado ja na instrução Registradores – nome do registrador Memoria – Referencia a um local na memoria (label) Endereçamento

  22. ; Não vou nem comentar Comentarios

  23. TITLE Add and Subtract (AddSub.asm) ; Este programa soma e subtrai inteiros de 32-bits. INCLUDE Irvine32.inc .code main PROC mov eax,10000h ; EAX = 10000h add eax,40000h ; EAX = 50000h sub eax,20000h ; EAX = 30000h call DumpRegs ; display exit main ENDP END main Código Assembly

  24. SECTION .DATA hello: db 'Hello world!',10 helloLen: equ $-hello SECTION .TEXT GLOBAL _START _START: ; Write 'Hello world!' to the screen mov eax,4 ; 'write' system call mov ebx,1 ; file descriptor 1 = screen mov ecx,hello ; string to write mov edx,helloLen ; length of string to write int 80h ; call the kernel ; Terminate program mov eax,1 ; 'exit' system call mov ebx,0 ; exit with error code 0 int 80h ; call the kernel Exemplo - Linux

  25. DOSSEG .MODEL LARGE .STACK 200h .DATA hello db 'Hello world!',10,13,'$' helloLen db 14 .CODE ASSUME CS:@CODE, DS:@DATA START: mov ax,@data mov ds,ax ; Write 'Hello world!' to the screen mov ah,09h ; 'print' DOS service mov dx,offset hello ; string to write int 21h ; call DOS service ; Terminate program mov ah,4Ch ; 'exit' DOS service mov ax,0 ; exit with error code 0 int 21h ; call DOS service END START Exemplo - DOS

  26. Paramos por aqui (...)

More Related