Sentencias JC, JZ, JMP

Sentencias JC, JZ, JMP

de Matias Guzman Cubero Delgado -
Número de respuestas: 6
Hola,

Tengo la siguiente duda, por ejemplo en el ejercicio 1. Lo que hice fue escribir el programa en lenguaje ensamblador empezando que la primera instruccion sea 0, luego 1,lugeo 2,... entonces cuando utilizo jump digo

JMP 0xdir, donde 0xdir es la linea que numeré por cada sentencia.(en realidad pongo JMP Regx donde Regx tiene la informacion 0xdir).

Cual es la idea de esto? Osea seria que el programa se escribe en memoria la primer sentencia en la direccion 0, la segunda en la direccion 1... y por eso se pone jump a 0xdir?

Desde ya Gracias.
En respuesta a Matias Guzman Cubero Delgado

Re: Sentencias JC, JZ, JMP

de Juan Saavedra -
Supongo que estás hablando del práctico de Formato de Instrucción.

Conceptualmente lo que hiciste está bien, así es como se escriben efectivamente los saltos (usualmente utilizamos una notación que comento más adelante).

Pero es incorrecta la expresión, porque la arquitectura tiene sus instrucciones de salto con el siguiente formato:
Jxxx REG

En REG va un registro (uno de los 16 posibles) y no la dirección. Es necesario cargarle al registro la dirección destino del salto antes de saltar.

EDIT: En este ejercicio NO pueden utilizarse etiquetas ( mal yo por no leer la letra entera :) ). El ejemplo en general sirve. Hay que tener mucho cuidado de que la instrucción de MOV permita cargar todos los bytes de la dirección, sino hay que realizar construcciones adicionales.

Para esto, pueden utilizarse etiquetas, que el ensamblador resolverá cuando "compile" el código. Ej:

MOV 10, REG05
MOV 1, REG06
MOV terminaPrograma, REG07
MOV meFijoSiEsCeroReg05, REG08

meFijoSiEsCeroReg05:
SUB REG05, REG06, REG05
JZ REG07 // REG07 tiene cargado la dirección de la etiqueta

terminaPrograma:
NOP

Es similar a los "goto" de los lenguajes de programación.

Espero se entienda. Cualquier duda a las órdenes.

Saludos.



En respuesta a Juan Saavedra

Re: Sentencias JC, JZ, JMP

de Juan Sebastian Korenko Crisera -
No logro entender bien:
MOV meFijoSiEsCeroReg05, REG08;

esa instruccion es valida o es un ejemplo y en el registro debemos cargarle un numero.

Gracias
En respuesta a Juan Sebastian Korenko Crisera

Re: Sentencias JC, JZ, JMP

de Juan Saavedra -
Es una instrucción que el ensamblador sabrá resolver, ya que reconocerá la etiqueta.
No es una instrucción válida de la arquitectura, pero si es usualmente aceptada por el ensamblador (que lleva todo a 1 y 0) , que según la etiqueta, coloca allí el número adecuado.

Saludos.
En respuesta a Juan Saavedra

Re: Sentencias JC, JZ, JMP

de Juan Sebastian Korenko Crisera -
el NOP que es lo que hace??, consume ciclos de reloj hasta finalizar el programa.
Hay que usarlo cuando queremos que el algoritmo llegue a su fin no?
Gracias
En respuesta a Juan Sebastian Korenko Crisera

Re: Sentencias JC, JZ, JMP

de Juan Saavedra -
NOP es una instrucción que no hace nada, consume algunos ciclos como cualquier instrucción.

NO consume ciclos de reloj hasta finalizar el programa.

Está bien pensar en una instrucción que termine la ejecución, usualmente las arquitecturas cuentan con una. Si estás programando una función, se ejecuta el retorno (en 8086 por ejemplo es RET).
En algunos casos, las arquitecturas cuentan con algunas instrucciones para detener la ejecución (ej: HALT).

Saludos.