270 likes | 405 Views
Interface Hardware Software. Monitoria Diogo de Lima Lages - dll Lucio Paulo de Souza Ribeiro - lpsr. Revisão. Registradores de propósito geral. Servem para armazenar dados eles são divididos em : Obs.: Algumas instruções necessitam de registradores específicos como rep e loop. Revisão.
E N D
Interface Hardware Software Monitoria Diogo de Lima Lages - dll Lucio Paulo de Souza Ribeiro- lpsr
Revisão Registradores de propósito geral Servem para armazenar dados eles são divididos em : Obs.: Algumas instruções necessitam de registradores específicos como rep e loop
Revisão RegistradoresSegmentos Servem para armazenar determinados segmentos:
Revisão Registradores de Pilha Servem para armazenar determinados segmentos: Obs.: Algumas instruções necessitam de operadores específicos como rep e loop
Revisão RegistradoresEspecíficos Registradores que tem funcionalidade padrão Obs.: Só pode ser alterado por operações de pulo como jmp,call
Revisão Modo Real ► Fornece apenas 1 MB (*aproximadamente) de memória acessível . ► Não fornece proteção para os segmentos ► Endereço físico variando de 00000-FFFFF ► Memória dividida em segmentos ► Cada segmento possui 64 KB ► Possui 16 Segmentos 1 - CS: F000 IP : 8378 2 – 4 Shift Left em CS (Lógico) 3 – F0000 + 8378 4 – F8378 (Endereço Físico) * 1048.576 bytes EndereçoFísico
Revisão Modelos de memória Obs.: No modelo tiny o segmento de dados e o de código apontam para o mesmo local
Tasm/Tlink/Td Tasm ► Montador desenvolvido para borlard ► Serve para transformar o código assembler em código objeto ► Adiciona algumas informações no código fonte (como símbolos para debug) ► Fornece algumas abstrações para facilitar o desenvolvimento em assembly como criação de struct . Tlink ► LinkEditor desenvolvido pela borlard ► Serve para transformar código objeto em código de máquina ► Adiciona algumas informações no código fonte (como símbolos para debug) ► Adiciona códigos externos
Tasm/Tlink/Td Td ►Debugador para código em assembly ►Fácil manipulação ► Permite visualizar o código sendo executada instrução por instrução ► Permite visualizar estado dos processador em tempo de execução ► Fornece uma forma mais rápida para encontrar erros
Montando e Linkeditando Montando Tasm /zi arq1.asm arq1.o -> Acrescenta informações para debug Linkeditando Tlink /v arq1.o -> Acrescenta informações para debug Debugando Td arq1.exe Mais informações Tasm /? Tlink
Usando TD FuncionalidadeBásicas
Usando TD Adicionando Breakpoint Deixe o cursor na linha desejada e aperte F2.
Prática – Parte I Material : Pacote com ajuda,montador,linkeditor e debug: http://www.cin.ufpe.br/~dll
Código em assembly Estruturabásica .model small ;modelo de memória a ser usado .stack ;Define o segmento de pilha .data ;Define segmento de dados .code ;Define segmento de código mov ax,@data ;DS aponta para o segmento de dados mov ds,ax mov ax, 4c00h ;AH – Função a ser chamada int 21h ;Chama SO para executar função requisitada end
Código em assembly Declarando 1 byte/1 word / 2 words/4words Nome db value Nome dw value Nome dd value Nome dq value .model small ;modelo de memória a ser usado .stack ;Define o segmento de pilha .data ;Define segmento de dados meng_1 db 0 meng_2 dw FF meng_3 dd FFFF meng_4 dq FFFFFFFF .code ;Define segmento de código mov ax,@data ;DS aponta para o segmento de dados mov ds,ax mov ax, 4c00h ;AH – Função a ser chamada int 21h ;Chama SO para executar função requisitada end
Código em assembly Alocando 1 byte/1 word / 2 words/4 words Nome db tamanho DUP(conteudo) Nome dw tamanho DUP(conteudo) Nome dd tamanho DUP(conteudo) Nome dq tamanho DUP(conteudo) .model small ;modelo de memória a ser usado .stack ;Define o segmento de pilha .data ;Define segmento de dados meng_1 db 2 dup(?) meng_2 dw 3 dup(0) meng_3 dd 4 dup(3) meng_4 dq 2 dup(‘F’) .code ;Define segmento de código mov ax,@data ;DS aponta para o segmento de dados mov ds,ax mov ax, 4c00h ;AH – Função a ser chamada int 21h ;Chama SO para executar função requisitada end
Código em assembly Declarandouma procedure .model small ;modelo de memória a ser usado .stack ;Define o segmento de pilha .data ;Define segmento de dados .code ;Define segmento de código mov ax,@data ;DS aponta para o segmento de dados mov ds,ax call Func_1 mov ax, 4c00h ;AH – Função a ser chamada int 21h ;Chama SO para executar função requisitada Func_1 proc push bx mov bx,ax pop bx ret Func_1 endp end
Porta Paralela PortaParalela -> Permite a comunicação com dispositivos externos -> Permite que 8 bits de dados possam ser enviados ou recebidos paralelamente . Status (379 h ou 279 h ou 3bdh ) -> Permite a entrada de 5 bits em paralelo (Mundo -> Porta) * Dados (378 h ou 278 h ou 3bch) -> Permite a saida de 8 bits em paralelo (Porta -> Mundo) -> Em modo bidirecional suporta a entrada/saida de dados não pode gerar exceção Controle (37A h ou 27A h ou 3beh ) -> Permite a saida de 4 bits (Porta-> Mundo) * Pino /11
Porta Paralela DB- Fêmea 379h 279h 378h 278h 37Ah 27Ah
Porta Paralela Escritanaportaparalelaporinterrupção 17h Parâmetros : AH = 00 (Número do serviço disponibilizado pela int 17) AL = Dado que deseja enviar pela paralela DX = Porta a ser usada (geralmente é 0) Retorno : AH = Vai conter dados lidos da porta de status (Só importa os 5 bits mais significativos) |11|10|12|13|15| Leituranaportaparalelaporinterrupção 17h Parâmetros : AH = 02 (Número do serviço disponibilizado pela int 17) DX = Porta a ser usada (geralmente é 0) Retorno : AH -> Vai conter os dados lidos da porta de status (Só importa os 5 bits mais significativos) |11|10|12|13|15|
INPUT/OUTPUT Função ► Mecanismo utilizado para se comunicar com outros dispositivos internos ou externos ao computador como : controlador de interrupção ou ainda usar a porta paralela para se comunicar com dispositivo externo . ► A arquitetura do pentium permite que os dispositivos possam ser acessados dos seguintes modos : ► ► ► Pode se comunicar através de portas especificas . Utiliza as instruções IN/OUT para se comunicar ► ► ► Pode se comunicar através de memória mapeada . Utilizada instruções como MOV para se comunicar com dispositivo I/O PORT ADRESSING
Instruções IN/OUT IN/OUT ►São instruções que permitem a comunicação com dispositivos externos através de portas ► As portas podem ser de entrada de saida ou ainda bidirecional . IN ►Permite a leitura através de uma portas determinada ex.: in al,dx Out ►Permite enviar dados através de uma porta determinada ex.: out dx,al
Instruções IN/OUT Exemplo IN/OUT ►Faz a leitura da porta 0x379(status) e envia para porta 0x378(dados) .model small ;modelo de memória a ser usado .stack ;Define o segmento de pilha .data ;Define segmento de dados .code ;Define segmento de código mov ax,@data ;DS aponta para o segmento de dados mov ds,ax call Func_1 mov ax, 4c00h ;AH – Função a ser chamada int 21h ;Chama SO para executar função requisitada Func_1 proc Push dx Push ax mov dx,379h ;Porta que vai ser lida in al,dx ;Instrução para efetuar a leitura Mov al, ffH mov dx,378h ;Porta onde vai ser escrito o dado out dx,al ;Instrução para efetuar a escrita Pop ax Pop dx ret Func_1 endp end
Exercícios - 1 1 ) Escreva um programa em assembly capaz de enviar enviar o byte 0xF4 para porta (0x378) . (Visualize o display)
Exercícios - 2 2 ) Escreva um programa em assembly capaz de receber 5 bits através da porta paralela e mostre esse conteúdo na tela . Use a porta : 0x0379
Exercícios - 3 3 ) Crie agora um programa que envie um byte 0x00 até 0xFF usando a porta paralela . Use a porta (0x378)
Exercícios - 4 4 ) Escreva um programa em assembly que modifica os leds da protoboard somente quando um dos 5 bits de entrada forem modificados