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



Documentos relacionados
Laboratório de Sistemas Processadores e Periféricos Lista de comandos de Assembly

ULA Sinais de Controle enviados pela UC

CAPÍTULO 6 ARITMÉTICA DIGITAL

7. Instruções lógicas, de deslocamento e de rotação

Operadores lógicos (bit a bit)

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

Funcionamento básico de um computador

Estrutura do tema ISA do IA-32

Exemplo de Subtração Binária

8. Instruções de multiplicação e divisão

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

Aula 9. Introdução à Computação. ADS IFBA

Estrutura do tema ISA do IA-32

Representação de Dados

Sistemas Lógicos II. Aula 10

O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema.

Aritmética Binária e. Bernardo Nunes Gonçalves

Operações aritméticas

MÓDULO. Conjunto de Instruções do 8086/88 Aritméticas, lógicas, deslocamento e rotação M 02

ARQUITETURA DE COMPUTADORES

Arquitetura de Computadores. Tipos de Instruções

SISTEMAS DIGITAIS CIRCUITOS COMBINATÓRIOS TÍPICOS

Um circuito comparador permite determinar se dois números binários são iguais, e não o sendo, qual deles é o maior.

INSTRUÇÕES DE TRANSFERÊNCIA

Arquitectura de Computadores. Dicas e Truques do Assembly do P3

Introdução. INF1005 Programação I 33K Prof. Gustavo Moreira gmoreira@inf.puc-rio.br

Arquitectura de Computadores II. Medição de desempenho

Conjunto de instruções. O Conjunto de Instruções. Conjunto de instruções. Instruções típicas. Instruções típicas. Instruções típicas

Organização e Arquitetura de Computadores I

Organização Funcional

Interrupções. As interrupções são casos especiais de chamadas de procedimentos.

Estrutura de um Computador

Aula 14: Instruções e Seus Tipos

Estruturas de controlo do C if-else statement

Conjunto de. Instrução MIPS. Parte II. Instruções MIPS. Instruções MIPS. Instruções MIPS :: Instruções lógicas. :: Instruções lógicas

Instruções funcionamento em 16 bits. 8B bytes W Mod 000 r/m

Introdução à programação em linguagem assembly

Os 3 principais tipos de Instruções (INSTRUTION SET) dos up são:

Arquitectura de Computadores RECUPERAÇÃO DO 1º TESTE

Circuitos Digitais Cap. 5

Representação de Dados Inteiros com sinal

Professor: Dr. Rogério Rodrigues de Vargas.

Codificação 1. Introdução. C 2 R r {! + codificação

Arquitetura de Computadores. Prof. João Bosco Jr.

Introdução. A Informação e sua Representação (Parte III) Universidade Federal de Campina Grande Departamento de Sistemas e Computação

x86 arquitetura e instruções básicas

MICROPROCESSADORES Nuno Cavaco Gomes Horta Universidade Técnica de Lisboa / Instituto Superior Técnico

Unidade: Unidade Lógica e Aritmética e Registradores. Unidade I:

Eletrônica Digital 1 Módulo1 Capítulo 1 Sistemas Numéricos. Prof. Nilton Costa Junior

ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM. Conceitos Básicos ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM

Unidade 10: A Unidade Lógica Aritmética e as Instruções em Linguagem de Máquina Prof. Daniel Caetano

AJProença, Sistemas de Computação, UMinho, 2017/18 1. Componentes (físicos) a analisar: a unidade de processamento / o processador:

Primeiros "computadores" digitais. Execução de um programa. Consolas. Primórdios dos computadores. Memória interna. Computadores com memória interna

Arquitetura de Computadores

Arquitetura de Computadores

ARQUITETURA DE COMPUTADORES

INSTITUTO POLITÉCNICO DE BRAGANÇA ESCOLA SUPERIOR DE TECNOLOGIA E DE GESTÃO. Engenharia Electrotécnica. Microprocessadores. 2ºano - 1ºsemestre

Representação de Dados

ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

Conjunto de Instruções (ISA) II

Arquitetura de Computadores. Assembly Miscelâneas. Mário O. de Menezes.

Aula 6 Aritmética Computacional

Sistemas de Numeração. » WHAT WOULD LIFE BE WITHOUT ARITHMETIC, BUT A SCENE OF HORRORS? «Sydney Smith, Sistemas Posicionais

2 Formalidades referentes ao trabalho

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES

O Nível ISA. Modelo de programação Arquitecturas CISC e RISC Introdução ao IA-32 da Intel

A declaração de uma variável vel define o seu tipo. O tipo do dado define como ele será: Armazenado na memória. Manipulado pela ULA.

Organização de Computadores 1

ArchC. Wesley Nunes Gonçalves

34 dígitos 28 dígitos 62 dígitos significativos! (base 10!)

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)

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

Conversão de Bases e Aritmética Binária

Arquitectura de Computadores Unidade de Processamento

Arquitetura de Um Processador I

PC Fundamentos Revisão 4

Entradas/Saídas. Programação por interrupções Conceitos gerais Programação da porta série Transmissão

ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM

Aula 4 Conjunto de Instruções do Microprocessador 8085 Grupo Aritmético

Programando em Assembly

ARQUITETURA DE COMPUTADORES

Escola Secundária c/3º CEB José Macedo Fragateiro. Curso Profissional de Nível Secundário. Componente Técnica. Disciplina de

Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Engenharia Disciplina de Lógica Computacional Aplicada. Prof. Dr.

Acetatos de apoio às aulas teóricas

3º Trabalho de Laboratório. Unidade de Controlo Microprogramada

Computadores de Programação (MAB353)

Introdução a Organização de Computadores e Linguagens de Montagem. Ricardo Anido

Principais códigos utilizados. Codificação. Código binário puro. Codificação binária. Codificação Binária. Código Binário puro e suas variantes

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

Data types. In C: char. short. int/long. double/long long AC 2017/2018. Pedro Serra / Sérgio Ferreira

Engenharia Electrotécnica/ Engenharia Informática Microprocessadores e Aplicações

Projecto de uma placa com DIP-Switches e LCD com ligação à placa DETIUA

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

Organização e Arquitetura de Computadores I

2. A influência do tamanho da palavra

Organização e Arquitetura de Computadores. Aula 10 Ponto Flutuante Parte I Juliana F. Camapum Wanderley

Representação de Dados

Endereçamento IP 09/05/2014. Endereçamento IP CLASSE B CLASSE A CLASSE A CLASSE C

Capítulo 3 Processadores de Propósito Geral: Software

Transcrição:

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

Operações lógicas e aritméticas Operações: aritméticas: add, sub, inc, dec, cmp lógicas: and, or, xor, not Realizadas pela ALU (Arithmetic Logic Unit) Cada operação altera o estado das flags Exemplos: CF Carry OF Overflow ZF Zero SF Sign Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 138

add src1, src2 ADD Adição de números src1 src1 + src2 Soma os bits de ambos os operandos O resultado é guardado na primeira referência (que não pode ser imediata) Altera as flags de acordo Exemplos: add eax, 5 add ax, bx endereçamento imediato e 32bits endereçamento por registo e 16bits add [100], al endereçamento directo e 8bits Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 139

SUB Subtracção de números sub src1, src2 src1 src1 - src2 Subtrai os bits de src2 a src1 O resultado é guardado na primeira referência (que não pode ser imediata) Altera as flags de acordo Exemplos: sub eax, 5 sub ax, bx endereçamento imediato e 32bits endereçamento por registo e 16bits sub al, [100] endereçamento directo e 8bits Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 140

inc src Incremento e decremento src src + 1 dec src src src - 1 Incrementa ou decrementa o operando (que não pode ser imediato) Exemplos: inc eax dec dh endereçamento por registo e 32bits endereçamento por registo e 8bits Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 141

Carry Flag - CF CF a 1: se há transporte do bit mais significativo Interpretação do programa: Uma operação aritmética sobre números sem sinal deu um resultado fora do domínio de valores válidos mov al, FFh 1111 1111 FFh (255) add al, 4 0000 0100 04 ( 4) --------------- ----- 1 0000 0011 1 03h (259) CF = 1 al = 0000 0011 (o limite válido é 255) Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 142

Overflow Flag - OF OF a 1: se uma operação aritmética sobre números com sinal, dá resultado fora do domínio de valores válidos 0 1 mov al, 4 0000 0100 (4) add al, 7Fh 0111 1111 (127) --------------- 0 1000 0011 (-125?) 131 A soma de dois números positivos não pode dar negativo! (4+127 > limite de 127) OF = CarryOut xor CarryIn = 0 xor 1 = 1 Nota: CF = 0 em números sem sinal: 4+127=131 < 255 Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 143

Exemplos mov al, 2 0000 0010 (2) (2) sub al, 0FFh - 1111 1111 (255) (-1) (Borrow) 1 1111 111 --------------- 0000 0011 (???) (3) al = 0000 0011 Sem sinal Com sinal CF = 1 (2-255 em números sem sinal não é possível) OF = 0 2-(-1) = 3 (resultado válido em números com sinal) Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 144

Sign Flag - SF SF = ao valor do bit mais significativo do resultado, que é o bit de sinal na representação em complemento a 2 SF = 0 se positivo, SF = 1 se negativo mov al, 2 0000 0010 (2) sub al, 5-0000 0101 (5) al = 2 5 = -3 --------------- 1111 1101 (-3) SF = 1 mov al, 3 0000 0011 (3) sub al, 0FFh - 1111 1111 (-1) al = 3 (-1) = 4 --------------- 0000 0100 (+4) SF = 0 Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 145

Zero Flag - ZF ZF = 1 se resultado da última operação efectuada pela ALU for zero ZF = 0 se o resultado for diferente de zero mov ax, 2 sub ax, 2 ZF = 1 mov ax, 3 sub ax, 2 ZF = 0 Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 146

Exemplos ADD e flags 1110 14-2 + 1010 10-6 -------- ---- ---- 1 1000 8? -8 CF=1 ZF=0 OF=0 SF=1 Interpretação sem e com sinal 0110 6 +6 1001 9-7 + 1101 13-3 + 0100 4 4 -------- ---- ---- -------- ---- ---- 1 0011 3? 3 1101 13-3 CF=1 ZF=0 OF=0 SF=0 CF=0 ZF=0 OF=0 SF=1 Adição de 2 números com sinais diferentes nunca produz overflow Adição de 2 números com sinais iguais só dá overflow se o sinal do resultado for diferente Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 147

Exemplos ADD (2) Exemplos em que o resultado é inválido se em complemento para 2. A OF e CF indicam que o resultado está errado, dependendo da representação ser em complemento para 2 ou não. 1101 13-3 0101 5 +5 + 1010 10-6 + 0110 6 +6 ------- ----- ---- -------- ---- ----- 1 0111 7? +7? 1011 11-5? CF=1 ZF=0 OF=1 SF=0 CF=0 ZF=0 OF=1 SF=1 1000 8-8 0111 7 +7 + 1000 8-8 + 0111 7 +7 ------------------ -------- ----- ----- 1 0000 0? 0? 1110 14-2? CF=1 ZF=1 OF=1 SF=0 CF=0 ZF=0 OF=1 SF=1 Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 148

Subtracção de números com sinal X-Y é equivalente a X+(-Y), com -Y obtido por complemento para 2: + 4 0100 0100 4+(-3) - + 3-0011 + 1101 (comp. 2) --------------- ---------- + 1 0001 1 0001 Note: no CPU não aparece CF neste caso! + 3 0011 Neste caso tem 0011 3+(-4) - + 4-0100 de aparecer CF = 1 1100 (comp. 2) ------------------ ---------- - 1 1 1111 0 1111 borrow Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 149

Subtracção de números (notas) X-Y equivale a X+(-Y) Ao fazer X-Y, se números sem sinal: CF é usada para indicar transbordo (borrow) na interpretação como números SEM SINAL É a negação do carry natural da soma Se a carry flag está activada houve borrow então: X < Y Senão: X>=Y Ao fazer X-Y, se números com sinal: Se há overflow então a relação entre X e Y depende dos respectivos sinais Permite comparar 2 números cmp Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 150

cmp src1, src2 CMP - Compare Faz src1-src2 mas não guarda o resultado, apenas altera as flags Põe CF = 1 se houver bit de borrow src1 < src2 para números sem sinal Põe OF = 1 se houver overflow O caso de números com sinal (complemento para 2) mais à frente Põe 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 Exemplo: usa-se antes dos saltos condicionais Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 151

MUL e DIV IA-32 suporta multiplicação e divisão Sem sinal (32 bits) mul src edx:eax eax * src (edx e eax são sempre usados implicitamente) div src eax edx:eax / src EDX fica com o resto da divisão Com sinal (32 bits) imul src edx:eax eax * src (edx e eax são sempre usados implicitamente) idiv src eax edx:eax / src EDX fica com o resto da divisão edx e eax são sempre usados implicitamente Também existem as operações em 16 e 8 bits Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 152

mul ebx mul bx mul 6 Exemplos endereçamento de registro a 32 bits endereçamento de registro a 16 bits endereçamento imediato a quantos bits? mul [Var] endereçamento directo a quantos bits? mul [ebx] endereçamento indirecto por registo a quantos bits? Não se consegue inferir o número de bits a transmitir a partir dos operandos. Resultado de assemblar no NASM: error: operation size not specified Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 153

Especificação do número de bits a ler É necessário especificar o tamanho do operando byte 8 bits word 16 bits dword 32 bits qword 64 bits tword 80 bits Exemplos: mul dword 6 endereçamento imediato a 32 bits mul word [Var] endereçamento directo a 16 bits O resultado é colocado em dx:ax mul byte [ebx] endereçamento indirecto por registo a 8 bits O resultado é colocado em ax Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 154

Instruções lógicas Tratam os bytes como vectores de bits Onde cada bit: 1=true, 0=false As flags reflectem o resultado Exemplos de instruções (para cada bit dos operandos): not src src not src and src1, src2 src1 src1 and src2 or src1, src2 src1 src1 or src2 xor src1, src2 src1 src1 xor src2 Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 155

"Ligar" e "desligar" (mascarar) bits and src1, src2 Põe bits individuais do 1º operando a 0, conforme indicado pelos zeros no 2º operando Exemplo: and ah, 00011100b Põe bits 0,1,5,6 e 7 de ah a 0 e mantém os restantes ah = 000xxx00 onde xxx ficaram inalterados or src1, src2 Põe bits individuais do 1º operando a 1, conforme indicado pelos uns no 2º operando, Exemplo: or ah, 11000000b Põe bits 6 e 7 de ah a 1 e mantém os restantes ah = 11xxxxxx onde xxxxxx ficam inalterados Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 156

Mais operações not src Complemento bit a bit dos bits do único operando xor src1, src2 Troca os bits individuais do 1º operando, conforme indicado pelos uns no 2º operando Exemplo: xor ah, 00000011b Complementa os bits 0 e 1 de ah e mantém os restantes ah = xxxxxxcc test src1, src2 equivale ao and sem alterar o 1º operando Exemplo: test ah, 01010101b põe ZF a 1 se os bits 0,2,4 e 6 de ah estão a 0, mas não altera ah Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 157

Manipular bits individualmente Exemplos: and ax, 7FFFh Põe a 0 o bit 15 de ax or ax, 8000h Põe a 1 o bit 15 de ax xor ax, 8000h Complementa o bit 15 de ax test dl, 00000100b ZF = 1 se o bit 2 de dl for 0 ZF = 0 se o bit 2 de dl for 1 Equivale a fazer: and dl, 00000100b mas só afecta as flags. Não altera o registo dl Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 158

NEG Negar (complemento a 2) neg src src complemento para 2 de src neg src equivale a: not src inc src Afecta as flags Exemplo: complementar a 2 o número 8 (em 4 bits) (-8) = +8 inválido OF = 1 1000 (-8) 0111 + 1 ------- 1000 (-8) Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 159

Shifts - desvio/deslocamento de bits Desviam os bits de um operando, uma ou mais posições, para a esquerda ou para a direita O último bit que sai fica na Carry Flag Conforme o processador: Podem operar só sobre registadores ou também sobre bytes em memória Servem para facilitar a selecção e operação sobre grupos de bits, parte do valor original Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 160

Desvios Lógicos (Shift) Interpretam números sem sinal shl src,1 src shiftleft(src) CF 0 equivale a multiplicar por 2 shr src,1 src shiftright(src) 0 CF equivale a dividir por 2 Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 161

Desvios aritméticos Se manipulamos um número com sinal, ao desviar para a direita, devemos manter o sinal sal src,1 é igual a shl src,1 src shiftleft(src) sar src,1 src shiftariright(src) mantém o sinal CF Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 162

Desvios aritméticos Interpretam números com sinal: Left: equivale a multiplicação*2 OF indica transbordo Right: equivale a divisão/2 CF indica resto o bit que entra é igual ao mais significativo mantém o sinal Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 163

Desvios logicos vs aritméticos Consideremos, a título de exemplo, números a 4 bits sem sinal: Um desvio lógico de 1 posição sobre: 0011 = 3 (10) tem como resultado 0110 = 6 (10) e CF = 0 0110 = 6 (10) tem como resultado 1100 = 12 (10) e CF = 0 1100 = 12 (10) tem como resultado 1000 = 8 (10) e CF = 1 Estamos na presença de um erro, indicado pela Carry Flag Consideremos agora números a 4 bits com sinal: Um desvio aritmético de 1 posição sobre: 0011 = 3 (10) tem como resultado 0110 = 6 (10) e CF = 0 0110 = 6 (10) tem como resultado 1100 = -4 (10) e CF = 0 No entanto estamos na presença de um overflow, logo OF = 1 Estamos na presença de um erro, indicado pela Overflow Flag Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 164

Não se perdem bits Rotações O que sai entra do outro lado rol src,1 src rotleft(src) ror src,1 src rotright(src) Arquitectura de Computadores (2008/2009): Programação ao nível da máquina 165