Duda con respecto a la instrucción ADD del microprocesador 8086

0

Tengo una duda sobre el uso de la instrucción ADD en el microprocesador Intel 8086. ¿No agrega ADD AX, BX y ADD AX, [BX] significa lo mismo?

    
pregunta Susan

2 respuestas

4

AÑADIR AX, BX

Esto agrega el contenido del registro BX a los contenidos de AX y deja el resultado en AX.

AGREGAR AX, [BX]

Este utiliza el contenido del registro BX como una dirección de desplazamiento para una ubicación de memoria. El contenido de 16 bits de esa ubicación de memoria se agrega al contenido de AX y deja el resultado en AX.

    
respondido por el Michael Karas
2

Solo un poco de claridad adicional: son instrucciones para un ensamblador. No son instrucciones de máquina directamente a una CPU Intel 8086. El ensamblador los traduce en instrucciones de la máquina. Pero diferentes ensambladores pueden traducir la misma sintaxis en diferentes instrucciones, dependiendo del ensamblador. Afortunadamente, en el caso de las familias 8088/8086 y posteriores, hubo una gran estandarización y el ensamblador de Microsoft tendió a aceptar cosas muy similares al ensamblador de Intel. Sin embargo, Borland se alejó un poco de la reserva, por así decirlo.

No, no hacen lo mismo. La CPU 8086 admite un modo indirecto, en el que se considera que un registro contiene una dirección de un valor en lugar del valor en sí. Los paréntesis que rodean el registro, como en [BX], fueron utilizados por el ensamblador para indicar que el ensamblador debía producir uno de estos modos de direccionamiento.

Sin embargo, el 8086 solo admite algunos de los registros en este modo. Y cuando se usa este modo, un registro de segmento (que contiene un valor de selector) siempre se emparejó. Los registros permitidos para el modo indirecto en el 8086 fueron BX, SI, DI y BP. Por defecto (sin una "anulación"), los registros BX, SI y DI se emparejaron implícitamente con el registro de segmento DS (datos) y el registro BP se emparejó implícitamente con el registro de segmento SS (pila).

En su ejemplo, AGREGAR AX, BX agregaría el contenido de BX a los contenidos de AX , dejando AX con el nuevo resultado (destruyendo sus contenidos antiguos). Por otra parte, AGREGUE EJE, [BX] , obtendría el valor de 16 bits localizado por el emparejamiento de DS: BX , usado como una dirección segmentada, y agregaría el valor encontrado allí al AX registrarse.

En el 8086, el registro DS también tiene un valor de 16 bits. Por lo tanto, el primer paso utilizado por el 8086 para combinar el registro de segmento DS con la dirección en modo indirecto BX registrarse es multiplicar el valor DS por 16 y luego agregar el registro BX para produzca un valor de 20 bits (el acarreo se pierde). El 8086 solo admitía un bus de direcciones de 20 bits, por lo que fue suficiente para construir una dirección completa y externa para usar en el acceso a la memoria.

    
respondido por el jonk

Lea otras preguntas en las etiquetas