Estrutura do tema ISA do IA-32

Documentos relacionados
A arquitectura IA32. A arquitectura de um processador é caracterizada pelo conjunto de atributos que são visíveis ao programador.

Estruturas de controlo do C if-else statement

Introdução ao Assembly

Programando em Assembly

Programação ao nível da máquina. Operações lógicas e aritméticas

Conjunto de Instruções (ISA) I

Assembly IA32 Procedimentos

Arquitetura de Um Processador I

Ordem de Bytes: Big Endian e Little Endian

Neander - características

Assembly do IA-32 em ambiente Linux

Sistemas de Computação. Instruções de Linguagem de Máquina

Nível da Arquitetura do Conjunto de Instruções. Ronaldo de Freitas Zampolo

Organização e Arquitetura de Computadores I

Arquitectura de Computadores

CPU. CPU Unidade Central de Processamento. Função: leitura, escrita e processamento de dados

Arquitectura de Computadores

PARTE II - CONJUNTO DE INSTRUÇÕES ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

EXEMPLO DE ARQUITETURAS REAIS INTEL 8086 AULA 07 Arquitetura de Computadores Gil Eduardo de Andrade

Execução detalhada de instruções

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

Conjunto de Instruções (ISA) II

SSC0114 Arquitetura de Computadores

Tópicos Avançados em Sistemas Computacionais: Infraestrutura de Hardware Aula 10

Sistemas Processadores e Periféricos Aula 2 - Revisão

Linguagem de Montagem e Assembly. André Luiz da Costa Carvalho

MIPS Implementação. sw) or, slt. Vamos examinar uma implementação que inclui um subconjunto de instruções do MIPS

Execução detalhada de instruções

Linguagem de Montagem Assembly

SSC0611 Arquitetura de Computadores

CONJUNTO DE INSTRUÇÕES

Universidade Federal do Rio de Janeiro Bacharelado em Ciência da Computação. Arquitetura de Computadores I. Organização Básica do Computador

Programação de Microprocessadores. Programação de Microprocessadores SEL-433 APLICAÇÕES DE MICROPROCESSADORES I

Microprocessadores I ELE Conjunto de Instruções do Microprocessador 8085 Aula 9 - PILHA E SUBROTINAS -

Nível da Arquitetura do Conjunto das Instruções

Registradores na Arquitetura MIPS. 29/4/2016 MIPS - Instruction Set Architecture

Arquitetura e Organização de Computadores

Nível do Conjunto de Instruções Prof. Edson Pedro Ferlin

As 5 partes fundamentais. Linguagem de Programação Pinagem Características Elétricas Ambiente de Desenvolvimento Integrado - IDE

Computadores e Programação (MAB-353) Primeira Prova -Prof. Paulo Aguiar (DCC/UFRJ) 19/05/ pontos

Arquitetura de Computadores. Ciclo de Busca e Execução

2. A influência do tamanho da palavra

Arquitectura de Computadores

Exercícios resolvidos (aula de 4 de Maio) Resolução:

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I

Arquitetura e Organização de Computadores

MICROPROCESSADORES 2º TESTE - A

Organização ou MicroArquitectura

Família 8051 (introdução) 2011/1

ORGANIZAÇÃO DE COMPUTADORES CAPÍTULO 6: PROCESSADORES. Prof. Juliana Santiago Teixeira

Arquitectura de Computadores

LISTA 02 CONJUNTO DE INSTRUÇÕES - GABARITO

Infraestrutura de Hardware. Instruindo um Computador

Conjunto de Instruções. Alisson Brito

18/08/2015. Capítulo 2: Manipulação de dados. Arquitetura de Computadores. Capítulo 2: Manipulação de Dados

Transcrição:

Análise do Instruction Set Architecture (2) Acesso a operandos no IA-32: sua localização e modos de acesso Estrutura do tema ISA do IA-32 1. Desenvolvimento de programas no IA-32 em Linux 2. Acesso a operandos e operações 3. Suporte a estruturas de controlo. Suporte à invocação/regresso de funções 5. Acesso e manipulação de dados estruturados 6. Análise comparativa: IA-32 (CISC) e MIPS (RISC) Localização de operandos no IA-32 valores de constantes (ou valores imediatos) incluídos na instrução, i.e., no Reg. Instrução (IR) variáveis escalares sempre que possível, em registos (inteiros/apont) / fp ; se não... na memória (inclui stack) variáveis estruturadas sempre na memória, em células contíguas Modos de acesso a operandos no IA-32 em instruções de transferência de informação instrução mais comum: movx, sendo x o tamanho (b, w, l) algumas instruções atualizam apontadores (por ex.: push, pop) em operações aritméticas/lógicas AJProença, Sistemas de Computação, UMinho, 2015/16 1 AJProença, Sistemas de Computação, UMinho, 2015/16 2 Análise de uma instrução de transferência de informação Análise da localização dos operandos na instrução movl Transferência simples movl Source,Dest move um valor de bytes ( long ) instrução mais comum em código IA-32 Tipos de operandos imediato: valor constante do tipo inteiro como a constante em C, mas com prefixo $ ex.: $0x00, $-533 codificado com 1, 2, ou bytes em registo: um de registos inteiros mas e estão reservados e outros poderão ser usados implicitamente em memória: bytes consecutivos de memória vários modos de especificar o endereço movl Fonte! Imm! Destino! movl $0x, movl $-17,() movl, movl,() movl (), Equivalente em C! temp = 0x; *p = -17; temp2 = temp1; *p = temp; temp = *p; não é possível no IA32 efetuar transferências memória-memória com uma só instrução AJProença, Sistemas de Computação, UMinho, 2015/16 3 AJProença, Sistemas de Computação, UMinho, 2015/16

Modos de endereçamento à memória no IA-32 (1) de endereçamento à memória no IA-32 (1) Indirecto (normal) (R) Mem[Reg[R]] conteúdo do registo R especifica o endereço de memória movl (), Deslocamento D(R) Mem[Reg[R]+D] conteúdo do registo R especifica início da região de memória deslocamento c te D especifica distância do início (em bytes) movl -(), void swap(int *, int *) { int t0 = *; int t1 = *; * = t1; * = t0; } swap: pushl movl, pushl movl (), movl (), movl (), movl (), movl,() movl,() movl -(), movl, popl ret Arranque! Corpo! Término! AJProença, Sistemas de Computação, UMinho, 2015/16 5 AJProença, Sistemas de Computação, UMinho, 2015/16 6 de endereçamento à memória no IA-32 (2) de endereçamento à memória no IA-32 (3) void swap(int *, int *) { int t0 = *; int t1 = *; * = t1; * = t0; }!Registo!Variável! t1 t0-0 Stack! Corpo movl (), # ecx = movl (), # edx = movl (), # eax = * (t1) movl (), # ebx = * (t0) movl,() # * = eax movl,() # * = ebx!! cada caixa representa células de mem Corpo 0x10 movl (), # ecx = movl (), # edx = movl (), # eax = * (t1) movl (), # ebx = * (t0) movl,() # * = eax movl,() # * = ebx - 0x10 0x10 0x11 0x11 AJProença, Sistemas de Computação, UMinho, 2015/16 7 AJProença, Sistemas de Computação, UMinho, 2015/16

de endereçamento à memória no IA-32 () de endereçamento à memória no IA-32 (5) Corpo 0x10 movl (), # ecx = movl (), # edx = movl (), # eax = * (t1) movl (), # ebx = * (t0) movl,() # * = eax movl,() # * = ebx - 0x10 0x10 0x11 0x11 Corpo 0x10 movl (), # ecx = movl (), # edx = movl (), # eax = * (t1) movl (), # ebx = * (t0) movl,() # * = eax movl,() # * = ebx - 0x10 0x10 0x11 0x11 AJProença, Sistemas de Computação, UMinho, 2015/16 9 AJProença, Sistemas de Computação, UMinho, 2015/16 10 de endereçamento à memória no IA-32 (6) de endereçamento à memória no IA-32 (7) Corpo 0x10 movl (), # ecx = movl (), # edx = movl (), # eax = * (t1) movl (), # ebx = * (t0) movl,() # * = eax movl,() # * = ebx - 0x10 0x10 0x11 0x11 Corpo 0x10 movl (), # ecx = movl (), # edx = movl (), # eax = * (t1) movl (), # ebx = * (t0) movl,() # * = eax movl,() # * = ebx - 0x10 0x10 0x11 0x11 AJProença, Sistemas de Computação, UMinho, 2015/16 11 AJProença, Sistemas de Computação, UMinho, 2015/16

de endereçamento à memória no IA-32 () de endereçamento à memória no IA-32 (9) Corpo 0x10 movl (), # ecx = movl (), # edx = movl (), # eax = * (t1) movl (), # ebx = * (t0) movl,() # * = eax movl,() # * = ebx - 0x10 0x10 0x11 0x11 Corpo 0x10 movl (), # ecx = movl (), # edx = movl (), # eax = * (t1) movl (), # ebx = * (t0) movl,() # * = eax movl,() # * = ebx - 0x10 0x10 0x11 0x11 AJProença, Sistemas de Computação, UMinho, 2015/16 13 AJProença, Sistemas de Computação, UMinho, 2015/16 1 Modos de endereçamento à memória no IA-32 (2) Exemplo de instrução do IA-32 apenas para cálculo do apontador para um operando (1) Indirecto (R) Mem[ Reg[R] ]... Deslocamento D(R) Mem[ Reg[R] + D ]... Indexado D(Rb,Ri,S) Mem[Reg[Rb]+S*Reg[Ri]+D] D: Deslocamento constante de 1, 2, ou bytes Rb: Registo base: quaisquer dos Reg Int Ri: Registo indexação: qualquer, exceto S: Scale: 1, 2,, ou Casos particulares: (Rb,Ri) Mem[ Reg[Rb] + Reg[Ri] ] D(Rb,Ri) Mem[ Reg[Rb] + Reg[Ri] + D ] (Rb,Ri,S) Mem[ Reg[Rb] + S*Reg[Ri] ] AJProença, Sistemas de Computação, UMinho, 2015/16 15 leal Src,Dest Src contém a eressão para cálculo do endereço Dest vai receber o resultado do cálculo da eressão nota: lea => load effective address Tipos de utilização desta instrução: cálculo de um endereço de memória (sem aceder à memória) Ex.: tradução de p = &x[i]; cálculo de eressões aritméticas do tipo a = x + k*y para k = 1, 2,, ou Exemplos... AJProença, Sistemas de Computação, UMinho, 2015/16 16

Exemplo de instrução do IA-32 apenas para cálculo do apontador para um operando (2) Instruções de transferência de informação no IA-32 leal Source, 0xf000 movx S,D DßS Move (byte, word, long-word) movsbl S,D DßSignExtend(S) Move Sign-Extended Byte movzbl S,D DßZeroExtend(S) Move Zero-Extended Byte Source Eressão -> 0x() 0xf000 + 0x 0xf00 (,) 0xf000 + 0xf100 (,,) 0xf000 + * 0xf00 0x0(,,2) 2*0xf000 + 0x0 0x1e00 push S ß - ; Mem[] ß S Push pop D DßMem[]; ß+ Pop lea S,D Dß &S Load Effective Address D destino [Reg Mem] S fonte [Imm Reg Mem] D e S não podem ser ambos operandos em memória no IA-32 AJProença, Sistemas de Computação, UMinho, 2015/16 17 AJProença, Sistemas de Computação, UMinho, 2015/16 1 Operações aritméticas e lógicas no IA-32 inc D Dß D +1 Increment dec D Dß D 1 Decrement neg D Dß -D Negate not D Dß D Complement add S, D Dß D + S Add sub S, D Dß D S Subtract imul S, D Dß D * S 32 bit Multiply and S, D Dß D & S And or S, D Dß D S Or xor S, D Dß D ˆ S Exclusive-Or shl k, D Dß D << k Left Shift sar k, D Dß D >> k Arithmetic Right Shift shr k, D Dß D >> k Logical Right Shift AJProença, Sistemas de Computação, UMinho, 2015/16 19