6
votes

Quelle adresse le X86 commence-t-elle à l'exécution?

Quand une première puissance de 8086 ou 8088, quelle adresse le processeur commence-t-il à exécuter? Je sais que le Z80 commence à 0 et le 6809 regarde FFFF pour une adresse pour commencer, mais je me suis souvent demandé comment le X86 démarre.

EDIT:

Cela suppose qu'aucune intervention du BIOS. C'EST À DIRE. Si j'avais mon propre EEPROM pour démarrer, où devrait-il être situé en RAM pour démarrer la machine en marche?


0 commentaires

3 Réponses :


1
votes

8086 reset définit le compteur de programme sur FFFF0H.


2 commentaires

C'est quelque part dans la région du BIOS. Le BIOS effectue ensuite quelques initialisations et lit le secteur de démarrage (512 octets) à 0x7C00 et saute là-bas.


@Ruslik: La question concerne l'architecture 8086, pas le PC IBM. Par conséquent, le BIOS n'a rien à voir avec cela - après tout, il est parfaitement possible de construire une machine autour de 8086 sans utiliser le BIOS (comme il est généralement compris).



0
votes

Le registre cs (sélecteur de code) est défini sur 0xFFFF et IP (pointeur d'instructions) est défini sur 0x0000 .

Ceci correspond à l'emplacement de la mémoire physique 0xFFFF0 mais le contenu de cs / ip est important car ils affectent la quantité de mémoire que vous pouvez utiliser sans saut de distance, et aussi Comment le code doit être généré s'il n'est pas indépendant de la position.

Fondamentalement, c'est comme l'ancien 8080 jours où vous avez un morceau de 64k, vous pouvez adresser votre code. Une fois que vous avez changé CS , que tous les changements de cours.


0 commentaires

11
votes

C'est vraiment une question beaucoup plus complexe que vous n'avez probablement pas réalisé. Sur le 8086, c'est assez simple - il démarre à FFFF: 0000 (16 octets avant la fin de la mémoire).

La partie délicate est sur le 286 ou plus (c'est-à-dire quelque chose de moderne à distance). Dans ces cas, il démarre toujours 16 octets avant la fin de la mémoire, mais bien sûr avec l'adressage de 24 bits (286) ou l'adressage 32 bits (386+), l'adresse physique est différente. Cela ne semble pas complexe, mais c'est vraiment. La complexité découle du fait que le processeur commence à exécuter en mode réel, mais cette adresse (et toutes les personnes à proximité) ne sont pas visibles au processeur en mode réel. Par conséquent, il s'exécute initialement dans un mode plutôt étrange où il est en mode réel de la plupart des perspectives, mais certains des bits élevés de l'adresse que vous semblez exécuter sont ignorés et essentiellement du mal câblé à 1, donc le sommet de l'adresse physique. L'espace est visible pour le processeur. Ensuite, lorsque vous exécutez un saut éloigné, le processeur passe silencieusement en mode réel "normal".

Le BIOS démarre en mode réel, mais s'exécute généralement de manière à peu de temps avant de configurer un environnement de mode (minimal) protégé et de passer en mode protégé. À partir de là, le BIOS exécute l'auto-test de mise sous tension normale, décompresse le BIOS et les copie dans la RAM qui est réellement situé sur FFFF: 0000, passe en mode réel et exécute le code dans l'addition Les roms périphériques s'ils sont marqués pour s'exécuter automatiquement (se retirant généralement en mode protégé dans le processus, mais retour au mode réel lorsque vous avez terminé). Un de ceux-ci sera normalement le contrôleur de disque dur qui aura du code pour lire automatiquement un bloc de démarrage à partir d'un disque et l'exécuter pour commencer à charger le système d'exploitation et tel.


0 commentaires