Dúvidas Lista 3

7 views
Skip to first unread message

Rafael Souza

unread,
Dec 4, 2010, 11:48:08 AM12/4/10
to comp...@googlegroups.com
Alguem poderia me explicar melhor como se faz a questão 6 da lista 3? Mesmo com gabarito, nao consegui visualizar bem o endereço da instrução e a estrutura da memoria...

Grato desde já,

--
Carlos Rafael Baur de Souza

Fernando Silva

unread,
Dec 4, 2010, 2:40:05 PM12/4/10
to comp...@googlegroups.com
Rafael, vou tentar dar uma explicada aqui para você:

É dito que o segmento de código tem 32 Kbytes e o endereço inicial do segmento de código é 5F201000H.

Primeiro de tudo, é bom entender que, a memória é endereçada em bytes, e sabendo isso, podemos verificar que as posições de memória desse segmento começam em 5F201000H e vão até 5F208FFFH (no caso, 5F201000H + 8000H(32K) - 1(pois temos que lembrar que o primeiro endereço também é válido)).

Na letra a) é perguntado qual o valor do EIP logo após o desvio para uma rotina de interrupção que começa a 512 bytes do inicio.

Tendo em mente que o endereçamento segmentado funciona da seguinte forma: Um resgistrador(no caso do segmento de código, o CS, guarda o endereço de base (5F201000H), e um outro registrador guarda o desvio relativo a base, no caso o EIP).
Então, como a função fica a 512 bytes do início do segmento, o EIP irá apontar para (512 -1, lembrado o -1 pelo mesmo motivo acima), que em hexadecimal é 1FF

Na letra b) é perguntado se o endereço 5F206FFFH é válido para uma instrução dentro desse segmento.

A resposta é sim, pois ele pertence ao intervalo de endereços que foi calculado no início da questão.

Espero que você tenha entendido agora.

Qualquer coisa é só perguntar.

Rafael Souza

unread,
Dec 4, 2010, 3:34:41 PM12/4/10
to comp...@googlegroups.com
Entendi perfeitamente agora =) ... Brigadão!! 

magno ferreira

unread,
Dec 5, 2010, 6:05:58 AM12/5/10
to comp...@googlegroups.com
Fernando,
eu não me liguei q deveria usar os reg's de segmento não...
naõ tem um jeito de eu colocar o endereço direto em EIP não?
nesses casos o endereçamento será sempre segmentado?

2010/12/4 Fernando Silva <fms...@gmail.com>



--
*
{agf}

Fernando Silva

unread,
Dec 5, 2010, 7:25:59 AM12/5/10
to comp...@googlegroups.com
Magno,

O endereçamento segmentado dessa forma, com endereço de instruções sendo formados por CS:EIP é a forma de endereçamento usada no 80386. No caso a questão aqui não é se tem outra forma de endereçar, porque esse processo é transparente ao programador, a idéia da questão é que você entenda direitinho como funciona o endereçamento segmentado, que é a chave de resolver toda a questão, vou tentar dar uma explicada básica de como funciona esse tipo de endereçamento, se você continuar com dúvidas é só falar:

No caso de endereçamento segmentado, a idéia é de que dividimos a memória em partes, no caso segmentos, e endereçamos esses segmentos da seguinte forma:

Vamos dizer que a memória vá da posição 0000H até 1000H, e dividimos ela em 2 partes, no caso vamos dizer que seja:
Segmento 1 -> 0000H até 0500H
Segmento 2 -> 0501H até 1000H

Então para endereçarmos uma posição dentro de um segmento, nós guardamos o endereço de base dele, no caso o primeiro endereço, e endereçamos as outras posições dentro do segmento com um valor que chamamos de deslocamento, então se quisermos acessar as posições de memória abaixo:

0001H -> Segmento=0000H, Deslocamento=0001H
0100H -> Segmento=0000H, Deslocamento=0100H
0501H -> Segmento=0501H, Deslocamento=0000H
0601H -> Segmento=0501H, Deslocamento=0100H

No caso do segmento de código, guardamos o endereço de segmento no registrador CS e o deslocamento é dado pelo EIP.

Espero que isso tenha ajudado, qualquer coisa é só falar.

Débora Nobre

unread,
Dec 5, 2010, 8:08:08 AM12/5/10
to comp...@googlegroups.com
Alguém pode me mandar o gabarito da lista 3? Pq a o site da ufrj tá fora do ar.
--
Débora Ribeiro Nobre

Débora Nobre

unread,
Dec 5, 2010, 8:15:14 AM12/5/10
to comp...@googlegroups.com
Não precisa mais não, consegui aqui!
--
Débora Ribeiro Nobre

magno ferreira

unread,
Dec 5, 2010, 8:26:04 PM12/5/10
to comp...@googlegroups.com
ajudou sim! entendi
valeu msm

2010/12/5 Fernando Silva <fms...@gmail.com>



--
*
{agf}

Rafael Souza

unread,
Dec 6, 2010, 4:36:24 PM12/6/10
to comp...@googlegroups.com
Estou com algumas dúvidas agora na questão 10...
Na função main, pra que serve exatamente a linha : and $0xfffffff0,%esp
Como funciona?

Grato desde já,

Fernando Silva

unread,
Dec 6, 2010, 4:53:39 PM12/6/10
to comp...@googlegroups.com
Bem, tenho que admitir que nunca vi um código fazendo algo similar a esse, mas analisando o resto do código, me deu a entender que o compilador adicionou essa linha(que no caso não tem equivalente no código C) para fazer um ajuste na localização da pilha após a chamada a função main, provavelmente por causa das operações(que não estão detalhadas na questão) que são realizadas para deixar o processador pronto para rodar o código que está descrito.

Mas se alguém puder confirmar se a professora falou sobre isso...
Reply all
Reply to author
Forward
0 new messages