Prévia do material em texto
AulaAula 1212 Programação em Linguagem de Montagem Prof. Minoru CIC121Org.e Arq.de Comp. II 2 Linguagem de Montagem Tradutores Linguagemfonte Linguagemalvo Interpretadores Execução da linguagem alvo Fases da tradução de um programa linguagemfonte programaobjeto ou → programa binário executável Prof. Minoru CIC121Org.e Arq.de Comp. II 3 Introdução à Linguagem de Montagem Assembler Montador→ Linguagem de montagem Assembly language→ Prof. Minoru CIC121Org.e Arq.de Comp. II 4 Linguagem de Montagem O que é Linguagem de Montagem? É a linguagem na qual cada instrução é uma operação do processador, geralmente expresso através de mnemônicos, ou abreviação da operação (add, sub, ld, mov, etc...) Porque usar linguagem de montagem? É uma linguagem muito difícil. Não é para covardes e fracotes. Drivers, rotinas de alta performance, etc,... Prof. Minoru CIC121Org.e Arq.de Comp. II 5 Por que usar linguagem de montagem? Prof. Minoru CIC121Org.e Arq.de Comp. II 6 Formato de uma declaração em linguagem de montagem Cálculo de N = I + J, linguagem Intel Pentium Prof. Minoru CIC121Org.e Arq.de Comp. II 7 Formato de uma declaração em linguagem de montagem Cálculo de N = I + J, linguagem Motorola 680x0 Prof. Minoru CIC121Org.e Arq.de Comp. II 8 Formato de uma declaração em linguagem de montagem Cálculo de N = I + J, linguagem Sparc Prof. Minoru CIC121Org.e Arq.de Comp. II 9 Pseudo-instruções (1) Algumas das pseudo-instruções disponíveis no assembler do Pentium 4 (MASM) Prof. Minoru CIC121Org.e Arq.de Comp. II 10 Pseudo-instruções (2) Algumas das pseudo-instruções disponíveis no assembler do Pentium 4 (MASM) Prof. Minoru CIC121Org.e Arq.de Comp. II 11 A família x86 Uma família de processadores Criada pela Intel em 1978 8086 – 16 bits 386 – 32 bits 486 – 32 bits 586 Pentium – 32 bits Pentium II/ Pentium III/ Pentium IV/ Core/ Core 2 – 32 bits/64 bits Core i3/ Core i5/ Core i7 – 64 bits AMD Prof. Minoru CIC121Org.e Arq.de Comp. II 12 Assembler Assembler é o programa capaz de transformar a representação textual de um código assembly em código de máquina Ex.: TASM – Turbo Assembler NASM – Netwide Assembler GAS – GNU Assembler MASM – Microsoft Macro Assembler Usaremos o NASM (http://www.nasm.us/) Prof. Minoru CIC121Org.e Arq.de Comp. II 13 Assembler Cada assembler tem algumas particularidades de: Como expressar endereços Como expressar constantes Pseudoinstruções suportadas Prof. Minoru CIC121Org.e Arq.de Comp. II 14 Assembly Uma instrução assembly tem comumente a seguinte forma: Label é um rótulo da linha, um nome dado a esta linha de código. É opcional Instrução é um dos mnemônicos do assembly Operandos um ou mais operandos separados por vírgula Comentários são precedidos por ;(ponto e vírgula) Uma linha pode conter apenas um comentário ou/e apenas um label label: instrução operandos ; comentário Prof. Minoru CIC121Org.e Arq.de Comp. II 15 Assembly Representação numérica Há muitas maneiras de representar constantes numérias Decimal: 64 Hexadecimal: 0x40 Binário: 1000000b Octal: 100q O símbolo especial $ é o número da linha atual do código Prof. Minoru CIC121Org.e Arq.de Comp. II 16 Assembly Representação de constantes de texto São exibidas entre apóstrofos (aspas simples) Uma vírgula pode ser usada para concatenar strings Exemplos: mov eax, 'abcd' msg: db 'Mensagem: ', ' Ola!' Prof. Minoru CIC121Org.e Arq.de Comp. II 17 Assembly Pseudoinstruções Não são instruções conhecidas pelo processador São interpretadas pelo assembler Tem funções como armazenar áreas de dados Definir Macros Definir constantes Prof. Minoru CIC121Org.e Arq.de Comp. II 18 Pseudoinstrução DB/ DW/ DD Declara uma área de dados inicializada RESB/ RESW/ RESD Reserva uma área de N bytes/words/double Exemplos Assembly DB 55 ; armazena o valor 55 DW 30 ; armazena o valor 30 buffer: RESB 256 ; reserva 256 bytes Prof. Minoru CIC121Org.e Arq.de Comp. II 19 Assembly Pseudoinstruções EQU – define uma constante TIMES – repete uma instrução n vezes Exemplos: message: DB 'hello, world' msglen: EQU $-message times 15 resb 1 buffer: db 'hello, world' times 64-$+buffer db ' ' Prof. Minoru CIC121Org.e Arq.de Comp. II 20 Assembly Hello World!! SECTION .data ; área de dados msg: db “Hello World”, 10 ; string a ser impressa len: equ 12 ; tamanho da string SECTION .text ; seção de código Global main ; declara o procedimento main() main: mov edx, len ; arg3, tamanho da string a imprimir mov ecx, msg ; arg2, ponteiro da string mov ebx, 1 ; arg1, onde escrever, 1 = tela mov eax, 4 ; chamada do sitema sysout int 0x80 ; interrupção 80 hex, chamar o SO mov ebx, 0 ; exit code, 0 = normal mov eax, 1 ; chamada do kernel para terminar int 0x80 ; interrupção 80 hex, chamar o SO Prof. Minoru CIC121Org.e Arq.de Comp. II 21 Assembly Traduzindo: nasm f elf64 hello.asm Gera o arquivo objeto .o Linkando o arquivo ld o hello hello.o Gera o executável hello Para executar use: ./hello Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21