2009-05-29 12 views

Respuesta

9

No se puede mover el segmento de registro a segmento de registro - no hay instrucciones para ello.

+0

Cuando. primero lee tu respuesta no lo hice Te creo, pero en la documentación de NASM, sin dudas, no hay instrucciones de mov reg_dseg, reg_cseg. – samoz

+0

Esta no es la razón, es el resultado. –

+1

¿Qué? No entiendo lo que quieres decir con Neil. – samoz

1

Hay tanto espacio en un procesador para el microcódigo con todas sus instrucciones. Por lo tanto, a menudo se prefiere una instrucción general sobre varias de propósito especial para operaciones raramente utilizadas, registros de segmentos que cambian el lago. Además, para algunos procesadores, el número de instrucciones está absolutamente limitado por la arquitectura; por ejemplo, el procesador 8080 original estaba limitado a 256 instrucciones, ya que todos tenían que codificar el código de operación en un solo byte.

+0

+1 para explicar el motivo detrás del motivo – dss539

1

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

Mientras que el ensamblaje se compone de palabras fáciles de leer o mnemotécnicas, en realidad representan bastante directamente los 1s y 0s del código de máquina. En las CPU x86, cada instrucción se compone típicamente 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 addressing mode. En los modos de direccionamiento de registro tales como los ejemplos, algunos bits representan los registros específicos que se utilizarán como fuente y destino de la instrucción mov.

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

Dado que las instrucciones se basaron en bytes, usted quería que hubiera pocos bytes para representar una instrucción lo más posible para mantener la descodificación de instrucciones rápidamente. Para mantener tantas instrucciones como sea posible, el uso del acumulador se hace central.

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

+0

No hasta que x86_64 que registra se pueda usar así. Como la mayoría de los registros de 32 bits x86 pueden actuar más o menos como un registro de propósito general –

+0

Parece que no sabía que la pregunta era sobre los registros de segmento y el acumulador. Nunca me metí en el ensamblaje x86 debido a la horrible forma en que funcionaba la memoria, pero luego con los registros de los segmentos y demás. Creo que es mucho mejor trabajar ahora que hay un buen modelo de memoria plana. – hippietrail

+0

Aunque tampoco voy demasiado a ensamblar x86. Pero todavía hay instrucciones de segmento en x86 también. El espacio de direcciones de x86 no es plano –

1

Mire la columna "MOV Move" Intel Manual Volume 2 Instruction Set Reference - 325383-056US September 2015 "Instrucción".

El único de 16 bits mov a los registros está codificado en:

mov r/m16, Sreg 

Y "3.1.1.Columna 3 de instrucciones en el Resumen Tabla Opcode" explica:

  • r/m16 - un operando de registro de palabra 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 propósito 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

Cuestiones relacionadas