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

Documentos relacionados
José Augusto Fabri. Assembly Básico

Prof. Leonardo Augusto Casillo

Solução Lista de Exercícios Processadores

Microprocessadores I ELE Aula 7 Conjunto de Instruções do Microprocessador 8085 Desvios

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

Organização Funcional

Eletrônica Digital I (EDL I)

Circuitos Lógicos Aula 22

Prova de Arquitectura de Computadores (21010) Data: 5 de Fevereiro de 2009

Arquitectura de Computadores

Organização e Arquitetura de Computadores I

Circuitos Lógicos. Capítulo 9 Aritmérica Digital: Operações e Circuitos

2.5 - Instruções Lógicas do ULA

Grupo I (5 valores) CD AB

Aritmética dos Computadores

Arquitetura e Organização de Computadores

Prova de Arquitectura de Computadores (21010) Data: 5 de Fevereiro de 2009

Unidade III. Sistemas Numéricos e o Computador

Operações com números binários

ARITMÉTICA BINÁRIA. Adão de Melo Neto

Arquitectura de Computadores

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

No. de bits. O primeiro IBM PC foi construído com o 8088 (versão de 8 bits do 8086).

CONJUNTO DE INSTRUÇÕES

Arquitetura e Organização de Computadores

Prova de Arquitectura de Computadores (21010) Data: 18 de Junho de 2010

Organização e Arquitetura de Computadores I

Capítulo 6 Aritmética Digital: Operações e Circuitos

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

Prova de Arquitectura de Computadores (21010) Data: 12 de Fevereiro de 2010

Arquitetura e Organização de Computadores

Universidade Federal de Uberlândia Faculdade de Computação. Representação e aritmética binária

Arquitectura de Computadores

Conjunto de Instruções (ISA) II

Prova de Arquitectura de Computadores (21010) Data: 23 de Junho de 2009

Organização de Computadores

REPRESENTAÇÃO DE DADOS. Prof. Maicon A. Sartin

Universidade Federal de Santa Catarina Centro Tecnológico Departamento de Informática e Estatística Ciências da Computação & Engenharia Eletrônica

SSC510 Arquitetura de Computadores 1ª AULA

p-fólio Arquitectura de Computadores U.C de julho de 2018 INSTRUÇÕES

ULA. Combina uma variedade de operações lógicas e matemáticas dentro de uma única unidade.

Introdução à Computação

MICROPROCESSADORES E MICROCONTROLADORES. PROVA 1 - Solução da Versão 1

Arquitetura de Computadores I

Aritmética Computacional Aula 01. Professor: André Luis Meneses Silva orgearq20091.wordpress.com

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

7. A pilha e subrotinas

CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP)

William Stallings Arquitetura e Organização de Computadores 8 a Edição

Sistemas de Numeração

Circuitos Digitais. Conteúdo. Soma de Números Binários. Soma de Números Binários. Exemplos. Exemplos. Aritmética Binária

S is temas numéricos e a Repres entação Interna dos Dados no Computador

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

Circuitos Aritméticos. Circuitos Aritméticos. Circuitos Aritméticos. Circuitos Aritméticos. Circuitos Aritméticos. Circuitos Aritméticos

Arquitetura de Computadores Conceitos Fundamentais. Graduação em Engenharia Elétrica - UFPR Prof. Carlos Marcelo Pedroso 2016

Símbolos e abreviaturas utilizadas na descrição das instruções

PARTE I I: ARITMÉTICA COMPUTACIONAL ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR

Arquitetura de Um Processador I

Sistemas numéricos e a Representação Interna dos Dado no Computador

Universidade de São Paulo

UNIVERSIDADE PAULISTA (UNIP) Curso de Engenharia Mecatrônica Disciplina: Microprocessadores e Microcontroladores (MM) LISTA III

2º Estudo Dirigido CAP 3

CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP)

Organização de Computadores I

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini /

Arquitetura de Computadores

Aula 7: Representações de Números Inteiros: Sinal e Magnitude e Representação em Excesso de k

Sistemas Digitais Módulo 2 Representações com Sinal e Aritmética Digital

1. Notação em Complemento de 2

Prof. Leonardo Augusto Casillo

Sistemas de Computação

Aula 16: UCP: Conceitos Básicos e Componentes

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

MATA49 Programação de Software Básico

Disciplina: Arquitetura de Computadores

MATA49 Programação de Software Básico

Arquitetura de Computadores. Conjunto de Instruções

Capítulo 2. Representação de dados em sistemas computacionais

Relatório de Prática no LABORATORIO

Arquitetura e Organização de Computadores. Sistemas Numéricos

Cursos: Análise, Ciência da Computação e Sistemas de Informação Laboratório I - Prof. Aníbal Notas de aula 2 SISTEMAS NUMÉRICOS

Representação de quantidade(número)

MAT115 Introdução ao Processamento de Dados Professor: Ibirisol Fontes Ferreira DCC: Departamento de Ciência da Computação

Introdução à Computação

Sistemas de Numeração. Exemplos de Sistemas de Numeração (1) Exemplos de Sistemas de Numeração (2) Sistemas de Numeração

Representação de quantidade(número) Expressão de significância posicional

Ministério da Educação UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ. Aula 2. Cibele Lemos Freire Viginoski

Lista de Exercícios 110 Bases numéricas (lista adaptada das listas do prof. Tiago Dezuo)

ARQUITECTURA DE COMPUTADORES

Sistemas Numéricos e o Computador

Sistemas Digitais / Sistemas Digitais I 6 Representação de números com sinal

Processador: Conceitos Básicos e Componentes

Arquitetura e Organização de Computadores

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

1/50. Conceitos Básicos. Programa Básico

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

Capacidade de Armazenamento. Bit. Binário para Decimal. Decimal para Binário. Operações Aritméticas no Sistema binário.

Transcrição:

MÓDULO M 02 Conjunto de Instruções do 8086/88 Aritméticas, lógicas, deslocamento e rotação OBJETIVOS Compreender o significado dos bits de estado no registrador de flags do 8086/88; Conhecer as representações numéricas aceitas pelo 8086/88, para os operandos; Conhecer as instruções aritméticas, lógicas, de deslocamento e de rotação do 8086/88. O CONJUNTO DE INSTRUÇÕES DO 8086/88 O microprocessador 8086/88 possui um conjunto de instruções básicas, que associadas aos diversos modos de endereçamento fornecem um grande número de códigos de operação. Neste experimento utilizaremos, entre outras, as instruções aritméticas, que permitem realizar adição, subtração, multiplicação e divisão. Essas operações podem aceitar diversos tipos de operandos (8 ou l6 bits, sinalizados ou não, BCD, ASCII, etc.). Os operandos podem ser imediatos, ou estar contidos em registradores ou locações de memória. Para fazermos referência a dados na memória, utilizamos a notação [XXXX], onde XXXX representa um endereço da memória e [XXXX] representa o seu conteúdo. Algumas vezes não fica bem claro se um operando a ser obtido da memória é de apenas um byte ou maior. Nesses casos, é necessário usar os qualificativos BYTE, WORD ou DWORD, conforme os operandos sejam de 8, l6 ou 32 bits. Isso se aplica às instruções INC, NEG, MUL e DIV, a serem utilizadas neste experimento, quando um dos operandos deve vir da memória. Você encontrará outras situações que requerem qualificativos. Caso esqueça de usá-los, o SID enviará uma mensagem ambiguous operand. 1. REGISTRADOR DE FLAGS (SEMÁFORO) No 8086/88, o registrador de flags é um registrador de l6 bits, contendo nove flags de um bit, que são usados para indicar várias condições decorrentes da execução de instruções. Os bits 0, 2, 4, 6, 7 e 11 contém flags de estado, que denotam os resultados de operações no programa. Os bits de 8 a 10 contém flags de controle, e os bits 1, 3, 5, 12 e 15 não são utilizados. Ao longo da apresentação do conjunto de instruções, em particular das operações aritméticas, será discutido o efeito da realização das operações sobre os flags de estado. No entanto, o aluno deve pesquisar a estrutura do registrador de flags, para conhecer também o significado dos flags de controle. 2. NOTAÇÃO NUMÉRICA Para trabalhar com o conjunto de instruções aritméticas é necessário conhecer o tipo de representação numérica utilizada pelo processador. O hardware do microprocessador 8086/88 foi projetado para operar números binários em complemento de dois. Tal notação simplifica bastante a implementação da unidade lógica e aritmética. Você verá, no entanto, que é possível trabalhar com outros tipos de representações, dependendo da escolha das instruções e interpretação do resultado.

Números Sinalizados - Notação em Complemento de Dois Na representação em complemento de dois o bit mais significativo é usado para indicar o sinal do numero ( 0 para positivo, l para negativo), e os demais bits representam a magnitude do número. A magnitude de um número positivo é a sua representação direta na base binária. Em um byte, a faixa de números positivos varia de 00H a 7FH (em decimal, de 0 a 127). Uma regra simples para trocar o sinal de um número consiste em complementar todos os seus bits ( inclusive o de sinal) e somar l ao resultado, desprezando o, caso exista. A partir dessa regra, podemos deduzir como obter o módulo de números negativos. A faixa de números negativos de um byte varia de 80H a FFH (em decimal, de -128 a -1). Consulte uma referência adicional sobre essa notação, bem como suas propriedades relativas as operações de soma e subtração. Em particular, veja o que significam, overflow e bit de sinal. Números não Sinalizados Nesta notação, todos os bits são utilizados para representar a magnitude do número, diretamente na base binária. Assim, números de um byte variam de 00H a FFH (em decimal, de 0 a 255). Números em BCD A notação BCD (decimal codificado em binário) consiste basicamente em converter cada dígito decimal para os quatro bits de sua representação binária, como no exemplo. decimal BCD 7 0 4 2 111 0000 0100 0010 7 0 4 2 3. INSTRUÇÕES ARITMÉTICAS 3.1 Instruções de Adição Nestas operações os operandos podem ser de oito ou dezesseis bits. Destino pode ser um registrador ou uma locação de memória. Fonte pode ser: um dado imediato, um registrador ou uma locação de memória. Nem todas as combinações são permitidas. Por exemplo, você não pode somar diretamente os conteúdos de duas locações de memória. Consulte o conjunto de instruções do 8086/88 (apostila Assembly Manual de Referência ) para conhecer as opções válidas. ADD ADC INC DAA AAA destino ADD soma destino com fonte e coloca o resultado em destino. ADC soma destino com fonte e com o flag, colocando o resultado em destino e então reseta o bit Carry (C = 0). É útil quando precisamos somar dados longos, como no exemplo. 374210 + 14F931 =? 0 1 0 37 42 10 14 F9 31 4C 3B 4 l ADC ADC ADD

INC adiciona l ao conteúdo de destino. O conteúdo de destino é tratado como um número não sinalizado. O flag C () não é afetado. Se isso for um inconveniente, você pode usar ADD destino, 1. Significado dos flags: S(sinal), O (overflow) e C () na Adição A ULA (Unidade Lógica e Aritmética) do 8086/88 trata operandos em complemento de dois. No entanto, você pode usar as instruções ADD e ADC para somar números não sinalizados. Nesse caso, os flags S (sinal) e O (overflow) deixam de ter significado, e o flag C () passa a detectar overflow. A representação BCD é bem interessante, principalmente quando envolve dados de entrada ou saída. O 8086/88 dispõe da instrução DAA, que realiza ajustes nos resultados quando números BCD são somados. É necessário que esses resultados estejam no registrador AL. Por exemplo, ao somarmos 14 + 17 (decimal), deveríamos ter como resultado 31. A instrução ADD, no entanto, daria como resultado 2B. O necessário ajuste (somar 6 aos resultados maiores que 9) é realizado pela instrução DAA (ajuste decimal), como no programa exemplo abaixo. prog. fonte ação MOV AL, 14 AL 14 ADD AL, 17 AL 14 + 17 = 2B DAA AL 2B + 06 = 31 INT 3 Finalmente, AAA (ajuste ASCII) é usada para operandos codificados em ASCII. Esta instrução não será utilizada neste experimento. 3.2 Instruções de Subtração As instruções SUB, SBB, DEC, DAS (ajuste decimal) e AAS (ajuste ASCII) são similares às de soma. A instrução NEG troca o sinal do operando contido em destino, de acordo com as regras do complemento de dois. Observe que todo o operando é afetado, não apenas o bit de sinal. SUB SBB DEC DAS AAS NEG destino destino A instrução SUB subtrai fonte de destino (destino fonte) e armazena o resultado em destino. 3.3 Instrução de Multiplicação MUL fonte MUL multiplica números não sinalizados. Se fonte é de oito bits, multiplica fonte por AL e coloca o resultado em AX. Exemplos: MUL MUL BL BYTE [0l00] Se fonte é de dezesseis bits, multiplica fonte por AX e coloca o resultado em DX : AX (parte mais significativa em DX, parte menos significativa em AX). Exemplos: MUL BX MUL WORD [0200]

Comportamento dos flags nas operações de multiplicação Verifique nas tabelas do conjunto de instruções do microprocessador (apostila Assembly Manual de Referência ) o que é dito a respeito dos flags. Veja que esses flags são afetados, em sua maior parte, de forma aleatória. Observe que, embora os flags de overflow e sejam afetados pelas instruções de multiplicação, você precisa interpretar isto com um certo cuidado. Para operandos de 8 bits, o micro reserva um espaço de 16 bits para o resultado. Isso garante que nunca haverá overflow ou se considerarmos o resultado global. No entanto, esses flags comparam a dimensão do resultado com a dos operandos. Assim, por exemplo, se o flag O = 0, após uma multiplicação de operandos de oito bits, isso significa que o resultado coube em 8 bits ( ou seja, AH = 00 e AL = resultado ); se o flag O = 1, significaria que o resultado não coube em 8 bits ( ou seja, AH 00, mas AX = resultado ). A situação é similar para operandos de 16 bits, com resultados de 32 bits. Procure analisá-la. 3.4 Instrução de Divisão DIV fonte Esta instrução divide números não sinalizados. Para operandos fonte de um byte, divide AX por fonte e coloca o quociente em AL, e o resto da divisão em AH. Para operandos fonte de dezesseis bits, divide DX : AX por fonte, colocando o quociente em AX e o resto em DX. Verifique nas tabelas como se comportam os flags de estado no caso de operações de divisão. Você verá que o estado dos flags (semáforos) não é definido para esta operação. No entanto, existem situações incompatíveis, e é importante que você as evite. Pode acontecer, por exemplo, uma tentativa de dividir um número por zero ou, mais freqüentemente, uma tentativa de dividir dois números tais que o resultado não cabe no espaço a ele destinado. Como exemplo, considere o trecho de programa abaixo: MOV AX, 1000 MOV BL, 02 DIV BL Parece correto, mas se observarmos com cuidado veremos que o quociente não cabe em AL, nem o resto em AH. Nesses casos, o microprocessador vai gerar uma interrupção que desativará o próprio SID. Para evitar esse problema, escolha cuidadosamente os dados quando for testar a instrução de divisão. O 8086/88 dispõe de instruções específicas para multiplicar e dividir números sinalizados, no entanto estas instruções não serão discutidas porque estão fora do escopo deste experimento. 4. INSTRUÇÕES LÓGICAS O microprocessador 8086/88 possui um conjunto de instruções que realizam operações lógicas AND OR XOR NOT destino. As operações lógicas são realizadas bit a bit, entre os bits de mesma ordem. Os operandos destino e fonte podem ser registradores ou locações de memória referenciadas por diversas formas de endereçamento. Em geral, nas instruções que envolvem dois operandos, não é possível referenciar ambos os operandos em locações de memória, e apenas o operando fonte pode ser imediato. Verifique nas tabelas do conjunto de instruções do microprocessador quais flags são afetados e de que forma.

5. INSTRUÇÕES DE DESLOCAMENTO Dois tipos de instrução de deslocamento são disponíveis: deslocamento lógico e deslocamento aritmético. Cada um desses tipos pode realizar deslocamentos para a direita ou para a esquerda. SHL destino, contador (desl. lógico à esquerda) SAL destino, contador (desl. aritmético à esquerda) SHR destino, contador (desl. lógico à direita) SAR destino, contador (desl. aritmético à direita) O Destino pode ser um registrador ou uma locação de memória. O contador pode ser igual a 1, e, nesse caso, o deslocamento será de apenas um bit; pode também ser igual ao valor de CL e, nesse caso, o conteúdo desse registrador indicará de quantos bits é o deslocamento. No deslocamento aritmético à direita (SAR) os bits vagos à esquerda são preenchidos com o valor original do bit mais significativo. Veja exemplos a seguir. Exemplo 1 : SAR BL,1 BL anterior 0 1 0 0 1 1 0 1 BL final 0 0 1 0 0 1 1 0 1 Exemplo 2 : MOV CL, 02 SAR AL, CL AL anterior 1 0 0 1 1 0 0 0 AL final 1 1 1 0 0 1 1 0 0 Sendo o operando um número sinalizado, você pode observar que, a cada bit deslocado, o conteúdo anterior é dividido por dois. O sinal original do número é preservado. No deslocamento lógico à direita (SHR), bem como nos deslocamentos aritméticos ou lógicos à esquerda, os bits vagos são preenchidos por zeros. Você pode observar que SAL e SHL realizam exatamente a mesma operação. Para o microprocessador não há diferença entre essas duas instruções. Apenas por uma questão de coerência do programa fonte, você utilizará SAL quando trabalhar com operandos sinalizados. Nesse caso, o efeito de cada bit deslocado é multiplicar o operando por dois. As instruções de deslocamento lógico serão usadas quando o operando representar um número não sinalizado, ou quando o mesmo não tiver significado numérico. Analise detalhadamente as instruções de deslocamento aqui abordadas, propondo exemplos para você mesmo. Verifique nas tabelas quais flags são afetados. Procure descobrir em que condições ocorrerá overflow O, e o que significa o bit de paridade P. 6. INSTRUÇÕES DE ROTAÇÃO São semelhantes às instruções de deslocamento. Executam deslocamentos à esquerda ou à direita, de apenas 1 bit, ou utilizando CL como contador de deslocamentos. A diferença está no fato de que as instruções de rotação realimentam os bits que saem por uma extremidade para as posições vagas na outra extremidade. Destino pode ser um registrador ou locação de memória. O contador pode ser "1" ou CL. ROL destino, contador (rotação à esquerda) ROR destino, contador (rotação à direita) RCL destino, contador (rotação à esquerda com ) RCR destino, contador (rotação à direita com )

Exemplo 1: ROL BL, 1 [BL ] a nte rior 0 1 0 0 1 1 0 1 [BL ] fina l 1 0 0 1 1 0 1 0 0 0 Exemplo 2: MOV CL, 03 RCR [0500], CL [0500] anterior 1 1 0 0 1 0 0 1 0 3 deslocamentos [0500] final 0 1 0 1 1 0 0 1 0 PREPARAÇÃO 1. Faça um mapa do registrador de flags, e indique a função de cada bit: (O, S, Z, A, P, C). 2. Determine o resultado da soma abaixo, bem como os bits de estado (flags) resultantes. Considerando que os operandos são números representados em complemento de dois, o resultado obtido está correto? Qual o flag que assegura isto? Se os operandos são números não sinalizados, o resultado está correto? Qual flag assegura isto? 0 1 1 1 0 0 1 0 Flags: O, S, Z, A, P, C + 0 0 0 1 0 0 0 1 3. Faça um programa para carregar dados (modo imediato) em AX e BX, e em seguida subtraí-los, deixando o resultado em AX. 4. Faça um programa para somar operandos BCD provenientes das locações de memória 0200 e 020l, deixando o resultado em 0202. 5. O programa a seguir soma operandos longos provenientes da memória, e coloca o resultado também na memória. Após analisar o programa, faça um mapa de memória indicando as locações onde devem estar armazenados os operandos abaixo, e a locação onde será armazenado o resultado. ORG 1000 MOV AX, [0100] ADD AX, [0104] MOV [0108], AX MOV AX, [0102] ADC AX, [0106] MOV [010A], AX INT 3 operando 1: 001A2B03 operando 2: 03F90201

6. Faça um programa para multiplicar operandos de dezesseis bits. Escolha o modo de endereçamento. 7. Suponha um valor inicial zero para todos os flags de estado. Preencha a tabela abaixo, mostrando o valor esperado (em hexa) para AH e AL, bem como os flags de estado (1 ou 0) após a execução de cada instrução do programa dado. MOV AX, 23C5 OR AH, AL AND AH, 0F XOR AH, AL NOT AX INT 3 AH AL O S Z A P C 8. Compare os resultados e flags decorrentes das duas instruções abaixo, apontando semelhanças e diferenças. XOR NOT AX, FFFF AX