Escolar Documentos
Profissional Documentos
Cultura Documentos
SMICRO
SMICRO
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
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.
Exemplos de declarao:
int char
a,b,c; y,nomes[100];
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); }
A funo printf() escreve na sada padro do sistema (stdout) os argumentos descritos em arg_list, sob controle da String apontada por format.
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
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: 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); }
Operador Relacional
> >= < <= = = != Maior que Maior ou igual a Menor que Menor ou igual a Igual No igual
Significado
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):
Caso a condio seja verdadeira, os comandos comando1, comando2, ... sero executados. Caso contrrio, os comandos comando3, comando4, ... sero executados. O else opcional.
?
V
Reviso: Exemplo
#include <stdio.h> void main(void) { int a; a=10; while (a<14) { printf(a=%d\n,a); a++; } }
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.
?
F
Reviso: Exemplo
#include <stdio.h> void main(void) { int a; a=10; do { printf(a=%d\n,a); a++; } while (a<14); }
?
V
?
F
Qual a diferena?
#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); }
#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); }
while
do...while
?
V
?
F
?
F
#include <stdio.h> void main(void) { int a; a=100; while (a<14) { printf(a=%d\n,a); a++; } }
?
F
?
V
#include <stdio.h> void main(void) { int a; a=100; do { printf(a=%d\n,a); a++; } while (a<14); }
Reviso: for
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
for (
2 3
4 ;
while ( {
4 }
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
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
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
Reviso: Strings
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.
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
<tipo de retorno> <nome da funo> ( tipo parmetro, tipo parmetro ...) { <comandos > <...> }
Reviso: Exemplo
#include <stdio.h> int multiplica(int j);
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
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 !
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]); }
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)!
ou ainda:
x! = x * (x-1)!
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: 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
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
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;
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
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
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
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; }
}
Reviso: Ponteiros
p ++ elemento *p ++
posiciona
no
prximo
mesmo efeito!!!
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