A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Laboratório de Organização e Arquitetura de Computadores PROFESSORES: Elmar Uwe Kurt Melcher Joseana Macêdo Fechine Interrupção – Conceitos Básicos.

Apresentações semelhantes


Apresentação em tema: "Laboratório de Organização e Arquitetura de Computadores PROFESSORES: Elmar Uwe Kurt Melcher Joseana Macêdo Fechine Interrupção – Conceitos Básicos."— Transcrição da apresentação:

1 Laboratório de Organização e Arquitetura de Computadores PROFESSORES: Elmar Uwe Kurt Melcher Joseana Macêdo Fechine Interrupção – Conceitos Básicos

2 Lab. Org. e Arq. de Computadores - DSC-UFCG2 /* ------------------------------------------------------------------------------------------- Fractal com captura da interrupcao do mouse ------------------------------------------------------------------------------------------*/ #include /*** definicoes de macros ***/ // ler de uma porta de I/O #define inpb(p) asm { in al,p } // escrever para porta de I/O #define outb(p,v) asm { mov al,v; out p,al } // instrucao End of Interrupt para o PIC (Programmable Interrupt Controller) #define EOI1 outb(0x20,0x20) // PIC 1 #define EOI2 outb(0xA0,0x20) // PIC 2 /*** struct and type declarations ***/ typedef unsigned char byte; typedef unsigned short word; typedef unsigned int dword; Boa.c

3 Lab. Org. e Arq. de Computadores - DSC-UFCG3 /**** variaveis globais ****/ struct dtr idtr; byte *tela = (byte *)0xE0000000; // endereco da RAM de video /*** declaracoes de referencias externas e internas ***/ extern void cadastrar(int matricula); extern void initializar(); // modo de video grafico #define NLINHAS 768 // numero de linhas na tela #define NCOLUNAS 1024 // numero de colunas na tela Boa.c

4 Lab. Org. e Arq. de Computadores - DSC-UFCG4 void desenhar_fractal() { /* Calculation of Julia set ------------------------ Written by Kiselev Y. 1994 Definitions of complex numbers: z = x + i*y screen coordinates xini <= x < xini+1024*xstep u = s + i*t parameter \ yini <= y < yini+768*ystep Equation used: f(z) = z^2 - u Iteration: f(z), f(f(z)), f(f(f(z))),... until |f(...)| > 2 or max_it iterations Result: pixel value at (x,y) is the number of iterations. */ Boa.c

5 Lab. Org. e Arq. de Computadores - DSC-UFCG5 int main() { char c; cadastrar(9912345); // coloque aqui sua matricula initializar(5); desenhar_fractal(); c=getchar(); return(0); } Boa.c

6 Lab. Org. e Arq. de Computadores - DSC-UFCG6 Exemplo: Trecho de código em Assembly em um programa escrito em C Digite o código abaixo int main() { asm { mov eax,0x1233 add eax,0x22 push eax }; } Boa.c

7 Lab. Org. e Arq. de Computadores - DSC-UFCG7 Exemplo: Trecho de código em Assembly em um programa escrito em C Digite o código abaixo int main() { asm { mov byte [0xE0000000], 55 }; } Boa.c

8 Lab. Org. e Arq. de Computadores - DSC-UFCG8 Observe os valores: yini=-1.15; xini=-1.55; xini+=0.003; yini+=0.003; // insere aqui a instrucao que escreve na tela Exemplo 1: // escreve pontos na tela tela[0] = 55; tela[100*NCOLUNAS+200]=155; Exemplo 2: //escreve o fractal tela[ypix + xpix] = pix; Boa.c

9 Lab. Org. e Arq. de Computadores - DSC-UFCG9 /* descritor de interrupt gate, call gate ou task gate Cada sub-estrutura serve para preencher uma parte dos campos do descritor. Primeiro devem ser preenchidos a.offset e b.offset. */ union gate { struct { // O item n nao deve ser usado. dword offset; byte params; byte type; } a; struct { word n; word selector; dword offset; } b; }; Boa.c

10 Lab. Org. e Arq. de Computadores - DSC-UFCG10 typedef union gate *gate_ptr; /* IDTR e GDTR */ struct dtr { word length; gate_ptr base; }; /**** variaveis globais ****/ struct dtr idtr; Boa.c

11 Lab. Org. e Arq. de Computadores - DSC-UFCG11 Interrupção – mouse Opção 1: void interrupt() { tela[200]=~tela[200]; } Opção 2 _interrupt void interrupt() { tela[200]=~tela[200]; } Boa.c – Novas Funcoes

12 Lab. Org. e Arq. de Computadores - DSC-UFCG12 void setInterrupcao() { asm sidt[idtr]; idtr.base[116].a.offset = &interrupt; // ^ ^ ^ ^ // | | | endereço da rotina de atendimento // | | | // | | descritor da interrupção do mouse // | | // | endereço de inicio da IDT // | // conteudo do registrador IDTR da CPU idtr.base[116].b.offset = &interrupt; idtr.base[116].b.selector = 0x928; idtr.base[116].a.params = 0; idtr.base[116].a.type = 0xEE; } Boa.c – Novas Funções

13 Lab. Org. e Arq. de Computadores - DSC-UFCG13 int main() { char c; cadastrar(9912345); // coloque aqui sua matricula initializar(5); setInterrupcao(); //setar interrupcao desenhar_fractal(); c=getchar(); return(0); } Boa.c

14 Lab. Org. e Arq. de Computadores - DSC-UFCG14 int mouse () { // retorna "true" se tem um byte para ser lido inpb(0x64); //porta de status return _EAX & 1; } void queijo() { // entrega queijo para mouse PS/2 (tambem chamado mouse IBM) while(mouse()) { inpb(0x60); // lˆ byte transmitido pelo dispositivo porta de dados EOI2; } EOI1; } Boa.c

15 Lab. Org. e Arq. de Computadores - DSC-UFCG15 _interrupt void interrupt() { queijo(); tela[200]=~tela[200]; } Boa.c – Novas Funções


Carregar ppt "Laboratório de Organização e Arquitetura de Computadores PROFESSORES: Elmar Uwe Kurt Melcher Joseana Macêdo Fechine Interrupção – Conceitos Básicos."

Apresentações semelhantes


Anúncios Google