Você está na página 1de 82

Sistemas Microcomputadorizados

SMICRO

Apresentao Contedo Avaliao Material Didtico

Esther Luna Colombini esther.colombini@gmail.com

SMICRO

Apresentao Contedo Avaliao Material Didtico

Apresentao

Horrio da disciplina:

Seg: 08:50-12:00 Seg: 13:30-15:30 15:40-17:40 Aulas expositivas; Prticas em laboratrio; Provas tericas e de laboratrio; Trabalho prtico.

Tcnicas de Ensino:

Contedo

Ementa da Disciplina:
1. Histrico: Evoluo das CPUs dos computadores pessoais. Viso geral dos dispositvos dos computadores e arquitetura bsica do computador pessoal (PC). 2. Estudo das CPUs 8086/8088: Barramentos de Endereos e Dados. Registradores e Flags do 8086. Registradores de uso geral (AX, BX, CX e DX). 3. Estudo das CPUs 8086/8088: Registradores de Segmento (CS, DS, SS e ES) e Modos de endereamento. Conjunto de instrues e tcnicas de programao em Assembly. 4. Processadores 80386/80486: A Arquitetura de 32 bits. Barramentos de Endereos e dados da CPU 386. 4

Contedo

Ementa da Disciplina:
5. Processadores 80386/80486: A Arquitetura de 32 bits. Barramentos de Endereos e dados da CPU 386. 6. Processadores Pentium e modelos atuais: Arquitetura e viso geral. 7. Arquitetura do PC e Barramento ISA: PC XT, AT e ATX: ISA. EISA e PCI. Contadores/Temporizadores do Sistema. Placas Mes. Arquitetura dos Chipsets. 8. Decodificao de I/O e Memria: Endereamentos de Dispositivos de I/O. Decodificao de Endereos de Memria.
5

Contedo

Ementa da Disciplina:
9. Interrupes: PIC (Controlador de interrupo). Interrupes por Software e Hardware . Vetores de Interrupo. 10. DMA Inicializao do controlador de DMA. 11. Porta Paralela e Porta Serial. Portas Paralelas e seriais. Controle digital de dispositivos via portas. 12. Redes de Computadores Protocolo TCP/IP. Controle de dispositivos via TCP/IP. 13. Interfaces IDE/E-IDE, SCSI e PCMCIA. 14. Dispositivos de armazenamento.
6

Contedo

Ementa da Disciplina:
15. Parte prtica:
Interfacear o microcomputador atravs de suas portas serial e paralela com diferentes dispositivos externos. Comunicao entre PCs via TCP/IP. Programao C/C++. Programao Assembly para PCs. Aplicaes em geral.

Avaliao

Prticas em Laboratrio Provas e Trabalhos


Nota final = MF = PP*MP + PT*NT

Onde
PP = 0,8 PT = 0,2 MP = (P1 + P2)/2 NT -> composta de trabalhos e exerccos P3, como exame: MP = (P1 + P2 + P3)/3 P3, como substitutiva.

Avaliao (Datas)
P1:16/04/2012 P2:04/06/2012 P3:11/06/2012

Material Didtico

Bibliografia bsica:

Brey, Barry B.; The Intel Microprocessors 8086/8088, 80186/80188, 80286, 80386, 80486, Pentium and Pentium Pro, 7th, New Jersey, Prentice-Hall. 2005 Mendona, Alexandre & Zelenovsky ,Ricardo; PC: um guia prtico de hardware e interfaceamneto, 4, MZEditora, Rio de Janeiro, 2006.

Bibliografia complementar:

FERREIRA, Silvio; Hardware Curso Profissional, Rio de Janeiro, RJ, Axcel Books, 2005. GAONKAR, R. S; Microprocessor Architecture, Programming, and Applications with the 8085. Prentice Hall, 5 edio, 2002. Schildt, Herbert, Referncia Completa Borland C++ Builder, Editora Campus Ltda. SP- 2001. Alves, William Pereira, C++ builder 6: Desenvolva Aplicaes Para Windows, So Paulo, Editora Erica 2002.

Reviso: A Linguagem C

C, ou Linguagem C uma linguagem altamente adaptvel (de sintaxe pequena, poderosa, transportvel), desenvolvida por Dennis Ritchie nos laboratrios Bell, em 1972.
Muitas das idias de C vm da linguagem mais antiga BCPL, desenvolvida por Martin Richards.

Reviso: Um programa inicial


Vejamos um programa inicial em C:

#include <stdio.h> void main(void) { printf (Hello World!!!); }

Reviso: Tipos de Dados Bsicos

A Linguagem C possui basicamente os seguintes tipos de dados: char


int float
um nico byte, que pode conter um caracter do conjunto de caracteres;
um inteiro;

ponto flutuante em preciso simples;

Reviso: Tipos de Dados Bsicos

Exemplos de declarao:

int char

a,b,c; y,nomes[100];

ou, realizando inicializaes imediatas ...


int float

y=0; valor=1.0e-5

Reviso: Exemplo
O exemplo abaixo armazena na varivel c os valores de a e b: #include <stdio.h> void main(void) { int a, b, c; a=10; b=10; c = a + b; printf( valor total: %d, c); }

Reviso: A funo printf


int printf(const char* format, arg_list)

A funo printf() escreve na sada padro do sistema (stdout) os argumentos descritos em arg_list, sob controle da String apontada por format.

Reviso: A funo printf


int printf(const char*format,arg_list)

A String apontada por format pode possuir argumentos que representam caracteres que sero impressos na tela e caracteres que definem o formato pelo qual estes caracteres sero impressos.
Cdigo %c %d %% %f Formato Um nico caracter Decimal Imprime um sinal % Ponto flutuante decimal

Cdigo (Sequncia de Escape) \n \t

Descrio Representa um avano de linha Representa uma tabulao

Reviso: A funo scanf


int scanf(const char* format, arg_list)

A funo scanf( ) l a entrada padro do sistema (stdin), carregando os argumentos descritos em arg_list, sob controle da String apontada por format.

Reviso: A funo scanf


Para receber valores, inclua o smbolo &

Da mesma forma so vlidos:


Cdigo %c %d %% %f Formato Um nico caracter Decimal Imprime um sinal % Ponto flutuante decimal

Reviso: Exemplo
O exemplo abaixo solicita a entrada dos valores a e b e apresenta a soma dos mesmos. #include <stdio.h>

void main(void) { int a,b,c; printf("Entre com os valores a e b:\n"); scanf("%d",&a); scanf(%d, &b); c=a+b; printf("\nResultado a+b ... %d\n",c); }

Reviso: Operadores Relacionais

Operador Relacional
> >= < <= = = != Maior que Maior ou igual a Menor que Menor ou igual a Igual No igual

Significado

Reviso: Operadores Lgicos

Operador Lgico
&& || ! AND OR NOT

Significado

Reviso: Exemplo
#include <stdio.h> void main(void) { int a, b, c; a=10; b=15; c=20; if (((a>5)&&(b>a))||(c!=30)) printf(aqui!!); }

Reviso: Exemplo
Se tivermos as seguintes variveis declaradas, qual a resposta destas comparaes (responder V ou F):

a=10; b=20; c=15


... ... ... ... (a > 10) || (b > 10) (a > 10) && (b > 10) (((a>10) || (b>10)) && (c<b)) (a<=b) && (c<=b)

Reviso: Estruturas de Deciso


if (condio) { comando1; comando2; ... } else { comando3; comando4; ... }

Caso a condio seja verdadeira, os comandos comando1, comando2, ... sero executados. Caso contrrio, os comandos comando3, comando4, ... sero executados. O else opcional.

Reviso: Estruturas de Repetio

Existem 3 estruturas de repetio em C:

while do...while for

Reviso: Estrutura de repetio while


Enquanto a condio for verdadeira, os comandos comando1, comando2, ... sero executados. Notar a importncia de se incluir o controle da condio, em alguma parte do bloco (inclusive na prpria condio!). O controle assegura a finalizao do loop.

while (condio) { comando1; comando2; ... controle; }

Reviso: Estrutura de repetio while

while (condio) { comando1; comando2; ... controle; }

?
V

Reviso: Exemplo

#include <stdio.h> void main(void) { int a; a=10; while (a<14) { printf(a=%d\n,a); a++; } }

Qual a resposta desta simulao??

Reviso: Estrutura de repetio do ... while

do { comando1; comando2; ... controle; } while(condio);

Os comandos comando1, comando2, ... sero executados, enquanto a condio for verdadeira. Notar a importncia de se incluir o controle da condio, em alguma parte do bloco (inclusive na prpria condio!). O controle assegura a finalizao do loop.

Reviso: Estrutura de repetio do ... while

do { comando1; comando2; ... controle; } while(condio);


V

?
F

Reviso: Exemplo

#include <stdio.h> void main(void) { int a; a=10; do { printf(a=%d\n,a); a++; } while (a<14); }

Qual a resposta desta simulao??

Reviso: while x do ... while


while do...while

?
V

?
F

Qual a diferena?

Reviso: while x do ... while

#include <stdio.h> void main(void) { int a; a=10; while (a<14) { printf(a=%d\n,a); a++; } }

#include <stdio.h> void main(void) { int a; a=10; do { printf(a=%d\n,a); a++; } while (a<14); }

Reviso: while x do ... while

#include <stdio.h> void main(void) { int a; a=100; while (a<14) { printf(a=%d\n,a); a++; } }

#include <stdio.h> void main(void) { int a; a=100; do { printf(a=%d\n,a); a++; } while (a<14); }

Reviso: Converso Genrica


while do ... while
Repete-se o if !

while

do...while

?
V

?
F

?
F

Reviso: while x do ... while


#include <stdio.h> void main(void) { int a; a=100; if (a<14) { do { printf(a=%d\n,a); a++; } while (a<14); } }

#include <stdio.h> void main(void) { int a; a=100; while (a<14) { printf(a=%d\n,a); a++; } }

Reviso: while x do ... while


do...while while Repete-se o bloco de comando!

?
F

?
V

Reviso: while x do ... while


#include <stdio.h> void main(void) { int a; a=100; printf(a=%d\n,a); a++; while (a<14) { printf(a=%d\n,a); a++; } }

#include <stdio.h> void main(void) { int a; a=100; do { printf(a=%d\n,a); a++; } while (a<14); }

Reviso: for

for (expresso1; condio; expresso3)


V

expresso2 ;

expresso1 : uma expresso ou qualquer comando ou chamada de funo. Normalmente uma atribuio; expresso2 : qualquer comando ou chamada de funo; expresso3 : uma expresso ou qualquer comando ou chamada de funo. Normalmente um incremento;

Reviso: Exemplo

#include <stdio.h> void main(void) { int a; for(a=10; a<14; a++) { printf(a=%d\n,a); } }

Qual a resposta desta simulao??

Reviso: for x while


1 ; 2 3 ) ;

for (

2 3

4 ;

while ( {

4 }

Reviso: for x while

#include <stdio.h> void main(void) { int a; for(a=10; a<14; a++) { printf(a=%d\n,a); } }

#include <stdio.h> void main(void) { int a; a=10; while(a<14) { printf(a=%d\n,a); a++; } }

EXERCCIOS

Exerccios

Desenvolva um programa que informa se um nmero primo ou no; Desenvolva um programa que apresenta todos os nmeros que dividem um determinado nmero; Desenvolva um programa que calcule a soma dos n primeiros elementos de uma P.A. finita de razo r e primeiro elemento a.

Reviso: Arrays

Arrays (matrizes e vetores) so variveis indexadas. A incluso de ndice facilita o tratamento destas variveis em algoritmos. Exemplo:
define elementos, de x[0] at x[4]

int x[5];

um

vetor matriz

de de

5 6

define uma elementos, de m[0][0] at m[2][1]

int m[3][2]

Reviso: Exemplo
#include <stdio.h>

void main(void) { int a[10]; int b[10][2]; int c, d; a[4]=10; a[5]=20; b[2][1]=10; c=4; d = a[c] + b[2][1]; d = d + a[5] +c; }

Reviso: Exemplo

Faa um programa em C que leia uma matriz A, 3x3, e verifique se a mesma simtrica. Uma matriz dita simtrica se o elemento da linha i coluna j idntico ao elemento linha j coluna i. Em notao matricial dizemos que aij = aji.

3 1 2 2 4 0 1 1 4

no simtrica

Reviso: Exemplo
#include <stdio.h> void main (void ) { int a[ 3 ][ 3 ], i , j , conta; for ( i = 0 ; i <= 2 ; i ++ ) { for ( j = 0 ; j <= 2 ; j ++ ) { printf ( qual elemento da linha %d coluna %d ? , i , j); scanf (%d,&a[ i ][ j ]); } } conta = 0; for ( i = 0 ; i <=2 ; i++) { for ( j = ( i +1 ) ; j <= 2 ; j++) { if (a[ i ][ j ] ==a[ j ][ i ]) conta ++ ; } } if ( conta == 3) printf(matriz simtrica \n); else printf(a matriz no simtrica \n); }

Reviso: Strings

Strings so cadeias ou seqncias de caracteres. Em C, Strings so obtidas por vetores char.

Exemplo: char frase[80] define uma frase de at 80 caracteres, incluindo um caracter especial chamado terminador.

Reviso: Strings

Para obter um string via teclado, usamos o comando gets ou o scanf com o formato %s:
gets(frase); // obtem a varivel string frase scanf(%s, frase) // obtem a varivel string frase

Qual a diferena? Onde est o &?

Reviso: Strings

Todo string tem um terminador, referenciado pelo contedo de byte 0:


0 NULL \0

Qualquer um dos 3 finaliza a sentena, pois significam o byte de valor 0.

Reviso: Strings

Por exemplo, se uma string frase contiver a palavra teste, cada um dos seus elementos estaria disposto como a seguir:
0 1 2 3 4 5

NULL

Qual o valor de frase[2] ? O que ocorre se o comando abaixo for executado? frase[2]=NULL;

Reviso: Exemplo
#include <stdio.h> void main(void) { char car,frase[100]; int conta; int numtot=0; printf("\nEntre frase:\n"); gets(frase); printf("\nEntre letra a procurar:\n"); scanf("%c",&car); for (conta=0;frase[conta]!=NULL;conta++) if (frase[conta]==car) numtot++; printf("\nResp: encontrei %d ocorrencias da letra %c!\n",numtot,car); }

EXERCCIOS

Exerccios
Desenvolva um programa que recebe uma frase e gera a mesma frase escrita de trs para a frente. (invertida); Desenvolva um programa que: - recebe uma frase; - recebe uma palavra de procura - apresenta o nmero de vezes que a palavra ocorre na frase. Desenvolva um programa que: - recebe uma frase; - recebe uma palavra de procura; - recebe uma palavra de troca; - gera uma frase a partir da frase de procura, trocando todas as ocorrncias da palavra de procura pela palavra de troca.

Reviso: Funes

Funes so utilizadas como subrotinas em C, e contm um conjunto de instrues a fim de realizar uma tarefa especfica.

Chamada Funo Programa Retorno

Reviso: Funes

As funes podem:
realizar uma tarefa sem retornar ou receber valores explcitos

Ex: exibio de algo no vdeo Ex: uma funo que retorna como resposta o valor pi Ex: uma funo que recebe uma freqncia de som a ser produzida Ex: funo que calcula o seno de um nmero

retornar um valor sem receber valores de entrada

receber um valor sem retornar qualquer resposta explcita

receber e retornar valores explcitos

Reviso: Sintaxe Bsica

<tipo de retorno> <nome da funo> ( tipo parmetro, tipo parmetro ...) { <comandos > <...> }

Obs: quando no h dado de retorno ou de entrada, indica-se como void

Reviso: Exemplo
#include <stdio.h> int multiplica(int j);

void main(void) { int entrada, saida;


printf("Digite um valor inteiro: "); scanf("%d", &entrada); saida = multiplica(entrada); printf("\n\nO valor %d multiplicado por 10 e %d.", entrada, saida); } int multiplica(int j) { int yy; yy=j*10; return yy; }

Exemplo
#include <stdio.h> int c; void soma(int a, int b) { a = a + 10; b = b + 10; c = c + 10; } void main (void) { int x,y,z; x = 40; y = 40; c = 40; printf("\nInicialmente:\nx = %d\ny = %d\nc = %d\n",x,y,c); soma(x,y); printf("\nApos soma:\nx = %d\ny = %d\nc = %d\n",x,y,c); }

Reviso: Exemplo

Note no exemplo anterior que:

A varivel c global e vale para todas as funes declaradas no programa; As variveis a e b so locais da funo, e portanto sua alterao no ocasiona a alterao de x e y !

Reviso: Atualizao de Parmetros

Quando no h o uso de ponteiros (que sero vistos mais adiante), a passagem de parmetros feita por valor, exceto no caso de vetores.
Vejamos o exemplo a seguir.

Reviso: Exemplo
#include <stdio.h> void func01(int a) { a = a + 10; } void func02(int b[ ] ) { b[0] = 10; b[1] = 20; } void main (void) { int x, c; int y[3]; x = 10; y[0] = 0; y[1] = 0; y[2] = 0; func01(x); func02(y); printf(x = %d\n, x); for (c=0; c<3; c++) printf(y[%d] = %d\n, c, y[c]); }

Reviso: Funes Recursivas

Quando uma funo chama a si prpria, dizemos que se trata de uma funo recursiva. Como exemplo clssico, podemos citar a Funo Fatorial, que pode ser declarada como a seguir:

x! = x * (x-1) * (x-2) * ... * (3) * (2) * (1)


isso significa que: x! = x * (x-1) * (x-2) * (x-3)!
ou ...

x! = x * (x-1) * (x-2)!
ou ainda:

x! = x * (x-1)!

Reviso: Funes Recursivas

A linguagem C permite a utilizao de funes recursivas, bastando para isto declar-las como uma outra funo qualquer. O exemplo abaixo ilustra o uso de fatorial como funo recursiva em C:

Reviso: Funes Recursivas


#include <stdio.h>

int fatorial(int x) { if ( x = = 0 )) return 1; else { return (x * fatorial(x-1)); } }


void main(void) { int entrada; printf("\nEntre com um numero para calculo do fatorial:\n"); scanf("%d",&entrada); printf("O fatorial de %d e %d", entrada, fatorial(entrada)); }

Reviso: Ponteiros

No computador, tanto o Sistema Operacional quanto os programas compilados fazem um certo uso da memria RAM. Os dados de seu programa tambm so armazenados automaticamente na memria RAM.

Reviso: Ponteiros
2000 2001 2002 2003 2004 2005 2006 2007 00 00 00 50

valor de k, correspondente a 50 em hexa

Reviso: Ponteiros

Observaes:

O endereo em que uma varivel armazenada normalmente escolhido pelo compilador; Este endereo dado por um nmero; Pode-se criar uma varivel especial para armazenar um endereo; Esta varivel chamada de ponteiro.

Reviso: Ponteiros

Criao de um ponteiro: int char *x *p x um ponteiro para um int p um ponteiro para char

Por que informar o tipo de dado para o qual o ponteiro aponta?

Reviso: Ponteiros
Operao:
& leia como o endereo de... leia como no endereo...

Exemplo:
Dado o trecho abaixo: int x ; int *p; x = 20; p = &x;

Qual o valor de: x ? *p ?

Reviso: Ponteiros
#include <stdio.h> void main(void) { int a; int *p; a = 50; p = &a; printf(Valor de printf(Valor de printf(Endereo printf(Endereo }

a: a: de de

%d\n, a); %d\n, *p); a: %p\n, &a); a: %p\n, p);

Reviso: Ponteiros
void t(int *u) { *u = *u + 1; } void main(void) { int x; x = 10; t(&x); printf(x=%d\n,x); }

Reviso: Ponteiros

possvel se criar um vetor por meio de ponteiros;


Quando um ponteiro incrementado, o mesmo passa a apontar para o prximo elemento; Por exemplo, um ponteiro para um valor int quando incrementado, passar a apontar para o prximo int, ou seja, ser incrementado no de 1, mas de 4 posies (um int ocupa 4 bytes)!

Reviso: Ponteiros
Exemplo: Considerando que p um ponteiro para um inteiro ... int *p A operao p ++ faz com que p aponte para o prximo inteiro

o comando p++ faz com que p aponte para o prximo inteiro !

Reviso: Ponteiros
Alocar elementos pelo simples deslocamento do ponteiro perigoso, pois no h a certeza de que o prximo endereo reservado para uso, ou que no esteja sendo usado por algum outro processo!
Para evitar isso, usamos o comando malloc, que aloca espao em memria. Seu argumento o nmero de bytes a serem reservados em seqncia, e o seu retorno o endereo inicial do conjunto encontrado, ou null em caso de no haver espao disponvel. int *p; p = (int *) (malloc(10 * sizeof(int))); Nas linhas acima, cria-se o ponteiro p, e aloca-se espao para o armazenamento de 10 elementos int (40 bytes); Observe o casting e a funo sizeof !

Reviso: Ponteiros
#include <stdio.h> #include <malloc.h> void main(void) { int *x; int c; x = (int *) malloc(10 * sizeof(int)); //recebendo os 10 valores for (c=0; c<10; c++) { printf(Digite o elemento %d\n, c); scanf(%d, x); x++; } (continua...) Note o recebimento de x sem o smbolo & por qu?

Reviso: Ponteiros
//reposicionando o ponteiro no inicio x = x 10; //mostrando os 10 valores recebidos for (c=0; c<10; c++) { printf(Elemento %d = %d \n, c, *x); x = x + 1; }
}

Note o uso de *x na exibio por qu?

Reviso: Ponteiros

p ++ elemento *p ++

posiciona

no

prximo

mesmo efeito!!!

(*p)++ incrementa o contedo (valor apontado por p)

EXERCCIOS

Reviso: Exerccios

Desenvolva um programa que cria um vetor inteiro, apresentando cada um dos elementos e seus respectivos endereos; Crie um programa que deve armazenar uma frase e apresent-la na sada padro, atravs do uso de um ponteiro char; Crie uma funo void modifica (int *x), que altera o valor passado como parmetro para o prximo inteiro mpar.
Ex: para a varivel inteira a.... a=5; modifica(&a); far com que o valor de a se torne 7 a=2; modifica(&a); far com que o valor de a se torne 3

Você também pode gostar