2010-11-17 32 views
3

Dans l'architecture 8086, l'espace mémoire est de 1 Moctet et divisé en segments logiques de 64 Ko chacun.Comment une adresse physique est-elle générée en 8086?

-à-dire qu'il a 20 lignes d'adresse ainsi le procédé suivant est utilisé:

que le registre de segment de données est décalée vers la gauche de 4 bits alors ajouté au registre de décalage

ma question est: Comment nous faisons l'opération de décalage bien que tous les registres ne soient que 16 bits

+0

Pas vraiment une question de programmation - c'est juste l'architecture du processeur (environ milieu des années 1980) - le « changement » est géré par le matériel du processeur - vous ne devez pas vous inquiéter à ce sujet . –

+0

Eh bien, c'est une question de programmation, mais la prémisse est fausse. –

+0

@Paul: vous avez raison, mais j'étudie le matériel CPU et je n'ai pas vu de registre 20 bit –

Répondre

4

La traduction d'adresse est effectuée en interne par une unité spéciale sans utiliser les registres disponibles pour le code utilisateur pour stocker les résultats intermédiaires - il suffit d'aller chercher es valeurs de 16 bits et fait la traduction à l'intérieur - il n'est pas reflété partout où le code de l'utilisateur pourrait l'observer.

+0

OK, mais j'ai besoin d'une référence pour vérifier la réponse –

+0

@Mina Fouad: Pas de références explicites dont je suis au courant, mais on peut en déduire. Les registres disponibles pour le code ne sont pas modifiés pendant la traduction, il est donc évident qu'ils ne sont pas utilisés comme stockage intermédiaire pour les équipes. – sharptooth

+0

Vérifié, merci beaucoup –

0

Dans le matériel, le registre est une combinaison de flips-flops pour stocker des bits d'information.

register

Une puce de matériel peut avoir des millions de registre comme à l'intérieur pour stocker l'instruction en cours, état actuel, les valeurs ... Seul un petit nombre d'entre eux est exposé à des programmes pour stocker des valeurs. C'est l'idée. Le spécifique derrière chaque architecture est le secret du fabricant, donc vous ne verrez jamais aucun document public à ce sujet.

Ceci est un simple calculateur d'adresse matérielle en verilog. La mise en œuvre réelle peut-être beaucoup plus compliqué

module calc_phys_address(
          phys_addr, // Output of the counter 
          clk,  // clock Input 
          segment, // segment 
          offset  // offset 
); 
    output reg [20:0] phys_addr; 
    input    clk; 
    input  [15:0] segment; 
    input  [15:0] offset; 

    always @(posedge clk) 
     phys_addr[20:0] <= {segment[15:0], 4'b0} + offset[15:0]; 
endmodule