Computadores e Programação (MAB-353) Primeira Prova -Prof. Paulo Aguiar (DCC/UFRJ) 19/05/ pontos
|
|
- Rayssa Aleixo Ferretti
- 6 Há anos
- Visualizações:
Transcrição
1 Computadores e Programação (MAB-353) Primeira Prova -Prof. Paulo Aguiar (DCC/UFRJ) 19/05/ pontos Nome: GABARITO (revisado) Questão 1 (20 pontos) Preencha os pontilhados do código C com variável e/ou operador lógico e/ou operador aritmético, ou combinação deles que faça sentido no código C com o correspondente código de montagem. Se tivéssemos algo como *s ou *s ou!i, isso seria preenchido num único pontilhado, pois seria uma combinação. char *gets(char *s) { int c; char *dest = s; int gotchar = 0; while ((... = getchar())... \n EOF) { *dest++ =...;... =...;... = \0 ; if ( EOF ) return NULL; return...; sabendo que foi gerado o seguinte código de montagem: gets: pushl %ebp... movl %esp, %ebp... subl $24, %esp... movl 8(%ebp), %eax... movl %eax, -20(%ebp)... movl $0, -16(%ebp)... jmp.l2....l4: movl -20(%ebp), %eax... leal 1(%eax), %edx... movl %edx, -20(%ebp)... movl -12(%ebp), %edx... movb %dl, (%eax)... movl $1, -16(%ebp)... call getchar... movl %eax, -12(%ebp)... cmpl $10, -12(%ebp)... je.l3... cmpl $-1, -12(%ebp)... 1
2 jne.l4....l3: movl -20(%ebp), %eax... leal 1(%eax), %edx... movl %edx, -20(%ebp)... movb $0, (%eax)... cmpl $-1, -12(%ebp)... jne.l5... cmpl $0, -16(%ebp)... jne.l5... movl $0, %eax... jmp.l6....l5: movl 8(%ebp), %eax....l6: leave... ret... A. (7 pontos) Preencha os pontilhados do código C com as operações lógicas e/ou aritméticas e/ou variáveis correspondentes. O preenchimento tem que estar justificado nos comentários do código de montagem. B. (9 pontos) Justifique a existência de cada linha do código de montagem, mostrando a associação dela com o código C, quando for o caso. Não descreva o que cada instrução faz, pois isso assumo que você já sabe. O que interessa e conta ponto é explicar a engenharia reversa. Sem a devida explicação o preenchimento do código C não será contabilizado. C. (2 pontos) Explique o que a instrução leave faz. Demonstre seu conhecimento, indicando o que poderia ser usado no lugar dela, mas fazendo uso apenas de movl e leal. Não pode usar popl e/ou pushl. D.(2 pontos) Explique o que a instrução ret faz. Qual a condição a ser satisfeita para que a execução de ret tenha sucesso? Demonstre seu conhecimento, indicando o que poderia ser usado no lugar dela, mas fazendo uso apenas de movl, leal, e com uso do registrador %eip (contador de programa). Não pode usar popl e/ou pushl. R: A. char *gets(char *s) { int c; char *dest = s; int gotchar = 0; while ((c = getchar())!= \n && c!= EOF) { *dest++ = c; /* incrementa depois que fez dest = c*/ gotchar = 1; *dest++ = \0 ; if (c == EOF &&!gotchar) return NULL; return s; B. gets: 2
3 pushl %ebp prepara o registro de ativaç~ao salvando a base anterior... movl %esp, %ebp aponta o topo da pilha para a base do registro de ativaç~ao... subl $24, %esp abre 6 espaços na pilha... movl 8(%ebp), %eax pega s (ponteiro para caractere)... movl %eax, -20(%ebp) salva s em %ebp-20, local do ponteiro dest (dest = s)... movl $0, -16(%ebp) zera (%ebp-16), i.e., gotchar = 0... jmp.l2 desvia incondicionalmente para.l2, corpo do while....l4: corpo do while abaixo movl -20(%ebp), %eax pega dest... leal 1(%eax), %edx calcula dest++... movl %edx, -20(%ebp) salva valor atualizado de dest... movl -12(%ebp), %edx copia (%ebp-12) = c para %edx... movb %dl, (%eax) faz *dest = c (*dest=c;dest++ ou *dest++=c em uma única linha)... movl $1, -16(%ebp) gotchar = 1... condiç~ao do while call getchar chama getchar(), sem par^ametros... movl %eax, -12(%ebp) retorno c salvo na posiç~ao %ebp-12, ou seja c = getchar()... cmpl $10, -12(%ebp) compara c com \n = je.l3 segue se c!= \n (primeira condiç~ao para permanecer no while) cmpl $-1, -12(%ebp) compara c com -1 (EOF) (segunda condiç~ao)... jne.l4 permanece no while apenas se (c!= EOF) && (c!= \n )....L3: movl -20(%ebp), %eax pega dest... leal 1(%eax), %edx dest++... movl %edx, -20(%ebp) atualiza dest... movb $0, (%eax) insere o final da lista \0 ou seja *dest++ = \0... cmpl $-1, -12(%ebp) checa se c == EOF (primeira condiç~ao do if )... jne.l5 sai do if se c!= EOF e testa segunda condiç~ao se c == EOF... cmpl $0, -16(%ebp) compara gotchar com 0 (segunda condiç~ao do if)... jne.l5 se gotchar == 0 n~ao desvia, i.e. executa if se (c==eof) &&!gotchar movl $0, %eax prepara o retorno com 0, ou seja return NULL... jmp.l6 desvia para retornar com NULL....L5: movl 8(%ebp), %eax retorna s....l6: leave prepara o retorno... ret retorna... C. Leave prepara para o retorno da rotina, apontando o topo da pilha para a base, onde está salvo a base anterior (SFP) e dando um pop para salvar este valor no registrador da base (%ebp). Então, leave é equivalente a: movl %ebp, %esp movl (%esp), %ebp leal $4(%esp), %esp # aponta topo para a base do registro # restaura base anterior # incrementa o topo para apontar para o RIP A duas últimas instruções são equivalentes a popl. Após o leave, o topo da pilha tem que estar apontando para o RIP, endereço da instrução seguinte ao call no caller. D. Ret carrega o RIP que está na pilha para o %eip e transfere o controle. Para que isso funcione, o topo da pilha tem que estar apontando para a memória onde está o RIP (return instruction pointer). Então, ret é equivalente a: movl (%esp), %eip # copia o RIP para o program counter leal $4(%esp), %esp # incrementa o ponteiro para decrementar a pilha de uma posiç~ao. 3
4 As duas instruções são equivalentes a popl %eip. Lembrar que o pop depois de copiar, ele decrementa a pilha de uma posiçao de 4 bytes, apontando para a posição imediatamente superior à posição do RIP, que seria o topo da pilha antes da execução do call. Questão 2 (20 pontos) É dado o código C, onde nas linhas pontilhadas foi suprimido o valor constante inteiro que é o mesmo nas três posições: #include <stdio.h> void xxx(unsigned int n) { if (n/...) xxx (n/...); printf("%x\n", n%...); main(){ xxx(29); foi gerado o seguinte código de montagem para a subrotina xxx, onde = 0x38e38e39:.LC0:.string "%x\n" xxx: pushl %ebx subl $24, %esp movl 32(%esp), %ebx cmpl $8, %ebx jbe.l2 movl $ , %edx movl %ebx, %eax mull %edx shrl %edx movl %edx, (%esp) call xxx movl $ , %edx movl %ebx, %eax mull %edx shrl %edx leal (%edx,%edx,8), %eax subl %eax, %ebx movl %ebx, 8(%esp) movl $.LC0, 4(%esp) movl $1, (%esp) call printf_chk addl $24, %esp popl %ebx ret xxx: 1 pushl %ebx // salva %ebx 2 subl $24, %esp // abre 6 espaços na pilha 3 movl 32(%esp), %ebx // pega n (na ordem na pilha: 6 espaços, %ebx, RIP e n) 4 cmpl $8, %ebx // compara n com 8, logo a divis~ao é por 9 5 jbe.l2 // se menor ou igual n~ao chama recursivamente, logo a divis~ao é por 9 6 movl $ , %edx // insere 0x38E38E39= (9 é arredondamento) 4
5 7 movl %ebx, %eax // pega n 8 mull %edx // multiplica 0x38E38E39 * n => %edx:%eax 9 shrl %edx // 0x38E38E39*n*2**(-33) = *n // base8= =7/64+7/(64*64)+...=7/64[1/(1-1/64)])= 7/63=1/9. 10 movl %edx, (%esp) // copia n/9 para a pilha 11 call xxx // chama rotina recursivamente, xxx(n/9) // vai preparar a impress~ao 12 movl $ , %edx // insere 0x38E38E39 13 movl %ebx, %eax // pega n (par^ametro de chamada da invocaç~ao atual) 14 mull %edx // multiplica 0x38E38E39 * n => %edx:%eax 15 shrl %edx // 0x38E38E39*n*2**(-33) = *n // base8= =7/64+7/(64*64)+...=7/64[1/(1-1/64)])= 7/63=1/9. 16 leal (%edx,%edx,8), %eax // calcula 9*n/9 (maneira mais fácil de determinar a constante suprimida) 17 subl %eax, %ebx // calcula n - 9*n/9 = n%9 (código n~ao otimizado) 18 movl %ebx, 8(%esp) // armazena na pilha 19 movl $.LC0, 4(%esp) // lista de impress~ao 20 movl $1, (%esp) // par^ametro de erro 21 call printf_chk // chamada de impress~ao 22 addl $24, %esp // devolve espaço na pilha 23 popl %ebx // restaura %ebx 24 ret a) (5 pontos) Comente e justifique cada linha do código de montagem. b) (5 pontos) Qual valor fica armazenado em %edx após a execução da linha 9? Obtenha o valor da constante a partir das operações executadas pelo GCC. Tem que relacionar os valores manipulados e a multiplicação na linha 8. Detalhe para ganhar pontos integrais no item. R: Veja os comentários no código de montagem. c) (5 pontos) Existem várias maneiras de identificar no código de montagem o valor constante suprimido do código C. Aponte pelo menos mais duas indicações, além do visto no item b. R: linhas 4 e 5; e linhas 16 e 17. d) (5 pontos) O que será impresso pelo programa acima? Seja preciso na ordem e no conteúdo de cada linha impressa. R: Cada chamada a xxx() imprime o resto da divisão do argumento por 9. Inicialmente main chama xxx(29), que chama xxx(3). xxx(3) imprime 3 numa linha e retorna. xxx(29) por sua vez imprime = 2 numa nova linha e retorna. Dessa forma, temos a representação do número na base 9. No nosso caso, 29 = 3* Se tivéssemos chamado em main xxx(124), seria impresso 1, 4 e 7 na ordem em linhas separadas pois 124 = Questão 3 (20 pontos) Suponha que seja escrito o seguinte código em C para uma função unsigned foo(float f) { union{ foat f; unsigned int u; temp; temp.f = f; return temp.u; ; 5
6 a) (5 pontos) Indique o número de bytes requeridos pela union. b) Assuma que você compilou usando as opções -m32 -O2 -S e a rotina não cria o registro de ativação. gcc gera pouquíssimas linhas no código de montagem. b1) (5 pontos) Indique como é passado o parâmetro da rotina. b2) (5 pontos) Ao entrar na rotina, que informação está no topo da pilha? b3) (5 pontos) Quais seriam estas linhas de código de montagem que o gcc gerou? R: a) 4 bytes, já que ambos os tipos possuem este tamanho. b1) O parâmetro é passado pela pilha em MEM[%esp + 4], pois não é criado registro de ativação e a rotina não usa área na pilha. b2) No topo da pilha, MEM[%esp] está o RIP, que é o endereço de retorno para execução. b3) A rotina retorna o que foi passado em %eax, pois para o assembly não importa o que o código C interpreta a representação do registrador, se float ou se unsigned int. São geradas duas linhas apenas, dado que o código foi compilado de forma otimizada e não é criado registro de ativação. Assim temos: movl 4(%esp), %eax ret # copia o valor de retorno # retorna corretamente, já que o RIP está no topo da pilha Questão 4 (20 pontos) Seja dada a seguinte declaração de uma estrutura em Linux: struct rec { char c; int *p; char a[5]; int i; int j; a) (5) Indique os offsets de cada campo em Linux e o número de bytes que serão necessários para a estrutura. R: c(0), p (4), a[0](8),a[1](9), a[2](10), a[3](11), a[4](12), i(16), j(20), sendo necessários 24 bytes. Os campos de 4 bytes ou mais são alinhados em fronteiras de 4 bytes em Linux. b) (15) Assumindo que se inicia com um ponteiro r para a estrutura em %edx, escreva exatamente 4 linhas em assembly para implementar r > p = r > a[r > i r > j]. Use apenas %edx e %eax. R: Veja que pelo enunciado o que deve ser colocado no campo p é o valor de a[r > i r > j], esperando que este valor faça sentido como ponteiro. Mas como temos um char, é preciso mover de char para int usando movzbl ou movsbl quando trouxer o valor do char para ser carregado em um registrador de 32 bits. Veja que a máquina não discute se o valor a ser carregado como endereço faz sentido ou não. Temos abaixo a solução para a questão: 1 movl 16(%edx), %eax # pega r->i 2 subl 20(%edx), %eax # r->i - r->j 3 movzbl (ou movsbl) 8(%edx, %eax), %eax # pega a[r->i - r->j] e armazena 4 bytes 4 movl %eax, 4(%edx) # armazena em r-> p Questão 5 (20 pontos) Considere o código C, onde M e N são constantes declaradas com #define: int mat1[m][n]; int mat2[n][m]; int sum_element(int i, int j){ return mat1[i][j] + mat2[j][i]; Foi gerado o código de montagem seguinte: 6
7 sum_element: 1 movl 4(%esp), %edx pega i 2 movl 8(%esp), %eax pega j 3 leal (%edx,%edx,2), %ecx calcula 3i 4 addl %eax, %ecx calcula 3i + j 5 leal (%edx,%eax,8), %edx calcula 8j + i 6 subl %eax, %edx calcula 7j + i 7 movl mat1(,%ecx,4), %eax acessa mat1[i][j], indicando que N=3 8 addl mat2(,%edx,4), %eax acessa mat2[j][i], indicando que M=7 9 ret a) (2) Qual a localização na pilha de i e j passados como argumentos para sum element? Justifique. R: i está em %esp+4 e j em %esp + 8, pois não é criado registro de ativação. b) (4) Após a execução da linha 4, qual o valor armazendo em %ecx em termos de i e j? R: %ecx = 3i +j. c) (4) Após a execução da linha 6, qual o valor armazendo em %edx em termos de i e j? R: %edx = 7j+i. d) (10) Qual o valor das constantes M e N? R: N=3, M=7. 7
Computadores e Programação (MAB ) Lista 2 - Grupo de até 3 alunos - 90 pontos
Computadores e Programação (MAB-353 2017-1) Lista 2 - Grupo de até 3 alunos - 90 pontos Entrega impressa em sala de aula até o dia 04 de maio (mesmo limite da lista1). Grupo: GABARITO... Questão 1 (45
Leia maisComputadores de Programação (DCC/UFRJ)
Computadores de Programação (DCC/UFRJ) Aula 14: 04 de junho de 2013 1 2 ...antigamente.. No início da Computação, todos os programas eram escritos em linguagem de montagem Complexidade, propenso a erros,
Leia maisPilha de execução Volnys Borges Bernal Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica da USP
2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica da USP 2005-2015 Volnys Bernal 2 Agenda Os desafios da execução
Leia maisTEÓRICA. lb $t0, 1($t1)
T1: T2: T3: T4: T5: T6: T7: T: P: TEÓRICA As questões devem ser respondidas na própria folha do enunciado. As questões 1 a 4 são de escolha múltipla, e apenas uma das respostas está correcta, valendo 1
Leia maisEstrutura de uma função ( / procedimento )
Análise do Instruction Set Architecture (4) Estrutura do tema ISA do IA-32 1. Desenvolvimento de programas no IA-32 em Linux 2. Acesso a operandos e operações 3. Suporte a estruturas de controlo 4. Suporte
Leia maisProgramando em Assembly
Programando em Assembly precisa-se saber exatamente como interpretar & gerenciar a memória e como usar instruções de baixo nível para o processamento Não existem tipos e variáveis (apenas bytes na memória)
Leia maisAssembly do IA-32 em ambiente Linux
Sistemas de Computação 2010/11 Assembly do IA-32 em ambiente Linux Trabalho para Casa: TPC5 Alberto José Proença Objectivo A lista de exercícios propostos em TPC5 para resolução antes e durante a próxima
Leia maisCurso: LMCC Exame 1ª Chamada 14/Jun/06 Disciplina: Arquitectura de Computadores Duração: 2h30m
MCC Arquitectura de Computadores 2005/2006 Curso: LMCC Exame 1ª Chamada 14/Jun/06 Disciplina: Arquitectura de Computadores Duração: 2h30m Nota: Apresente sempre o raciocínio ou os cálculos que efectuar;
Leia maisAssembly do IA-32 em ambiente Linux
MIEI: Sistemas de Computação 2015/16 Assembly do IA-32 em ambiente Linux Trabalho para Casa: TPC6 Alberto José Proença Objectivo A lista de exercícios propostos em TPC6 para resolução antes e durante a
Leia maisIntel x AT&T - recapitulação
ASSEMBLY aula 2 Intel x AT&T - recapitulação mov mov int mov mov mov mov add lea sub Intel Code eax,1 ebx,0ffh 80h ebx, eax eax,[ecx] eax,[ebx+3] eax,[ebx+20h] eax,[ebx+ecx*2h] eax,[ebx+ecx] eax,[ebx+ecx*4h-20h]
Leia maisFluxo de Execução em Assembly
Fluxo de Execução em Assembly A forma natural de execução de um programa é sequencial: CPU busca instruções na memória em endereços sequenciais Instruções de desvio de assembly servem para quebrar a execução
Leia maisAssembly IA32 Procedimentos
1 Procedimentos Assembly IA32 Procedimentos Uma chamada a um procedimento implica a transferência de dados (na forma de parâmetros do procedimento e na forma de valores retornados pelo procedimento) e
Leia maisOrdem de Bytes: Big Endian e Little Endian
Ordem de Bytes: Big Endian e Little Endian Dependendo da máquina que se usa, tem de se considerar a ordem pela qual os números constituídos por múltiplos bytes estão armazenados. As ordem são duas: big
Leia maisSistemas Operacionais. Pilha de execução Volnys B. Bernal 1. Agenda. Pilha de execução. Os problemas. Os problemas.
25-215 Volns Bernal 1 25-215 Volns Bernal 2 Agenda Volns Borges Bernal volns@lsi.u.br Os problemas Controle do endereço de retorno da função Controle do quadro da pilha de Departamento de Sistemas Eletrônicos
Leia maisIntrodução ao Assembly
Introdução ao Assembly Movimentação de Dados Operações Aritméticas e Lógicas Noemi Rodriguez Ana Lúcia de Moura http://www.inf.puc-rio.br/~inf1018 Representação de Programas O compilador gera o código
Leia maisEstruturas de controlo do C if-else statement
Análise do Instruction Set Architecture (3) Alteração do fluxo de execução de instruções Estrutura do tema ISA do IA-32 1. Desenvolvimento de programas no IA-32 em Linux 2. Acesso a operandos e operações
Leia maisComputadores e Programação (MAB ) Lista 3 - Grupo de até 3 alunos - 80 pontos
Computadores e Programação (MAB-353 2017-1) Lista 3 - Grupo de até 3 alunos - 80 pontos Entrega impressa em sala de aula até o dia 13 de junho. Aconselhável resolver antes da prova como preparação. Grupo:...
Leia maisProfessor: Dr. Rogério Rodrigues de Vargas.
UNIVERSIDADE ESTADUAL DE SANTA CRUZ DEPARTAMENTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS Bacharelado em Ciência da Computação Software Básico Linguagem de Programação Assembly: Uma introdução no Linux/i386 (AT&T)
Leia maisLinguagem de Montagem Assembly
Linguagem de Montagem Assembly Especificações O programa em Assembly Fica sobre a camada do Sistema Operacional Efetua chamadas ao Sistema Operacional O montador Chama-se Assembler Traduz a linguagem de
Leia maisA arquitectura IA32. A arquitectura de um processador é caracterizada pelo conjunto de atributos que são visíveis ao programador.
A arquitectura IA32 A arquitectura de um processador é caracterizada pelo conjunto de atributos que são visíveis ao programador. Tamanho da palavra Número de registos visíveis Número de operandos Endereçamento
Leia maisAJProença, Sistemas de Computação, UMinho, 2017/18 1. Componentes (físicos) a analisar: a unidade de processamento / o processador:
Introdução aos Sistemas de Computação (4) Estrutura do tema ISC 1. Representação de informação num computador 2. Organização e estrutura interna dum computador 3. Execução de programas num computador 4.
Leia maisLinguagem C Princípios Básicos (parte 1)
Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos
Leia maisExceções no Fluxo de Execução: Interrupções e Traps
Exceções no Fluxo de Execução: Interrupções e Traps 1 Fluxo de Controle Fluxo de controle de um programa: a 0 a 1 a 2 a n sequência de endereços I 0 I 1 I 2 I n sequência de instruções O fluxo mais simples
Leia maisa) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização.
UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Sistemas de Computação 2016.2 Profa.: Simone Martins Lista 1 1. Um programa P foi compilado com um compilador
Leia maisSistemas Operacionais. Pilha de Execução Volnys B. Bernal 1. Agenda. Pilha de execução. Os problemas. Os problemas.
Eecução 17-29 - Volns Bernal 1 17-29 - Volns Bernal 2 Agenda Volns Borges Bernal volns@lsi.u.br http://www.lsi.u.br/~volns Os problemas Controle do endereço de orno da função Controle do quadro da pilha
Leia maisTÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO
TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO Ponteiros Definição Variável: área de memória que armazena dados de um certo tipo. Na memória, toda variável possui um endereço. Um Ponteiro é uma variável especial
Leia maisMicroprocessadores I ELE Conjunto de Instruções do Microprocessador 8085 Aula 9 - PILHA E SUBROTINAS -
Microprocessadores I ELE 1078 Conjunto de Instruções do Microprocessador 8085 Aula 9 - PILHA E SUBROTINAS - 9.1 - Grupos de Instruções As instruções no 8085 são distribuídas em 5 grupos: 1. Grupo de transferência
Leia maisProgramação em Assembly Optimização do código
Programação em Assembly Optimização do código IA32 AC1 IA32: Optimização do código 1 Optimização do desempenho A optimização decorre ao longo de 2 eixos: escolha cuidada dos algoritmos e estruturas de
Leia maisT1: T2: T3: T4: T5: T6: T7: T: P: TEÓRICA
T1: T2: T3: T4: T5: T6: T7: T: P: Arquitectura de Computadores I - 2002/03 TEÓRICA As questões devem ser respondidas na própria folha do enunciado. As questões 1 a 4 são de escolha múltipla, e apenas uma
Leia mais#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C
#include Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C ANTES DO C ERA A LINGUAGEM B B foi essencialmente uma simplificação da linguagem BCPL. B só tinha um tipo de dado, que
Leia maisUNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Sistemas de Computação 2016.2 Profa.: Simone Martins Lista 1 - Gabarito 1. Um programa P foi compilado com
Leia mais3. Linguagem de Programação C
Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.6. Ponteiros 3.6.1. Introdução 3.6.2. Uso
Leia maisVariáveis e Operadores em C
Variáveis e Operadores em C Luís Charneca luis.charneca@gmail.com NOMES DE VARIÁVEIS (1) As variáveis no C podem ter qualquer nome se duas condições forem satisfeitas: o nome deve começar com uma letra
Leia maisEstruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.
1 Estruturas da linguagem C 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. Identificadores Os identificadores seguem a duas regras: 1. Devem ser começados por letras
Leia maisNível da Arquitetura do Conjunto das Instruções
Fluxo Seqüencial de Controle e Desvios (1) Nível da Arquitetura do Conjunto das Instruções (Aula 13) Fluxo de Controle Roberta Lima Gomes - LPRM/DI/UFES Sistemas de Programação I Eng. Elétrica 2007/2 Fluxo
Leia maisEssencialmente, um ponteiro nada mais é do que uma variável que ao invés de conter um valor, contém um endereço de memória.
Ponteiros e Arrays Ponteiros são fundamentais para a programação bem sucedida em C: Passagem de parâmetros por referência; Alocação dinâmica de memória; Aumentar a eficiência de certar rotinas. Essencialmente,
Leia maisEstrutura do tema ISA do IA-32
Análise do Instruction Set Architecture (2) Acesso a operandos no IA-32: sua localização e modos de acesso Estrutura do tema ISA do IA-32 1. Desenvolvimento de programas no IA-32 em Linux 2. Acesso a operandos
Leia maisTestando o Teorema de De Morgan
Pedro Garcia http://www.sawp.com.br 04 de Fevereiro de 2010 Assembly Working Party Laboratório de Cálculos Científicos, Instituto de Física, Universidade de Brasília, Brasil O Teorema Teorema de De Morgan
Leia maisAlgoritmos e Estruturas de dados
Algoritmos e Estruturas de dados Listas Encadeadas Prof. Dr. Fábio Rodrigues de la Rocha (Listas Encadeadas) 1 / 21 Definição: Anteriormente estudamos listas encadeadas que foram implementadas como vetores
Leia maisLinguagem C: Introdução
Linguagem C: Introdução Linguagem C É uma Linguagem de programação genérica que é utilizada para a criação de programas diversos como: Processadores de texto Planilhas eletrônicas Sistemas operacionais
Leia maisExpoente Mantissa Frac. UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Sistemas de Computação 2016.2 Profa.: Simone Martins Lista 1 Data de entrega 16/09/2016 por e-mail (simone@ic.uff.br)
Leia maisProgramação Estruturada
Programação Estruturada Introdução à linguagem C Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Programação estruturada
Leia maisComputadores e Programação (DCC/UFRJ)
Computadores e Programação (DCC/UFRJ) Aula 6: 1 2 3 A necessidade dos programadores escreverem código em linguagem de montagem tem mudado ao longo dos últimos anos: de um programador capaz de escrever
Leia mais7. A pilha e subrotinas
Cap7.1 7. A pilha e subrotinas 7.1 Organização da Pilha (stack) Stack: estrutura de dados de uma dimensão organizada em algum trecho (segmento) da Memória; o primeiro item adicionado é o último a ser removido
Leia maisProcedimentos Chamada de Funções e Parâmetros
Procedimentos Chamada de Funções e Parâmetros Noemi Rodriguez Ana Lúcia de Moura http://www.inf.puc-rio.br/~inf1018 Memória Durante a execução de um programa, o SO precisa alocar memória principal para:
Leia maisSCC Capítulo 2 Recursão
SCC-501 - Capítulo 2 João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br/~joaoluis
Leia maisLeitura Segura de Strings
Leitura Segura de Strings As funções da biblioteca padrão de C que podem ser usadas para leitura de strings não são suficientemente adequadas para esta finalidade básica. Nesta seção, serão descritos alguns
Leia maisOrganização de Computadores
Organização de Computadores Aula 25 Conjunto de Instruções: Características e Funções Rodrigo Hausen 10 de novembro de 2011 http://cuco.pro.br/ach2034 1/92 Apresentação 1. Bases Teóricas 2. Organização
Leia maisTrabalho Linguagem e Programação de Compiladores
Trabalho Linguagem e Programação de Compiladores Responda as questões. Os exercícios deverão ser desenvolvidos utilizando as estruturas apresentadas em aula e adequadas para cada problema. Forma de entrega:
Leia maisProcedimentos Chamada de Funções e Parâmetros
Procedimentos Chamada de Funções e Parâmetros Noemi Rodriguez Ana Lúcia de Moura http://www.inf.puc-rio.br/~inf1018 Memória Durante a execução de um programa, o SO precisa alocar memória principal para:
Leia maisIntrodução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados
Introdução à Programação Operadores, Expressões Aritméticas e Entrada/Saída de Dados Programa em C #include int main main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius
Leia maisLinguagem de Programação C. Ponteiros
Cristiano Lehrer Conceitos Básicos (1/3) char ch; RAM 100 101 102... 5000 5001 5002... ch ch = 'A'; RAM ch A 100 101 102... 5000 5001 5002... char *; RAM ch A 100 101 102... 5000 5001 5002... = &ch; ch
Leia maisMétodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados
Métodos Computacionais Operadores, Expressões Aritméticas e Entrada/Saída de Dados Tópicos da Aula Hoje aprenderemos a escrever um programa em C que pode realizar cálculos Conceito de expressão Tipos de
Leia maisArquitetura e Organização de Computadores
Arquitetura e Organização de Computadores Linguagem de Montagem e Linguagem de Máquina Givanaldo Rocha de Souza http://docente.ifrn.edu.br/givanaldorocha givanaldo.rocha@ifrn.edu.br Conceitos básicos Linguagem/código
Leia maisAlgoritmos e Programação
Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;
Leia maisSistemas Operacionais. Rodrigo Rubira Branco rodrigo@kernelhacking.com rodrigo@fgp.com.br. www.fgp.com.br
Sistemas Operacionais Rodrigo Rubira Branco rodrigo@kernelhacking.com rodrigo@fgp.com.br Tipos de Sistemas Operacionais De Sistemas Embarcados (PalmOS,WinCE,WinXPEmbbeded,Linux) Hardware simples, especifico
Leia mais1) Operadores de auto incremento ++ e auto decremento --
Aula 09 - Operadores de auto incremento e auto decremento, atribuição múltipla, atribuição na declaração, atribuição resumida e algumas regras de boa programação. 1) Operadores de auto incremento ++ e
Leia maisALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal
ALGORITMOS AULA 01 Baseado nas aulas do Prof. Jorgiano Vidal LINGUAGEM C Uma das grandes vantagens do C é que ele possui tanto caracterìsticas de "alto nìvel" quanto de "baixo nìvel". Linguagem de propósito
Leia maisPonteiros. Introdução
Ponteiros Introdução Conceito Um PONTEIRO ou APONTADOR é uma variável usada para armazenar um endereço de memória. Normalmente, o endereço armazenado em um PONTEIRO é a posição de uma outra variável na
Leia maisConhecendo a Linguagem de Programação C
Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Conhecendo a Linguagem de Programação C DCA0800 - Algoritmos e Lógica de Programação Heitor Medeiros 1 Como
Leia maisLISTA 02 CONJUNTO DE INSTRUÇÕES - GABARITO
LISTA 02 CONJUNTO DE INSTRUÇÕES - GABARITO 1) Identifique na instrução em linguagem de máquina armazenada na memória, os elementos da instrução 2) Na figura acima, qual a quantidade de código de operações
Leia maisEstrutura do tema ISA do IA-32
Análise do Instruction Set Architecture (2) Acesso a operandos no IA-32: sua localização e modos de acesso Estrutura do tema ISA do IA-32 1. Desenvolvimento de programas no IA-32 em Linux 2. Acesso a operandos
Leia maisa) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização. Resposta:
UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO Sistemas de Computação 2016.2 Profa.: Simone Martins Lista 1 - Gabarito 1. Um programa P foi compilado com
Leia maisAULA 05: LINGUAGEM DE MONTAGEM: SUPORTE A PROCEDIMENTOS
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I AULA 05: Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação O QUE SÃO PROCEDIMENTOS? Procedimentos são um conjunto
Leia maisSEL 0415 INTROD. À ORGANIZAÇÃO DE COMPUTADORES
SEL 0415 Aula 11 Microcontrolador 8051 Parte 3 SEL 0415 INTROD. À ORGANIZAÇÃO DE COMPUTADORES Prof. Dr. Marcelo A. C. Vieira SEL 415 INTERRUPÇÃO Estrutura de Interrupção do 8051 n 5 Fontes [ 2 Externas
Leia maisLinguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná
Linguagem C IF61A/IF71A - Computação 1 Prof. Leonelo Almeida Universidade Tecnológica Federal do Paraná Até agora... Sabemos construir algoritmos que tenham: Variáveis Comandos sequenciais Entrada e saída
Leia maisVariáveis, Tipos de Dados e Operadores
! Variáveis, Tipos de Dados e Operadores Engenharias Informática Aplicada 2.o sem/2013 Profa Suely (e-mail: smaoki@yahoo.com) VARIÁVEL VARIÁVEL É um local lógico, ligado a um endereço físico da memória
Leia maisSistemas de Computação
Sistemas de Computação Introdução a programação Assembly Haroldo Gambini Santos Universidade Federal de Ouro Preto - UFOP 5 de novembro de 2009 Haroldo Gambini Santos Sistemas de Computação 1/30 Assembly
Leia maisApontadores/ponteiros
Apontadores/ponteiros 1 Apontadores/ponteiros 1. Um ponteiro pode ser manipulado como sendo um vetor. #include int v[5] = { 10, 20, 30, 40, 50 ; int p, i; p = v; for (i = 1; i < 5; i++) printf
Leia maisIntrodução a Programação. Ponteiros e Vetores, Alocação Dinâmica
Introdução a Programação Ponteiros e Vetores, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos que existe uma forte relação entre ponteiros e vetores Associação entre ponteiros e vetores Ponteiros constantes
Leia maisEstrutura do tema ISA do IA-32
Análise do Instruction Set Architecture (5) x86-64: 64-bit extension to Intel 64: Intel implementation of x86-64 Estrutura do tema ISA do 1. Desenvolvimento de programas no em Linux 2. Acesso a operandos
Leia maisINTRODUÇÃO À LINGUAGEM C
INTRODUÇÃO À LINGUAGEM C Prof. Bruno Feijó, Dept. de Informática, PUC-Rio (2018) C foi criado no início da década de 70, quando os programas mais eficientes eram escritos em linguagem Assembly, bem próxima
Leia maisProgramação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO
Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO Introdução Criada em 1972, por Dennis Ritchie; Centro de Pesquisas da Bell Laboratories; Para utilização no S.O. UNIX; C é uma linguagem
Leia maisProgramação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação
Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Programação em C Variáveis e Expressões DCA0800 Algoritmos e Lógica de Programação Heitor Medeiros Florencio
Leia maisLab. de Programação Concorrente em Física Primeira Prática
Lab. de Programação Concorrente em Física Primeira Prática Paulo Matias 5626309 24 de agosto de 2009 1 Introdução Nesta prática, avaliaremos a importância de se utilizar bons algoritmos e de otimizar o
Leia maisAlgoritmos e Estruturas de Dados I IEC012. Linguagem C - Guia de bolso - Prof. César Melo
Algoritmos e Estruturas de Dados I IEC012 Linguagem C - Guia de bolso - Prof. César Melo Histórico A linguagem C é uma linguagem de programação inventada na década de 1970 por Dennis Ritchie Brian Kennigaham.
Leia maisPROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95
PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95 Exercícios de revisão Lista 01: a) Monte um mapa conceitual indicando as relações entre os seguintes conceitos, no contexto do assunto visto em aula:
Leia maisTópicos em C. Eliade F. Lima
Tópicos em C Eliade F. Lima maio/2010 Criada em 1972, por Dennis Ritchie, nos laboratórios Bell, para ser usada no sistema operacional UNIX. Linguagem de propósito geral, sendo adequada à programação estruturada.
Leia maisGuia Rápido MIPS. Tipos de Dados e Formatações
Tipos de Dados e Formatações Guia Rápido MIPS Tipos de Dados: Todas as instruções são de 32 bits Byte = 8 bits Halfword = 2 bytes Word = 4 bytes Um caractere ocupa 1 byte na memória Um inteiro ocupa 1
Leia maisMicroprocessadores I ELE Aula 7 Conjunto de Instruções do Microprocessador 8085 Desvios
Microprocessadores I ELE 1078 Aula 7 Conjunto de Instruções do Microprocessador 8085 Desvios Grupos de Instruções do 8085 As instruções no 8085 são distribuídas em 5 grupos: 1. Grupo de transferência da
Leia maisARQUITETURA DE COMPUTADORES INTRODUÇÃO
CURSO TÉCNICO DE REDES DE COMPUTADORES Disciplina de Arquitetura de Computadores Juliana Cristina dos Santos ARQUITETURA DE COMPUTADORES INTRODUÇÃO Processamento de Dados Computador máquina capaz de coletar,
Leia maisAlgoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2
Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas Aula Tópico 2 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para o compilador
Leia maisFundamentos de Programação 1
Fundamentos de Programação 1 Linguagem C Arquivos Seqüências ou de Texto. Slides 18 Prof. SIMÃO Jean Marcelo SIMÃO 1 Arquivo de Escrita 1 fopen ( nome.txt", "w" ); fputc ( caracter, arquivo); 2 #include
Leia maisPrincípios de Desenvolvimento de Algoritmos MAC122
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Aula de Revisão: Variáveis e Atribuições Introdução Memória Principal: Vimos no curso anterior que a CPU usa a memória
Leia maisArquitetura de Computadores Trabalhos Práticos
Arquitetura de Computadores Trabalhos Práticos Trabalhos Práticos 1. Bloco de memória em Verilog 2. Y86 1 instrução 5 ciclos 3. Y86 pipeline 4. Y86 dual core com cache 5. Trabalho no CUDA 3 pontos 7 pontos
Leia maisArquitectura de Computadores Y86 Instruções
Arquitectura de Computadores Y86 Instruções Créditos Randal E. Bryant http://csapp.cs.cmu.edu António Pina e Luís Paulo Santos DI/UM Arquitectura do Jogo de Instruções Linguagem de montagem Estado do processador
Leia maisAmbiente de desenvolvimento
Linguagem C Ambiente de desenvolvimento Um programa em C passa por seis fases até a execução: 1) Edição 2) Pré-processamento 3) Compilação 4) Linking 5) Carregamento 6) Execução Etapa 1: Criação do programa
Leia maisConjunto de Instruções MIPS Parte III
Faculdade de Ciências Aplicadas e Sociais de Petrolina FACAPE Conjunto de Parte III Transferência de Dados Lógicas Controle Prof. Sérgio Adaptado dos slides de Sistemas Processadores do Prof. Frank Torres
Leia maisIntrodução à Linguagem C Variáveis e Expressões
INF1005: Programação 1 Introdução à Linguagem C Variáveis e Expressões 08/03/10 (c) Paula Rodrigues 1 Tópicos Principais Programando em C Funções Variáveis Define Operadores e Expressões Entrada e Saída
Leia maisIntrodução à linguagem C++
Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução à linguagem C++ Introdução à linguagem C++ Conceitos básicos: variáveis, tipos de dados, constantes, I/O, etc. Estruturas
Leia maisINSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE Algoritmos ANSI C - Introdução Copyright 2014 IFRN Agenda Conceitos básicos ANSI C Hello World Funções em C Exercícios 2 /26 A linguagem
Leia maisLinguagens de Programação
Linguagens de Programação 128 13 129 Linguagens de Programação Uma linguagem de programação é um vocabulário e um conjunto de regras gramaticais usadas para escrever programas de computador. Esses programas
Leia maisGEQ Prof. Paulo R. Coelho. Lista para prova
GEQ007 2013 Prof. Paulo R. Coelho Lista para prova 7. Defina uma estrutura empregado para armazenar nome, data de nascimento, idade e salário de um empregado de uma empresa. Leia informações sobre 10 empregados
Leia maisCPU. CPU Unidade Central de Processamento. Função: leitura, escrita e processamento de dados
CPU CPU Unidade Central de Processamento Função: leitura, escrita e processamento de dados Constituída por: dispositivos que gerem a entrada (leitura) e saída (escrita) de dados; registos (memórias auxiliares)
Leia maisInfraestrutura de Hardware. Instruindo um Computador Subrotinas, Tipos de Dados e Modos de Endereçamento
Infraestrutura de Hardware Instruindo um Computador Subrotinas, Tipos de Dados e Modos de Endereçamento Perguntas que Devem ser Respondidas ao Final do Curso Como um programa escrito em uma linguagem de
Leia maisOrganização Básica de Computadores. Organização Básica de Computadores. Organização Básica de Computadores. Organização Básica de Computadores
Ciência da Computação Arq. e Org. de Computadores Processadores Prof. Sergio Ribeiro Composição básica de um computador eletrônico digital: Processador Memória Memória Principal Memória Secundária Dispositivos
Leia maisCentro Universitário Franciscano Curso de Sistemas de Informação Disciplina de algoritmos e programação II. Ponteiros
Centro Universitário Franciscano Curso de Sistemas de Informação Disciplina de algoritmos e programação II Ponteiros Profa.: Simone Ceolin Slides (Prof.Tiago Rios da Rocha) Primeiro Semestre 2011 Sumário
Leia maisEstruturas de Dados. Profa. Juliana Pinheiro Campos
Estruturas de Dados Profa. Juliana Pinheiro Campos Vetores Forma mais simples de estruturar um conjunto de dados. Exemplo: int p[10]; // vetor de inteiros com 10 elementos Reserva de um espaço de memória
Leia mais