Flexibilidad de formato de valores inmediatos

Flexibilidad de formato de valores inmediatos

de Nicolas Reyes Scaiano -
Número de respuestas: 7

Buenas tardes, espero anden bien.
Tengo la siguiente duda general sobre sintaxis de assembler 8086:
En el contexto de examen, qué tanta flexibilidad hay sobre el formato de valores inmediatos? Por ejemplo, si quiero guardar -1 en el registro AX (como podría ser si estoy queriendo guardar un short), puedo hacer MOV Ax, -1 o tengo que hacer MOV Ax, 0x8001? Otro ejemplo: si quiero guardar el número 12 (doce en base decimal) en el registro BX, puedo hacer MOV Bx, 0xC o siempre tengo que poner los 16 bits de los valores inmediatos? (Osea en este caso MOV Bx, 0x000C) Si estoy guardando algo en la parte alta/baja de un registro tengo que pasarle dos digitos hexa siempre? Etc.


Muchas gracias por la atención.

Saludos!

En respuesta a Nicolas Reyes Scaiano

Re: Flexibilidad de formato de valores inmediatos

de Nicolas Reyes Scaiano -
También, no es exactamente sobre valores inmediatos pero parecido: vi en alguna clase que se escriben cosas como MOV Ax, [SS:BP+4]. Esto se puede o es solo un abuso de notación para ahorrar lineas en la clase? A mi entender para lograr esto se tendria que hacer primero ADD BP, 0x4 y despues si hacer el mov con [SS:BP].

Nuevamente gracias!
En respuesta a Nicolas Reyes Scaiano

Re: Flexibilidad de formato de valores inmediatos

de Gonzalo Tejera -
Hola Nicolas, en general no hacemos abuso de notación. Te recomiendo ver la las Notas reducidas de 8086, en la página 3 muestra los formatos posibles para generar accesos a memoria.

Las instrucciones que vos propones son equivalentes a lo que comentàs se presenta en clase, pero ocupa más espacio en memoria y es menos eficiente.

Saludos, Gonzalo


En respuesta a Nicolas Reyes Scaiano

Re: Flexibilidad de formato de valores inmediatos

de Gonzalo Tejera -

Hola Nicolás, espero estés bien. En tu correo usas la palabra "flexibilidad", eso a qué se refiere?

Cuando usas constantes en asembler debés indicar la base (si no pones nada se asume decimal). Se realiza una expansión del signo y se almacenan en el operando destino los bits menos significativos (tantos como el tamaño del operando destino). Espero que esto aclare tus dudas, cualquier cosa consultamos nuevamente.

Ojo que 0x8001 no es -1.

Saludos, Gonzalo


 

En respuesta a Gonzalo Tejera

Re: Flexibilidad de formato de valores inmediatos

de Federico Rivero -

Aprovecho a comentar también que ante la duda sobre una cierta instrucción, pruebes a escribirla en el ArquiSim. Si la acepta es porque es correcta.

Saludos,

         Federico 

En respuesta a Gonzalo Tejera

Re: Flexibilidad de formato de valores inmediatos

de Nicolas Reyes Scaiano -
Buenas, gracias a todos por las respuestas. Tuve que tomarme el tiempo de procesar varias cosas. Con flexibilidad me refiero a si se puede usar algun abuso de notacion o si hay que escribir codigo assembler que 100% compilaria bien si lo estuvieramos ejecutando IRL.

0x8001 no es -1 porque un short -1 estaria en complemento a 2, no? yo lo puse en formato "entero con signo". Pero entonces supongo que -1 seria 0xFFFF? Gracias!
En respuesta a Nicolas Reyes Scaiano

Re: Flexibilidad de formato de valores inmediatos

de Federico Rivero -
Hola Nicolás!

Con respecto a la notación, aceptamos ciertas desviaciones que no impliquen un error que pueda ser conceptual para el curso: ejemplo, una instrucción con operando en memoria correcta sería la siguiente: MOV AX, ES:[BX + 3], sin embargo, si escriben MOV AS, [ES:BX + 3] no les quitamos puntos, o si les falta un ':' o ponen paréntesis curvos en lugar de rectos, tampoco. Pero si escriben MOV AX, 2 ^ 7, eso sí lo calificaríamos como un error (no grave, pero sí error), porque el ensamblador no te va a calcular el exponente y además se espera que dominen las potencias de 2.

Con respecto al 0x8001, es correcto lo que decís, 8086 trabaja en complemento a dos. Los números negativos, si vas a escribirlos en binario o hexa, tenés que escribirlos en complemento a dos.

Saludos,
Federico
En respuesta a Federico Rivero

Re: Flexibilidad de formato de valores inmediatos

de Nicolas Reyes Scaiano -
Hola Federico, gracias denuevo por las respuestas, espero que no te joda que te siga preguntando la verdad me estas aclarando pila de dudas: por lo que decis al final entonces tambien puedo poner valores directos en decimal en assembler 8086? Pense que no. Osea si pongo 0x(...) supongo que se asume que el (...) va a estar en hexa? Pero si no pongo el "0x" se entiende como decimal? O es por contexto nomas? No me queda claro si el compilador posta es asi o si es en el curso que se permite decimal etc.

Los otros ejemplos quedaron claros, por ejemplo para poner MOV AX, 2 ^ 7 se espera que pongamos MOV AX, 0x80 no? (o en binario MOV AX, 0x10000000) porque el octavo 1 (de derecha a izquierda) es 2 a la 7, no? Gracias!