À quoi servent les registres CS et IP dans L'assemblage Intel 8086?

ainsi, comme le dit la question, Quel est le but des registres CS et IP dans intel 8086

j'ai trouvé cette explication:

segment de Code (CS) est un registre de 16 bits contenant l'adresse de 64 KB segment avec processeur instruction. Le processeur utilise le segment CS pour tous les accès aux instructions référencées par registre de pointeur d'instruction (IP). CS register ne peut pas être modifié directement. Le CS registre est automatiquement mise à jour pendant les instructions de saut d'obstacles, d'appel loin et de retour Loin.

et ceci pour IP:

pointeur D'Instruction (IP) est un registre de 16 bits.

Je ne comprends pas vraiment ce que cela signifie fondamentalement, donc si quelqu'un pouvait fournir une explication plus "vive", ce serait génial:)

17

6 réponses

puisque le pointeur D'Instruction (IP) est de 16 bits, cela signifie que vous ne pouvez avoir que des instructions 64k (2^16), ce qui n'était pas beaucoup même dans les années 80. Donc, pour étendre l'espace d'adresse vous avez un deuxième registre qui Adresse des blocs de 64k. Vous pourriez considérer cs: ip ensemble comme un registre 32 bits qui est alors capable d'adresser 2^32 octets...ie 4G qui est ce que vous obtenez sur un processeur qui utilise des adresses 32 bits. Le 8086 utilisait 20 bits d'adresses, donc vous pouviez accéder à 1M de mémoire.

13
répondu user1666959 2018-04-09 17:45:39

l'adresse physique est calculée à partir de 2 parties. I) l'adresse du segment. ii) l'offset de l'adresse. Le CS(registre de segment de code) est utilisé pour adresser le segment de code de la mémoire I. e un emplacement dans la mémoire où le code est stocké. L'IP (Instruction pointer) contient l'offset dans le segment de code de la mémoire. Par conséquent, CS: IP est utilisé pour pointer vers l'emplacement (I. e pour calculer l'adresse physique) du code dans la mémoire.

19
répondu kiran james 2014-04-06 19:04:56

l'instruction qui sera exécutée ensuite est celle à l'adresse mémoire égale à:

16 * CS + IP

cela permet d'adresser 20 bits de mémoire, bien que les registres n'aient que 16 bits de large (et cela crée aussi deux façons distinctes d'encoder la plupart des adresses).

L'effet de CS est analogue à celui des autres registres de segments. Par exemple, DS incréments accès aux données (qui ne spécifient pas un autre registre de segment) par 16 * DS .

CS

les instructions qui modifient CS sont:

  • ljmp (loin de saut)
  • lcall (appel far), qui pousse ip et cs à la pile, puis saute far
  • lref (far return), qui inverse l'appel far
  • int, qui lit IP / CS de la table vectorielle D'interruption
  • iret, qui inverse un int

CS ne peut pas m'modifié par mov comme les autres registres de segment. Essayer de l'encoder avec L'identifiant standard pour CS, ce que GNU GAS 2.24 fait sans se plaindre si vous écrivez:

mov %ax, %cs

conduit à une exception de code invalide lors de l'exécution.

pour observer L'effet de CS, essayez d'ajouter ce qui suit à un secteur de démarrage et de l'exécuter dans QEMU comme expliqué ici https://stackoverflow.com/a/32483545/895245

/*  is the new CS, f the new IP. */
ljmp , $after1
after1:
/* Skip 16 bytes to make up for the CS == 1. */
.skip 0x10
mov %cs, %ax
/* cs == 1 */

ljmp , $after2
after2:
.skip 0x20
mov %cs, %ax
/* cs == 2 */

IP

IP augmente automatiquement chaque fois qu'une instruction est exécutée par la longueur d'encodage de cette instruction: c'est pourquoi le programme avance!

IP est modifié par les mêmes instructions qui modifient CS, ainsi que par les versions non far de ces instructions (cas plus courant).

IP ne peut pas être observé directement, il est donc plus difficile de jouer avec. Vérifiez cette question pour les alternatives: Programme de Lecture de Compteur directement

9

une fois que vous aurez écrit .le code dans le texte du programme d'assemblage .le code indique la valeur cs. toute commande ultérieure ou antérieure dans le fichier sera traitée selon cs:ip , où ip est une valeur de offset de de cs.

bien sûr, vous devez garder à l'esprit que assembly compiler convertira d'abord le texte en instructions de code machine.

1
répondu zeimer 2014-06-26 20:07:56

puisque le processeur 8086 utilise 20 bits d'adressage, nous pouvons accéder à 1 Mo de mémoire, mais les registres de 8086 ne sont que 16 bits,donc pour accéder aux données de la mémoire, nous combinons les valeurs présentes dans les registres de segments de code et les registres de pointeur d'instruction pour générer une adresse physique, cela se fait en déplaçant la valeur de CS 4 bits vers la gauche et l'ajouter ensuite avec la valeur IP

exemple:

valeur de CS est 1234Hex (hexa decimal)

valeur de la PI est 5678Hex

maintenant la valeur de CS après le déplacement de 4 bits à gauche est 12340Hex puis après avoir ajouté avec la valeur IP, il est 179B8Hex qui est l'adresse physique

1
répondu Amrish Ak 2015-07-02 16:58:55

registre IP - IP est Pointeur d'Instruction. Sa fonction est la même que celle de PC (program counter) dans un autre microprocesseur qui est de pointer vers la prochaine instruction à être récupérée par L'unité BIU pour être alimentée en unité EU.

0
répondu masood qazi 2015-10-07 19:01:34