LISTA DE IAC Prof. Jorge Habib Hanna El Khouri Aluno: ____________________________ 1. 2. 3. 4. 5. 6. Turma: 2º UNIOESTE Cite três razões para se utilizar a linguagem assembly. Cite três razões para não se utilizar a linguagem assembly. Quais são os quatro níveis de arquitetura. Descreva brevemente cada um deles. O que significa dizer que uma arquitetura é de 𝑛 bits ? A execução de uma instrução envolve a realização de uma sequência de passos, que podemos chamar de passos de execução. Cite e descreva estes passos. Em relação ao processador 𝐼𝑛𝑡𝑒𝑙 8086, pede-se: a. Apresentar um diagrama com seus principais elementos. b. Quantas unidades/seções compõe este processador. c. Explique a função de cada uma destas unidades. d. Como se caracterizava em termos de tamanho os barramentos. e. Qual a capacidade de endereçamento? Explique. f. Cite todos os registradores juntamente com a utilização mais comum para cada um deles. g. Que segmentos são normalmente ocupados por um programa na memória? h. Como era composto o endereço lógico? i. Como um endereço lógico é convertido para endereço físico? j. Qual a expressão que denota a forma correta de se escrever um offset? Como são chamados os modos de endereçamento? 7. Em relação ao processador Intel 80286, pede-se: a. Apresentar um diagrama com seus principais elementos. b. Quais as principais inovações desta arquitetura? c. Quantas unidades/seções compõe este processador. d. Explique a função de cada uma destas unidades. e. Como se caracterizava em termos de tamanho os barramentos. f. Quais os modos de operação? g. Qual a capacidade de endereçamento? Explique. h. Quais as principais diferenças em relação ao 8086? 8. Em relação ao processador Intel 80386, pede-se: a. Apresentar um diagrama com seus principais elementos. b. Quais as principais inovações desta arquitetura? c. Quantas unidades/seções compõe este processador. d. Explique a função de cada uma destas unidades. e. Como se caracterizava em termos de tamanho os barramentos internos e externos. f. Qual a capacidade de endereçamento? Explique. g. Cite todos os registradores juntamente com a utilização mais comum para cada um deles. h. Quais os modos de operação? i. Como era composto o endereço lógico? j. Como um endereço lógico é convertido para endereço físico? i. Esboce o diagrama de tradução do endereço lógico para endereço linear feito pela unidade de segmentação. ii. Esboce o diagrama de tradução do endereço linear para endereço físico feito pela unidade de paginação. k. Qual a expressão que denota a forma correta de se escrever um offset? Como são chamados os modos de endereçamento? l. Quais as principais diferenças em relação ao 80286? 9. Em relação ao processador Intel 80486, pede-se: a. Apresentar um diagrama com seus principais elementos. b. Quais as principais inovações desta arquitetura? 10. 11. 12. 13. Cite as principais características da família Pentium. Quais os significados dos bits do registrador EFlags? Explique o processo de representação em Complemento de 2 (C-2); Codifique em C-2 com 32 bits os seguintes números: a. +2300 b. -1 c. -500 d. +3600 14. Elaborar uma função em C que permite inspecionar o conteúdo da memória, apresentando os dados na tela no seguinte formato: Cabeçalho da função void displaymem (unsigned char *p, unsigned char *q, int width); 𝑝 e 𝑞 denotam os endereços iniciais e finais da área de memória que se deseja apresentar seus conteúdos na tela. O parâmetro 𝑤 indica a quantidade de dados por linha. Os valores dos 𝑏𝑦𝑡𝑒𝑠 são apresentados em hexadecimal. Exemplo de layout de saída 00401290: 0040129A: 004012A4: 004012AE: 004012B8: 004012C2: 004012CC: 55 00 8b fc 00 e5 e5 89 00 45 8d eb b8 b8 e5 00 fc 55 e9 ff fe 83 c7 3b f8 8b ff ff ec 45 45 01 45 ff ff 08 fc 08 02 f8 ff ff c7 ff 7d 8d c9 5d 5d 45 ff 0f 45 c3 c3 c3 f8 ff 8b fc 55 55 55 00 ff 45 ff 89 89 89 A função 𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑚𝑒𝑚 permite inspecionar os dados que estão na área de código ou de dados, ou mesmo em outros segmentos. Observe o exemplo abaixo, onde esta função é utilizada: Trecho de código faltando o corpo da função Saída obtida com as duas chamadas da função 𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑚𝑒𝑚 𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑚𝑒𝑚 #include <stdio.h> #include <stdlib.h> 00402000: 0040200A: 6f 6c 61 20 6d 75 6e 64 6f 00 00 00 00 00 00 00 ff ff ff ff int f1 () { return -1; }; int f2 () { return -2; }; 004012C0: 004012CA: 004012D4: 55 89 e5 b8 ff ff ff ff 5d c3 55 89 e5 b8 fe ff ff ff 5d c3 55 89 e5 83 ec 18 8b 45 08 89 void displaymem (unsigned char *p, unsigned char *q, int width); char s[] = "ola mundo"; int main(int argc, char *argv[]) { displaymem (s, s+20, 10); displaymem ((unsigned char *)&f1, (unsigned char *)&f1+30, 10); system("PAUSE"); return 0; } O quadro a direita apresenta a saída obtida com a chamada 𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑚𝑒𝑚 (𝑠, 𝑠 + 20, 10); onde os 20 primeiros bytes a partir do endereço dado por 𝑠 são mostrados na tela em linhas com 10 bytes cada. Em seguida é apresenta a saída obtida com a segunda chamada 𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑚𝑒𝑚 ((𝑢𝑛𝑠𝑖𝑔𝑛𝑒𝑑 𝑐ℎ𝑎𝑟 ∗)&𝑓1, (𝑢𝑛𝑠𝑖𝑔𝑛𝑒𝑑 𝑐ℎ𝑎𝑟 ∗)&𝑓1 + 30, 10); onde os 30 primeiros bytes a partir do endereço onde inicia a função 𝑓1 são mostrados na tela em linhas com 10 bytes cada. Assim, pede-se: a. Codificar a função pedida 𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑚𝑒𝑚; b. Compilar e executar o programa exemplo. i) Explicar o significado dos bytes apresentados pela primeira chamada. c. Acrescentar a inspeção da área de memória ocupada pela função 𝑓2 (primeiros 20 bytes); d. Codificar a função 𝑙𝑒𝑛𝑔𝑡ℎ que retorna o comprimento de uma 𝑠𝑡𝑟𝑖𝑛𝑔; i) 𝑖𝑛𝑡 𝑙𝑒𝑛𝑔𝑡ℎ (𝑐ℎ𝑎𝑟 ∗ 𝑠); e. Considerando que você tenha implementado as funções na sequência 𝑓1, 𝑓2 e 𝑙𝑒𝑛𝑔𝑡ℎ (caso não tenha, altere para esta sequência), pede-se: i) Acrescentar a chamada que inspeciona a área de memória ocupada pela função 𝑙𝑒𝑛𝑔𝑡ℎ (primeiros 30 bytes); ii) acrescentar a chamada que inspeciona a área exata de memória ocupada pela função 𝑓1; iii) idem para a função 𝑓2; iv) Qual a quantidade de bytes ocupada pelas funções 𝑓1 e 𝑓2; v) Qual a diferença entre os bytes de 𝑓1 e os bytes de 𝑓2? Por que ? vi) Inverta a ordem de implementação para: 𝑓1, 𝑙𝑒𝑛𝑔𝑡ℎ e 𝑓2; e acrescentar a inspeção da área exata de memória ocupada pela função 𝑙𝑒𝑛𝑔𝑡ℎ; vii) Existe alguma assinatura (sequência de bytes) que indica o início de uma função ? Qual ? viii) Existe alguma assinatura (sequência de bytes) que indica o fim de uma função ? Qual ?