[Practico 6][Ej 3] Cantidad de saltos "negativos"?

[Practico 6][Ej 3] Cantidad de saltos "negativos"?

de Martin Pacheco -
Número de respuestas: 5

En el ejercicio piden escribir en lenguaje ensamblador del ejercicio 2, el codigo presentado.

La unica forma que logro ver de poder reiterar ciertas lineas de codigo hasta que se cumpla una condicion (el do ... whle del codigo) con las instrucciones proporcionadas, es saltando una cantida de instrucciones negativa, lo que se entenderia como "saltar para atras.

Es correcto hacerlo asi?

Acabo de ver la solucion de este ejercicio, y se simplifica el tema de los saltos usando una pseudonotacion y no considerando exactamente lo que hacen las instrucciones de salto. Mi duda es si, en parciales/examenes es correcto seguir este tipo de notaciones indicando con una "etiqueta:" a donde se quiere saltar?

Y una segunda pregunta:
En la instruccion SR (shift a la derecha) hace una aclaracion en negrita que dice: Expande el signo.
Eso significa que si el numero tiene un 1 como bit mas significativo (indicando que es negativo) entonces el resultado de hacer shift a la derecha de N bits solo desplaza todos los bits N lugares a la derecha, menos el mas significativo, que sigue siendo 1 en el resultado de la operacion?

En respuesta a Martin Pacheco

Re: [Practico 6][Ej 3] Cantidad de saltos "negativos"?

de Maria Soledad Techera Gomez -
Ademas de la duda de arriba tambien me surgio la duda de si el direccionamiento es de byte o de a 2 bytes, ya que las instrucciones son de 16 bits pero en la letra dice que de la direccion 101h hasta 165h hay 100 palabras.

Gracias
En respuesta a Maria Soledad Techera Gomez

Re: [Practico 6][Ej 3] Cantidad de saltos "negativos"?

de Gustavo Brown -
En el ejercicio 2 no aclara si la arquitectura direcciona de a byte o de a palabra. Si bien la mayoría de las arquitecturas direccionan de a byte, la del ejercicio 2 en particular no tiene instrucciones que explícitamente muevan 1 byte desde o hacia memoria por lo tanto la arquitectura podría direccionar de a palabra (16 bits para este ejercicio).
El ejercicio 3 supone que para el ejercicio 2 se decidió usar direccionamiento de a palabra (16 bits) y por eso dice que desde la dirección 101h hasta la 165h hay 100 palabras.
No hay problema en el ejercicio 3 de suponer que se había direccionado de a byte y acomodar el algoritmo para tener en cuenta que cada palabra ocupa 2 direcciones de memoria (y en total hay 50 palabras en ese caso).

Saludos,
Gustavo
En respuesta a Martin Pacheco

Re: [Practico 6][Ej 3] Cantidad de saltos "negativos"?

de Gustavo Brown -
Esta pregunta quedó "colgada" desde hace 6 años pero ahora revivió así que va respuesta ;)

Si, es correcto saltar "para atrás". El inmediato asociado a las instrucciones de salto es con signo. Supongan que son inmediatos expresados en complemento a 2 de 12 bits.

El uso de etiquetas sirve a la hora de escribir el programa en código assembler. Luego al pasarlo a código máquina para este ejercicio se debe calcular el salto relativo de acuerdo a la cantidad de instrucciones desde la instruccion de salto hasta la etiqueta.

En los ejercicios de examen para arquitecturas RISC en general les pedimos que calculen ese número. O sea pueden seguir usando etiquetas pero además deben calcular el valor (notar que el cálculo es sencillo una vez terminado de escribir el programa porque en una arquitectura RISC todas las instrucciones ocupan la misma cantidad de bytes). Para una arquitectura tipo CISC en general no les vamos a pedir que hagan el cálculo porque hay que tener en cuenta el tamaño variable de las instrucciones entonces el cálculo se hace un poco más difícil.

Sobre la segunda pregunta, la aclaración de que se expande el signo no es como dijo el compañero sino que es: se "mueven" los bits N lugares a la derecha y se rellenan los N bits más significativos con el valor que tenía el bit más significativo antes del corrimiento.
Es lo que se llama un shift aritmético porque si se mira el número resultante en complemento a 2 eso corresponde con el resultado de la división entera del número y 2^N  (siempre y cuando el número antes del corrimiento sea mayor o igual en valor absoluto a 2^N)

Saludos,
  Gustavo
En respuesta a Gustavo Brown

Re: [Practico 6][Ej 3] Cantidad de saltos "negativos"?

de Nicolas Grosso San Roman -
Hola! Estaba revisando este ejercicio y viendo lo que comentaban de "expandir el signo". En este ejercicio, en el único lugar que uso SR es para dividir la suma de inf y sup sobre 2, por lo que hago un SR de 1. La suma de inf y sup nunca llega a dar un número diferente de 0 en el bit más significativo, por lo que SR no genera nada más que 0 en el bit desplazado, no?
En respuesta a Nicolas Grosso San Roman

Re: [Practico 6][Ej 3] Cantidad de saltos "negativos"?

de Federico Rivero -

Hola Nico,

Correcto, si estás seguro que el número a dividir entre 2 siempre es positivo, entonces SR siempre va a introducir 0's por el lado izquierdo.

Saludos,

        Federico