EEL7030 - Microprocessadores Prof. Raimes Moraes GpqCom – EEL UFSC.

Slides:



Advertisements
Apresentações semelhantes
Parte 1: Organização de Computadores
Advertisements

Estruturas de Dados Marcio Gonçalves.
Arquitetura e organização de computadores
Arquitetura e organização de computadores
Utilizando o DOS -r ip IP 0102 :100 -g 102 A Caracter que foi impresso pelo DOS AX=0241 BX=0000 CX=0000 DX=0041 SP=FFEE BP=0000 SI=0000.
Execução de Programas Partes de um programa: ‣ Dados
SOFTWARE BÁSICO.
Assembly MAC-1 Implementação de ciclos Ciclo ‘while’ // Em Java : ...
Aula 4 – Sumário Linguagem assembly do MAC-1 A pilha
Sistemas Embarcados Microcontroladores PIC
Arquitetura dos Microprocessadores 8086 e 8088
Arquitetura dos Microprocessadores 8086 e 8088 Sistemas Embarcados.
Arquitetura dos Microprocessadores 8086 e 8088
Execução de Programas Partes de um programa: Dados Código (instruções) Um programa necessita estar carregado em memória RAM para ser executado, sendo assim,
Organização da Memória
ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM
PROCEDIMENTOS COM RECURSIVIDADE
ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM
ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM
ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
EEL Microprocessadores
EEL Microprocessadores
O MICROPROCESSADOR INTEL 8080
REPRESENTAÇÃO DE INSTRUÇÕES
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Montador para Intel TASM - Turbo Assembler
ANEXO-1 : INSTRUÇÕES(ROTINA)
Assembly x86.
Autor: Fernando de Mesentier Silva
EEL Microprocessadores
Linguagem de Montagem.
Linguagem de Montagem Vetores.
Representação de Instruções
João Ferreira, Dez 2003STRINGS, 1/6 Definição de String String (sentido lato) -> um string é um conjunto de valores (não necessariamente interpretáveis.
Linguagem de Montagem PROVA 4 – 3/12.
PROGRAMAÇÃO ESTRUTURADA (MODULARIZAÇÃO/SUBPROGRAMAÇÃO)
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Prática de Programação Assembly 8086
Interface C / Assembly Modo Real
2 -1 Organização Básica de Computadores e Linguagem de Montagem Ricardo Pannain ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM - Laboratório.
Processamento de dados na UCP e memória UCP
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Capítulo VIII Ambientes de Execução
ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM
Arquitetura de Computadores
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
Prof. Alessandro Gonçalves
8088 Assembly Software Básico Mitsuo Takaki.
Registradores.
8 - 1 Organização Básica de Computadores e Linguagem de Montagem Ricardo Pannain ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM A pilha e subrotinas.
Procedimentos Registro de Ativação e Variáveis Locais 11 1.
Rotinas do BIOS e DOS Serviços de vídeo (INT 10H)
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Organização Básica de Computadores e Linguagem de Montagem Ricardo Pannain ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM Arrays e modos.
Geração de Código Fase final do compilador
2a Aula Pratica Dispositivos Programáveis Roteador 2E-2S e Modularização.
Aula 4 – Sumário Linguagem assembly do MAC-1: Funções e procedimentos
INE - UFSC - Disciplina Estruturas de Dados - Prof. Dr. Aldo von Wangenheim Página 1 Estruturas de Dados - T.332 Capítulo 3 Parte 1: Ponteiros, Passagem.
Interface Hardware Software
Existem 8 registos principais de 32 bits no processador (existem mais como %EIP): %EAX %EBX %ECX %EDX %ESI %EDI %EBP %ESP Os registos são armazenados em.
Afonso Ferreira Miguel
11 Revisão da Linguagem C Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
O Stack e Subrotinas Permitem reusar o código Escreva e depure o código uma vez, use-o quantas vezes for preciso Uma Subrotina deve ser chamada Uma Subrotina.
INE5408 Estruturas de Dados Listas Encadeadas Simples.
Ney Laert Vilar Calazans Exemplo de Apresentação de TP1 Descrição Resumida de uma Arquitetura de Processador: o estudo de caso do Intel 8086 ORGANIZAÇÃO.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
EA869 Subrotinas Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof. Levy Boccato 1.
Arquitetura ARM Subrotinas.  Implementar uma sub-rotina requer dois passos: 1.Armazenar o endereço de retorno. 2.Desviar a execução para o endereço da.
Transcrição da apresentação:

EEL Microprocessadores Prof. Raimes Moraes GpqCom – EEL UFSC

Parâmetros e Variáveis Locais Capítulo 7 – Livro Ziller

CODIGO SEGMENT INICIO: MOV AX,DADOS MOV DS,AX ; INICIALIZACAO DE DS LEA DX,MSG1 ; APONTA PARA O TEXTO CALL SHOW SHOW PROC NEAR MOV AH,09H ; SERVICO DO DOS INT 21H ; EXECUTA FUNCAO DO DOS P/ MSG1 RET ; RETORNA AO PROGRAMA PRINCIPAL SHOW ENDP CODIGO ENDS Macro-Assembler – Subrotina Near DADOS SEGMENT MSG1 DB JÁ VOU$' DADOS ENDS

CODIGO SEGMENT INICIO: MOV AX,DADOS MOV DS,AX ; INICIALIZACAO DE DS LEA DX,MSG1 ; APONTA PARA O TEXTO CALL FAR PTR SHOW CODIGO ENDS Macro-Assembler – Subrotina Far DADOS SEGMENT MSG1 DB JÁ FUI$' DADOS ENDS ROTINA SEGMENT SHOW PROC FAR MOV AH,09H ; SERVICO DO DOS INT 21H ; EXECUTA FUNCAO DO DOS P/ MSG1 RET; RETORNA AO PROGRAMA PRINCIPAL SHOW ENDP ROTINA ENDS

Passagem de Parâmetros para Subrotinas Método 1 – Via Registrador: Exemplo acima. Offset da mensagem passado via registrador DX Método 2 – Via Variáveis Globais Método 3 – Via Pilha

CODIGO SEGMENT INICIO: MOV AX,DADOS MOV DS,AX ; INICIALIZACAO DE DS LEA PARM1,MSG1 ; APONTA PARA O TEXTO CALL SHOW SHOW PROC NEAR MOV DX, PARM1 MOV AH,09H ; SERVICO DO DOS INT 21H ; EXECUTA FUNCAO DO DOS P/ MSG1 RET ; RETORNA AO PROGRAMA PRINCIPAL SHOW ENDP CODIGO ENDS DADOS SEGMENT MSG1 DB JÁ VOLTO$ PARM1DW ? DADOS ENDS Subrotina Near: Passagem de Parâmetro Via Variável Global

Subrotina Near: Passagem de Parâmetro Via Pilha - 1 Antes: SS = 1760H; SP = 0400H; MOV AX,PARM1 PUSH AX MOV AX,PARM2 PUSH AX CALL SHOW 1780:01B0: :03FAHB0HIP LSB 1760:03FBH01HIP MSB 1760:03FCHPARM 2 LSB 1760:03FDHPARM 2 MSB 1760:03FEHPARM 1 LSB 1760:03FFHPARM 1 MSB 1760:0400H Pilha

Subrotina Near: Passagem de Parâmetro Via Pilha - 2 SHOW:PUSHBP MOV BP,SP MOVBX,[BP+4] ; obtém PARM2 MOVCX,[BP+6] ; obtém PARM1.... POPBP RET 1760:03F8HBP LSB 1760:03F9HBP MSB 1760:03FAHB0HIP LSB 1760:03FBH01HIP MSB 1760:03FCHPARM 2 LSB 1760:03FDHPARM 2 MSB 1760:03FEHPARM 1 LSB 1760:03FFHPARM 1 MSB 1760:0400H Pilha

Subrotina Near: Passagem de Parâmetro Via Pilha - 3 Antes: SS = 1760H; SP = 0400H MOV AX,PARM1 PUSH AX MOV AX,PARM2 PUSH AX CALL SHOW; SP = 03FCH 1780:01B0ADDSP,4; SP = 0400H 1760:03FAHB0HIP LSB 1760:03FBH01HIP MSB 1760:03FCHPARM 2 LSB 1760:03FDHPARM 2 MSB 1760:03FEHPARM 1 LSB 1760:03FFHPARM 1 MSB 1760:0400H Pilha

Subrotina FAR: Passagem de Parâmetro Via Pilha -1 Antes: SS = 1760H; SP = 0400H; MOV AX,PARM1 PUSH AX MOV AX,PARM2 PUSH AX CALL FAR PTR SHOW; SP = 03FCH 1780:01B0 :ADD SP,4; SP = 0400H 1760:03F8HB0HIP LSB 1760:03F9H01HIP MSB 1760:03FAH80HCS LSB 1760:03FBH17HCS MSB 1760:03FCHPARM 2 LSB 1760:03FDHPARM 2 MSB 1760:03FEHPARM 1 LSB 1760:03FFHPARM 1 MSB 1760:0400H Pilha

Subrotina FAR: Passagem de Parâmetro Via Pilha - 2 Pilha 1760:03F6HBP LSB 1760:03F7HBP MSB 1760:03F8HB0HIP LSB 1760:03F9H01HIP MSB 1760:03FAH80HCS LSB 1760:03FBH17HCS MSB 1760:03FCH60HPARM 2 LSB 1760:03FDH16HPARM 2 MSB 1760:03FEH02HPARM 1 LSB 1760:03FFH02HPARM 1 MSB 1760:0400H

Subrotina FAR: Passagem de Parâmetro Via Pilha - 3 SHOW:PUSHBP MOV BP,SP MOVBX,[BP+6] ; obtém PARM2 MOVCX,[BP+8] ; obtém PARM1.... POPBP RET

Comparação do modo de Passagem de Parâmetros para Subrotinas Via Registrador: Nro de registradores pode ser inferior a nro. de parâmetros; Difícil de estabelecer convenção sobre ordem de passagem dos parâmetros; Maior complexidade da documentação. Via Variáveis Globais: Menor velocidade que via registrador; Difícil de estabelecer convenção sobre ordem de passagem dos parâmetros; Maior complexidade da documentação. Via Pilha Menor velocidade que via registrador; Facilita aninhamento de subrotinas.

Variáveis Locais Caso seja necessária a utilização de variável por subrotina para informar, por exemplo, o número de caracteres de mensagem apresentado no vídeo para o programa principal, tem-se como opções de guardar o dado em: Registrador (há registrador disponível?); Posição de memória reservada durante toda a execução do programa para esta finalidade; Posição de memória da pilha que poderá ser utilizada para outras rotinas.

Subrotina NEAR: Criação de Variável Local SHOW:PUSHBP MOV BP,SP SUBSP, :03F6HVARIÁVEL LOCAL MSB 1760:03F7HVARIÁVEL LOCAL MSB 1760:03F8HBP LSB 1760:03F9HBP MSB 1760:03FAHIP LSB 1760:03FBHIP MSB 1760:03FCHPARM 2 LSB 1760:03FDHPARM 2 MSB 1760:03FEHPARM 1 LSB 1760:03FFHPARM 1 MSB 1760:0400H Pilha

Variáveis Locais Variável local do exemplo acima é acessada via BP-2 O endereço seria o mesmo para subrotina FAR; Variável local é acessada por deslocamento negativo em relação a BP. Parâmetro é acessado por deslocamento positivo em relação a BP. Para recuperar o valor de BP colocado na pilha, espaço da variável local é removido antes: ADD SP,2 POP BP RET

Subrotina NEAR: Uso de Variável Local – Retorno em AX SHOW:PUSHBP MOV BP,SP SUBSP,2 MOVWORD PTR [BP-2],00 MOVBX,[BP+4] ; obtém OFFSET MENSAGEM VOLTA:CMPBYTE PTR [BX],$ JZFIM INCWORD PTR [BP-2] INCBX JMPVOLTA FIM:MOVAH,09 MOVDX,[BP+4] INT21H MOVAX,[BP-2] ADDSP,2 POPBP RET

Manipulação de Strings Capítulo 9 – Livro Ziller

Manipulação de Strings O 8086 conta com conjunto de instruções para manipular cadeia de caracteres ou tabelas, permitindo: Copiar dados de uma região de memória para outra; Comparar conteúdo de diferentes regiões de memória (tabelas ou cadeia de caracteres); Varrer memória para buscar dado igual ou diferente à referência; Leitura consecutiva de dados da memória; Preenchimento de posições consecutivas da memória.

FunçãoMnemônicosArgumentos CópiaMOVS/MOVSB/MOVSWOrigem, Destino ComparaçãoCMPS/CMPSB/CMPSWOrigem, Destino VarreduraSCAS/SCASB/SCASWDestino LeituraLODS/LODSB/LODSWOrigem PreenchimentoSTOS / STOSB /STOSWDestino Origem: DS:[SI] Destino : ES:[DI]

Flags de Controle DF Direcão (forward/backward) Usado em Instruções de manipulação de strings CLD => DF = 0 => Incrementa SI ou DI STD => DF = 1 => Decrementa SI ou DI

Prefixos de Repetição Códigos alocados antes das instruções de manipulação de instruções para causar sua repetição até condição de parada. PrefixoCondição de Parada REPCX=0 REPE/REPZCX=0 ou ZF=0 REPNE/REPNZCX=0 ou ZF=1 Comparação

Instrução STOS – Preenchimento de memória Antes: ES = 1760H; DI = 0400H; 1760:03FAH16H 1760:03FBH02H 1760:03FCH16H 1760:03FDH02H 1760:03FEH16H 1760:03FFH02H 1760:0400H16H 1760:0401H02H Objetivo STD MOVCX,4 MOV AX,0216h LOOP : STOSW DECCX JNZLOOP STD MOVCX,4 MOV AX,0216h REP STOSW ; STD – sets DF flag. Operações com strings decrementam SI e/ou DI. ; STOSW - ES:[DI] <- AX

Instrução LODS – Leitura de memória 1600:04FAH16H 1600:04FBH02H 1600:04FCH16H 1600:04FDH02H 1600:04FEH16H 1660:04FFH02H 1600:0400H16H 1600:0501H02H Objetivo: COPIAR de 1 para :03FAH16H 1760:03FBH02H 1760:03FCH16H 1760:03FDH02H 1760:03FEH16H 1760:03FFH02H 1760:0400H16H 1760:0401H02H 1 2

Cópia de Dados – 1 – Instrução LODS MOV BX, 1760H MOV DS,BX MOV SI,03FAH ;DS=1760; SI=03FAH MOV AX,1600H MOV ES,AX MOV DI,04FAH ;ES=1600; DI=04FAH MOVCX,4 CLD ; incrementa SI e/ou DI VOLTA: LODSW ; lê de DS:SI (coloca em AX) STOSW ; escreve em ES:DI (conteúdo de AX) LOOPVOLTA

Controle de Loop

Instrução MOVS – Cópia de memória 1600:04FAH16H 1600:04FBH02H 1600:04FCH16H 1600:04FDH02H 1600:04FEH16H 1660:04FFH02H 1600:0400H16H 1600:0501H02H Objetivo: COPIAR de 1 para :03FAH16H 1760:03FBH02H 1760:03FCH16H 1760:03FDH02H 1760:03FEH16H 1760:03FFH02H 1760:0400H16H 1760:0401H02H 1 2

Cópia de Dados – 2 - MOVSW MOV BX, 1760H MOV DS,BX MOV SI,03FAH ;DS=1760; SI=03FAH MOV AX,1600H MOV ES,AX MOV DI,04FAH ;ES=1600; DI=04FAH MOVCX,4 CLD ; incrementa SI e/ou DI REPMOVSW ; lê de DS:SI --- escreve em ES:DI

Cópia de Dados – 3 - MOVSB MOV BX, 1760H MOV DS,BX MOV SI,03FAH ;DS=1760; SI=03FAH MOV AX,1600H MOV ES,AX MOV DI,04FAH ;ES=1600; DI=04FAH MOVCX,8 CLD ; incrementa SI e/ou DI REPMOVSB ; lê de DS:SI --- escreve em ES:DI

Instrução MOVS OBSERVAÇÕES MOVSB equivale a MOVS BYTE PTR ES:[DI],[SI] MOVSW equivale a MOVS WORD PTR ES:[DI],[SI] Caso se queira transferir dentro de um mesmo segmento, uma opção seria: MOVS BYTE PTR DS:[DI],[SI] REP MOVS ( e outras instruçoes que manipulam strings) são suspensas para atendimento de interrupções. Retomadas a partir do CX na qual pararam.

COMPARAÇÃO DE DADOS CMPSB INICIO: MOV AX,DADOS MOV DS,AX ; INICIALIZACAO DE DS MOV ES,AX ; INICIALIZACAO DE ES LEA SI,TAB1 LEA DI,TAB2 MOV BL,00 CLD MOV CX,17 VOLTA: CMPSB JZ VAI INC BL VAI:LOOP VOLTA MOV AH,BL DADOS SEGMENT TAB1 DB 'MICROCONTROLADORES' TAB2 DB 'MICROPROCESSADORES'.... DADOS ENDS

VARREDURA DE DADOS SCASB INICIO: MOV AX,DADOS MOV DS,AX ; INICIALIZACAO DE DS MOV ES,AX ; INICIALIZACAO DE ES LEA DI,TAB1 CLD MOV AL,'T' MOV CX,17 VOLTA: REPNE SCASB JZ FIMCMP MOV AH,'E' JMP ERRO FIMCMP: MOV AX,DI ADD AL,30H DADOS SEGMENT TAB1 DB 'MICROCONTROLADORES' MSG1 DB 'POSICAO DO CARACTER T = ' MSG2 DB '0 $' DADOS ENDS

Testes de Flags

Testes de Números com Sinal