¿Por qué la instrucción MOV tiene el uso del hacha en lugar de dos registros de segmento directamente?

StackOverflow https://stackoverflow.com/questions/928082

Pregunta

Veo un código como:

mov ax, cs
mov ds, ax
mov es, ax

¿Por qué no puedo simplemente comprimir esto:

mov ds, cs
mov es, cs

Es la primera manera más rápida desde su registro mediante el acumulador? Pero eso no parece intuitiva desde C y D son el segmento registros . O hay alguna restricción de que soy consciente de?

Estoy usando nasm por cierto.

¿Fue útil?

Solución

no puede segmentar los mov registro para registro de segmento -. No hay ninguna instrucción para que

Otros consejos

Sólo hay tanto espacio en un procesador para el microcódigo para todas sus instrucciones. Así que una instrucción general se prefiere a menudo durante varios los propósitos especiales para las operaciones lago cambiantes registros de segmento raramente uused. Además, para algunos procesadores de la serie de instrucciones que está absolutamente limitada por la arquitectura -. Por ejemplo, el procesador original 8080 fue limitado a 256 instrucciones ya que todos ellos tenían que tener el código de operación codificada en un solo byte

No es el lenguaje ensamblador, pero realmente el lenguaje de máquina subyacente que impide que estas operaciones.

Durante el montaje se compone de fácil de leer palabras o nemotécnicos, que en realidad representan muy directa los 1s y 0s del código de máquina. En CPUs x86 cada instrucción se compone generalmente de una secuencia de bytes con bytes individuales o incluso bits dentro de los bytes que tienen significado. Ciertos bits representan la instrucción, otros representan el modo de direccionamiento . En los modos de direccionamiento de registro como sus ejemplos algunos bits representan el cual registros específicos se van a utilizar como el origen y el destino de la instrucción mov.

Ahora la familia de procesadores x86 retroceder un largo camino a la década de 1970 cuando la arquitectura de la CPU era más simple. En aquellos días, el concepto de la acumulador era de vital importancia - ax es el 16 acumulador x86 bits. Todos los cálculos se construyeron o "acumulan" en este registro por lo que estaba disponible para todas las instrucciones. Otros registros de propósito general tenían una gama más restringido de uso.

Debido a que las instrucciones se basaron en bytes que quería el menor número de bytes para representar una instrucción como sea posible para mantener la instrucción decodificación rápida. Para mantener el mayor número de instrucciones lo más corto posible el uso del acumulador se hace central.

En las CPUs más modernas, como el Motorola 680x0 registros de propósito más general tienen más habilidades que antes eran del dominio del acumulador. En las CPUs RISC todos los registros son tan flexibles como los acumuladores. He oído que en el modo de 64 bits del conjunto de instrucciones x86 / amd64 actual es ahora mucho menos restringido.

Mire la Intel Volumen 2 Manual de Referencia del conjunto de instrucciones - 325383-056US de septiembre de el año 2015" MOV Mover" columna "Instrucción".

El único mov de 16 bits a los registros se codifica en:

mov r/m16, Sreg

Y "3.1.1.3 Columna de instrucciones en el Cuadro Resumen código de operación", explica:

  • r / m16 - Una palabra operando de registro de propósito general o de memoria utilizada para obtener instrucciones cuyo operando de tamaño atributo es de 16 bits. Los registros palabra de uso general son:. AX, CX, DX, BX, SP, BP, SI, DI
  • SREG -. Un registro de segmento

Así mov ds, cs no es codificable, como no hay una versión mov Sreg, Sreg.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top