Interface Hardware Software
description
Transcript of Interface Hardware Software
Interface Hardware Software
Monitoria
Diogo de Lima Lages - dll
Lucio Paulo de Souza Ribeiro- lpsr
Revisão
Registradores de propósito geralRegistradores 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
Acumulador
EAX AH AL
EBX BH BL
Contador
ECX CH CL
Dados
EDX DH DL
Source Index
ESI SI
Destiny Index
EDI DI
Stack base Pointer
EBP BP
Stack Pointer
ESP SP
Revisão
Registradores SegmentosRegistradores Segmentos
Servem para armazenar determinados segmentos:
Code Segment
CS
Stack Segment
SS
Data Segment
DS
Extra Segment
ES
Guarda o segmento de código
Guarda o segmento da pilha
Armazena o segmento de dados
Segmento extra (utilizado por algumas instruções)
Segmento extra (utilizado por algumas instruções)
Segmento extra (utilizado por algumas instruções)
Extra Segment
FS
Extra Segment
GS
Revisão
Registradores de PilhaRegistradores de Pilha
Servem para armazenar determinados segmentos:
Obs.: Algumas instruções necessitam de operadores específicos como rep e loop
Stack Segment
SS
Stack Pointer
ESP SP
Base Pointer
EBP BP
Guarda o segmento de pilha
Guarda o endereço atual da pilha
Utilizado para recuperar paramentros passados através da pilha
Revisão
Registradores EspecíficosRegistradores Específicos
Registradores que tem funcionalidade padrão
Obs.: Só pode ser alterado por operações de pulo como jmp,call
Instruction Pointer
EIP IP
Guarda o deslocamento em relação a base (CS).Aponta para instrução a ser executada
Revisão
Modo RealModo 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 : 83782 – 4 Shift Left em CS (Lógico)3 – F0000 + 83784 – F8378 (Endereço Físico)
* 1048.576 bytes
SEG DESL.
F0000 0000-FFFF
E0000 0000-FFFF
D0000 0000-FFFF
C0000 0000-FFFF
B0000 0000-FFFF
A0000 0000-FFFF
90000 0000-FFFF
80000 0000-FFFF
70000 0000-FFFF
60000 0000-FFFF
50000 0000-FFFF
40000 0000-FFFF
30000 0000-FFFF
20000 0000-FFFF
10000 0000-FFFF
00000 0000-FFFF
Endereço Físico Endereço Físico
Revisão
Modelos de memóriaModelos de memória
Modelo Segmento de dados Segmento de Código
*TINY UM UM
SMAL UM UM
MEDIUM UM VÁRIOS
COMPACT VÁRIOS UM
LARGE VÁRIOS VÁRIOS
HUGE VÁRIOS VÁRIOS
FLAT UM UM
Obs.: No modelo tiny o segmento de dados e o de código apontam para o mesmo local
Tasm/Tlink/Td
TasmTasm
Tlink Tlink
► 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 .
► 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
TdTd
►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
Td arq1.exe
MontandoMontando
Tasm /zi arq1.asm arq1.o -> Acrescenta informações para debug
LinkeditandoLinkeditando
DebugandoDebugando
Tlink /v arq1.o -> Acrescenta informações para debug
Mais informaçõesMais informações
Tasm /?Tlink
Usando TD
Funcionalidade BásicasFuncionalidade Básicas
Caminho Função
FILE -> OPEN Seleciona o arquivo a ser aberto
VIEW->BREAKPOINTS Visualiza breakpoints
VIEW->VARIABLES Visualiza variáveis
VIEW->REGISTER Visualiza registradores
VIEW->CPU Visualiza informações sobre processador
VIEW->WATCH Visualiza watches
VIEW->DUMP Visualiza memória
VIEW->NUMERIC PROCESSOR Visualiza algumas informações sobre o processador de ponto flutuante
RUN->Trace INTO /F7 Executa instrução por instrução
Usando TD
Adicionando BreakpointAdicionando Breakpoint
Deixe o cursor na linha desejada e aperte F2.
Prática – Parte I
Material :Material :
Pacote com ajuda,montador,linkeditor e debug: http://www.cin.ufpe.br/~dll
Código em assembly
Estrutura básicaEstrutura bá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 requisitadaend
Código em assembly
Declarando 1 byte/1 word / 2 words/4wordsDeclarando 1 byte/1 word / 2 words/4words
.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 requisitadaend
Nome db valueNome dw valueNome dd valueNome dq value
Código em assembly
Alocando 1 byte/1 word / 2 words/4 wordsAlocando 1 byte/1 word / 2 words/4 words
.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 requisitadaend
Nome db tamanho DUP(conteudo)Nome dw tamanho DUP(conteudo)Nome dd tamanho DUP(conteudo)Nome dq tamanho DUP(conteudo)
Código em assembly
Declarando uma procedureDeclarando uma 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 retFunc_1 endpend
Porta Paralela
Porta ParalelaPorta Paralela
-> 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 )Status (379 h ou 279 h ou 3bdh )
Dados (378 h ou 278 h ou 3bch)Dados (378 h ou 278 h ou 3bch)
Controle (37A h ou 27A h ou 3beh )Controle (37A h ou 27A h ou 3beh )
-> Permite a entrada de 5 bits em paralelo (Mundo -> Porta) *
-> 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
-> Permite a saida de 4 bits (Porta-> Mundo)* Pino /11
Porta Paralela
DB- FêmeaDB- Fêmea
379h279h
378h278h
37Ah27Ah
Porta Paralela
Escrita na porta paralela por interrupção 17hEscrita na porta paralela por interrupção 17hParâmetros :
AH = 00 (Número do serviço disponibilizado pela int 17)AL = Dado que deseja enviar pela paralelaDX = 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|
Leitura na porta paralela por interrupção 17hLeitura na porta paralela por interrupçã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çãoFunçã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 ADRESSINGI/O PORT ADRESSING
Instruções IN/OUT
IN/OUTIN/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 . ININ
►Permite a leitura através de uma portas determinada ex.: in al,dx
OutOut
►Permite enviar dados através de uma porta determinada ex.: out dx,al
Instruções IN/OUT
Exemplo IN/OUTExemplo 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 requisitadaFunc_1 procPush dxPush ax mov dx,379h ;Porta que vai ser lida in al,dx ;Instrução para efetuar a leituraMov al, ffH mov dx,378h ;Porta onde vai ser escrito o dado out dx,al ;Instrução para efetuar a escritaPop axPop dx retFunc_1 endpend
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