Jump to content

Assembly 8086 duvidas


killerhcf
 Share

Recommended Posts

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:

Link to comment
Share on other 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

Link to comment
Share on other 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;"

Não respondo a dúvidas por mensagem.

Link to comment
Share on other 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?

Link to comment
Share on other 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

Link to comment
Share on other 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.

Link to comment
Share on other 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

Link to comment
Share on other 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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.