• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

killerhcf

Assembly 8086 duvidas

11 mensagens neste tópico

bem as duvidas sao as seguintes nao tem muito a ver com a parte de programacao mas como funciona o assembly 8086:

O enderenco da memoria onde esta localizado a proxima instrucao a ser executada no x86(8086) é apontada por?

CS-code segment;

IP-instruction pointer;

pela soma de IP com o CS;

ou nao é nenhum destes referidos atras;

O mecanismo de interrupcoes dox86(8086) permite atender perifericos porque quando acontecem?

sao executadas rotinas de software armazenadas em posicoes de memoria previamente definidas;

as instrucoes sao suspensas a meio do ciclo fetch;

o CPU fica parado;

a memoria que esta a ser utilizada é gravada no disco rígido;

O Opcode de uma instrucao tem dimensão?

que depende do numero de instrucoes;

que depende do numero de instrucoes e parametros;

potencia de 2 que depende da fase fetch;

entre 3 e 4 bits;

Na comunicacao serie assícrona o bit de paridade serve para;

tentar detectar erros de transmissão;

garantir que o número de bits transmitidos é impar;

garantir que o numero de bits de dados transmitidos é par;

detectar erros de transmissão;

so queria saber qual destas opcoes tão certas ou seja a resposta das perguntas

é so mesmo para ficar a saber mais desta parte pois da programacao ja percebo um pouco. :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1 - Não sei o que é o code-segment, mas se for o comprimento da instrução, sei que a próxima instrução vai estar no endereço IP+comprimento. Portanto depende do que for esse code-segment. Caso não seja o comprimento, então a resposta certa é IP.

2 - sao executadas rotinas de software armazenadas em posicoes de memoria previamente definidas

3 - O que tenho visto sempre é opcode=4 bits, por isso nesta não sei bem.

4 - tentar detectar erros de transmissão

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não percebo nada disto, mas em relação ao 3 não devia depender do número de instruções existentes? Quanto mais instruções, maior a dimensão do Opcode para poder representar todas as instruções?

LOL @ "Na comunicacao serie assícrona o bit de paridade serve para: garantir que o numero de bits de dados transmitidos é par;"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não percebo nada disto, mas em relação ao 3 não devia depender do número de instruções existentes? Quanto mais instruções, maior a dimensão do Opcode para poder representar todas as instruções?

Talvez seja isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1 - Não sei o que é o code-segment, mas se for o comprimento da instrução, sei que a próxima instrução vai estar no endereço IP+comprimento. Portanto depende do que for esse code-segment. Caso não seja o comprimento, então a resposta certa é IP.

2 - sao executadas rotinas de software armazenadas em posicoes de memoria previamente definidas

3 - O que tenho visto sempre é opcode=4 bits, por isso nesta não sei bem.

4 - tentar detectar erros de transmissão

na 2ª pergunta é essa resposta pq as interrupcoes tao defenidas no x86 como "int" e depois a posicao da memoria onde faz a interrupcao(21h)? ou seja o "int" ja ta defenido algures na memoria e quando se escreve "int" no programa ja se sabes que é a instrucao int que ja ta defenido,tal como os movs,add,sub ...etc?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O programa não precisa de conter nenhum código especial para dizer que há uma interrupção. O processador e o sistema de exploração são responsáveis por suspender o programa e retomá-lo no mesmo ponto.

Para contemplar as interrupções, um ciclo de interrupção é adicionado ao ciclo de instruções. No ciclo de interrupção, o processador faz um teste para ver se ocorreu alguma interrupção, indicada pela presença de um sinal de interrupção. Se não existirem interrupções pendentes, o processador prossegue para o ciclo de extracção e procura a próxima instrução do programa corrente. Se uma interrupção estiver pendente faz o seguinte:

1 - Suspende a execução do programa correntemente a ser executado e salvaguarda o contexto. Isto significa guardar o endereço da próxima instrução a ser executada (o conteúdo do contador de programa) e outros dados relevantes para a actividade corrente do processador.

2 - Ajusta o contador de programa para o início da rotina de atendimento de interrupção.

Quando a rotina de atendimento estiver concluída, o processador pode retomar a execução do programa do utilizador no ponto de interrupção.

@ Computer Organization and Architecture

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

http://www.numaboa.com.br/informatica/assembly/cap3_3.php

como se mostra aqui na parte do Codificando Instruções do x86 na figura que mostram que é a passagem da linguaguem assembly para a maquina;

no caso em que a instrucao tenha mmm=111, a pergunta que meto é se a constante esté localizada no byte ou bytes seguintes?

é se se vir a nivel de bits fica qualquer coisa assim xxxxx111 acho que se mete o numero da constante ha frente por exemplo se vosse meter a constante 2 no ax ficava: 1100011110 ou seja aqui a constante esta na parte dos bytes de tras, mas se meter isto para linguagem assembly ficava só: mov ax,2 aqui aparece aconstante ha frente ja seria assim nos byte ou bytes seguintes, bem nao sei perceberam a duvidas ou se calhar até é uma pergunta estupida mas num teste fiquei sem saber qual era a resposta certa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O mmm representa um endereço de memória (no caso de um jump) ou então representa um valor imediato que vais somar ao valor de um registo para acederes a uma posição de memória.

Se tiveres uma instrução:

mov 7, ax

O endereço onde a constante está localizada é dado por IP+2, pois:

-> IP tem o código da operação e da função

-> IP+1 tem os códigos dos registos

-> IP+2 tem o endereço da constante

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O enderenco da memoria onde esta localizado a proxima instrucao a ser executada no x86(8086) é apontada por?

CS-code segment;

IP-instruction pointer;

pela soma de IP com o CS;

ou nao é nenhum destes referidos atras;

A memória endereçável por um 8086 é 1M+64K-16. Na prática, quando um x86 corre em modo de 16 bits, a linha A20 está cortada, o que te impede de aceder para lá de 1MB (se tentares, ele acede ao início da memória).

Tens o CS e tens o IP. O CS diz-te o "segmento". Mas os segmentos "sobrepõem-se". O que aconselho é que esqueças a palavra "segmento" e penses "eu multiplico o CS por 16 (i.e. shift left 4), e somo o IP, e fico com o endereço". Assim, por exemplo, os endereços seguintes referem-se exactamente à mesmo "posição" de memória:

- CS=0x0000; IP=0x7C00

- CS=0x07C0; IP=0x0000

- CS=0x0700; IP=0x0C00

- CS=0x00C0; IP=0x7000

Os segmentos sobreporem-se significa que parte do segmento CS=0x7C00 faz parte também do segmento 0x7C08, como consequência da aritmética de segmentos:

- segmento CS=0x7C00: [0x7C000 - 0x8BFFF]    (64 KB)

- segmento CS=0x7C08: [0x7C080 - 0x8C07F]    (64 KB, mas começa apenas 128 bytes mais à frente)

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora