2010-04-04 6 views
2

Il semble que ce qui suit est une méthode commune donnée dans de nombreux tutoriels sur la commutation d'un processeur de 16 bits à 32 bits:processeur de réglage en mode 32 bits

mov  eax, cr0   ; set bit 0 in CR0-go to pmode 
    or  eax, 1 
    mov  cr0, eax 

Pourquoi ne ferais-je pas simplement ce qui suit:

or  cr0, 1 

Y at-il quelque chose qui me manque? Peut-être la seule chose que je peux penser est que je ne peux pas effectuer une opération comme celle-ci sur le registre cr0.

+4

« Peut-être la seule chose que je peux penser est que je ne peux pas effectuer une opération comme celui-ci sur le registre CR0 » - qui serait un bon raison. Tous les registres ne prennent pas en charge toutes les opérations. –

+0

@Neil - bien, alors, je suppose que je comprends pourquoi cela ne peut pas être fait. lol ... – IAbstract

Répondre

6

L'opérateur or ne dispose pas d'un code op dans lequel il peut accéder au registre CR0. (Il n'est pas possible d'effectuer cette opération sur le registre CR0.)

C'est pourquoi le mov est présent: il existe un op-code qui peut accéder au registre CR0.

-2

ou est un opérateur de comparaison où il prend réellement deux valeurs et crée une solution. La solution est stockée dans eax après l'opération ou est terminée. Ou ne peut pas être utilisé dans un registre de stockage car il s'agit d'une opération spécialisée et est régie par la portée et c'est pourquoi il est recommandé de prendre ses résultats et de stocker immédiatement la nouvelle valeur juste après la fin du processus. S'appuyant sur ce qui a été dit à propos de l'utilisation ou de l'opérande, il n'a pas de capacité de stockage, il effectue simplement une opération sur les données qui sont déjà présentes. Pensez ou aimez un bouton sur une calculatrice où il a une opération comme ajouter, soustraire, multiplier ou diviser. Le code est la calculatrice qui gère les tampons de mémoire; etc. et utilise les services d'un opérateur/opération sur les données dans ses magasins de mémoire et quand fini obtient les résultats de retour pour d'autres opérations ou la sortie fini à l'utilisateur.

La question ici est logique et le code est bien pensé et concis.

+1

Pardonnez mes fautes de frappe ci-dessus comme le clavier que j'utilise est assez minuscule dans la forme et de continuer à utiliser. Passez une bonne journée et profitez du code. Je ne peux pas attendre que mon PSU de bureau revienne de la boutique. – RDRush

-3

Essayez et la force 1 à CR0 en 1 commande:

MOV cr0, 1 
+1

Wow, c'est une mauvaise idée. Qu'en est-il de tous les autres bits de 'CR0', que vous n'avez pas encore définis? – Ashe

+1

C'est aussi une instruction illégale. 'cr0' ne peut être défini qu'à partir d'un registre. – hirschhornsalz

Questions connexes