Prévia do material em texto
Arquitetura e Organização de Microprocessadores II Turma: Engenharia de Computação Aula 9 - Manipulação explícita da pilha (PUSH, POP e BP) Prof. Me. Eduardo Martins esmoliveira@uniara.edu.br 1 Contexto e Objetivos da Aula • Objetivo é ensinar os alunos a utilizar o compilador/emulador do processa dor Intel 8086 disponível online no endereço: 8086 Emulator • Compreender a pilha como estrutura de dados, sua organização LIFO e sua aplicação para: • Armazenar valores temporários • Preservar registradores • Passar parâmetros para procedimentos Como o 8086 manipula a pilha • No 8086 (real e no emulador): • A pilha: • cresce para baixo (endereços decrescentes) • armazena sempre WORD (2 bytes) • A instrução PUSH faz duas coisas, nesta ordem: Comando interno do PUSH AX • SP = SP − 2 • [SS:SP] = AX • Ou seja: • Primeiro decrementa o SP, depois grava o dado. Valor inicial do SP no 8086 Emulator Web • No 8086 Emulator Web: • SP começa em: • SP = 0000h • Isso não é padrão de PC real, mas é uma decisão do emulador para simplificar. Primeira execução de PUSH AX • Suponha: • SP = 0000 • AX = 0003 • Agora execute: • PUSH AX • Passo 1 — decremento do SP • SP = 0000 − 2 = FFFE • Por quê? • Registradores são de 16 bits • A subtração é módulo 65536 • 0000 − 0002 = FFFE • Passo 2 — escrita na pilha • [SS:FFFE] ← AX Resultado observado no emulador: • SP = FFFE • AX armazenado no topo da pilha POP AX • No 8086, a instrução POP AX executa duas ações, nesta ordem: • AX = [SS:SP] • SP = SP + 2 Observe que isso é o inverso do PUSH • Comparação direta com PUSH PUSH diminui SP POP aumenta SP PUSH AX POP AX SP = SP - 2 AX = [SP] [SP] = AX SP = SP + 2 Conceitos • PUSH e POP • Registrador SP • Uso de BP para acesso a parâmetros • Pilha como mecanismo de comunicação entre rotinas Estudo de caso • Problema: Criar um procedimento que receba, via pilha, o endereço de um vetor e seu tamanho. O procedimento deve calcular a soma dos elementos e retornar o valor em AX. Avaliação: • Parâmetros passados via pilha • Uso correto de BP • Preservação/restauração de registradores Estudo de caso ; -------- dados -------- VETOR: DB 1 DB 2 DB 3 DB 4 TAM: DB 4 SOMA: DB 0 ; -------- código -------- start: MOV SI, OFFSET VETOR MOV DI, OFFSET TAM MOV CL, byte [DI] EMPILHA: MOV AL, byte [SI] PUSH AX INC SI DEC CL JNZ EMPILHA MOV DI, OFFSET TAM MOV CL, byte [DI] MOV AL, 0 ; acumulador da soma DESEMPILHA: POP BX ; valor desempilhado vai para BL ADD AL, BL ; soma acumulada DEC CL JNZ DESEMPILHA MOV DI, OFFSET SOMA MOV byte [DI], AL HLT Exercício para entrega • Criar um programa em Assembly 8086, compatível com o 8086 Emulator Web, que execute os seguintes passos: • Percorra um vetor de bytes armazenado na memória. • Empilhe apenas os valores pares do vetor. • Após percorrer todo o vetor: • desempilhe os valores empilhados • calcule a soma dos valores pares • Armazene o resultado final da soma em uma variável na memória. Estrutura sugerida do relatório (1 a 2 páginas) 1️⃣ Identificação 2️⃣ Objetivo do exercício • O que o programa faz? 3️⃣ Descrição da solução adotada • Explicação em alto nível, sem repetir o enunciado. • O aluno deve mencionar, por exemplo: • como o vetor é percorrido • como o laço é controlado • onde o resultado é armazenado 4️⃣ Uso dos registradores e da memória • Tabela simples ou lista explicativa 5️⃣ Código-fonte • Inserir o código completo em Assembly, exatamente o que foi testado no 8086 Emulator Web • código identado • comentários permitidos (;) • sem prints de tela • apenas o código-texto 6️⃣ Resultado obtido • Breve descrição do estado final da memória. Slide 1: Arquitetura e Organização de Microprocessadores II Turma: Engenharia de Computação Slide 2: Contexto e Objetivos da Aula Slide 3: Como o 8086 manipula a pilha Slide 4: Valor inicial do SP no 8086 Emulator Web Slide 5: Primeira execução de PUSH AX Slide 6: POP AX Slide 7: Conceitos Slide 8: Estudo de caso Slide 9: Estudo de caso Slide 10: Exercício para entrega Slide 11: Estrutura sugerida do relatório (1 a 2 páginas)