domingo, 20 de octubre de 2013

Análisis de programas Loop y JMP

El siguiente programa contiene la instrucción loop.
 
 
Línea 1: Define el número máximo de líneas para listar en una página.
Línea 2: Define el titulo del programa.
Línea 3: Define el modelo de memoria.
Línea 4: Inicia el código.
Línea 5: Inicia la generación de código a partir del desplazamiento de dirección 100.
Línea 6: Comienza el proceso.
Línea 7: Mueve 01 al registro AX.
Línea 8: Mueve 01 al registro BX.
Línea 9: Mueve 01 al registro DX.
Línea 10: Mueve 10 al registro CX.
Línea 11: Nombre de la etiqueta indicando el número de iteraciones.
Línea 12: Suma 1 al registro AX.
Línea 13: Suma el valor de AX al registro BX.
Línea 14: Multiplica por dos a DX.
Línea 15: Comienza un ciclo, decrementando de uno en uno hasta que sea cero.
Línea 16: Mueve el valor 4C00 hexadecimal al registro AX
Línea 17: Ocurre la interrupción.
Línea 18: Termina el proceso.
Línea 19: Termina el programa.

 
En la imágen anterior se muestra como ensamblarlo y enlazarlo, donde se nos muestra una advertencia de que no se declaró stack segment, pero como no lo utilizamos no es ningún problema. En las siguientes imagenes se puede ver como al entrar al debug, se consigue ver el contenido de los registros DS, CS y SS, así como la corrida del programa paso por paso.



 
Al terminar de correr todo el programa nos saca del debug.
 
Si lo hicieramos directo en el debug podemos observer como va cambiando de dirección de acuerdo a la isntrucción que vamos poniendo.
 
 
Lo podemos comparar con el programa de acuerdo a la sig. imagen. Observando que coinciden las direcciones.
 
 
 
El siguiente programa es sobre la instrucción JMP.

 
Línea 1: Define el número máximo de líneas para listar en una página.
Línea 2: Define el titulo del programa.
Línea 3: Define el modelo de memoria.
Línea 4: Inicia el código.
Línea 5: Inicia la generación de código a partir del desplazamiento de dirección 100.
Línea 6: Comienza el proceso.
Línea 7: Mueve 01 al registro AX.
Línea 8: Mueve 01 al registro BX.
Línea 9: Mueve 01 al registro CX.
Línea 10: Nombre de la etiqueta indicando el número de iteraciones.
Línea 11: Suma 1 al registro AX.
Línea 13: Suma el valor de AX al registro BX.
Línea 14: Multiplica por dos a DX.
Línea 15: Salta a la etiqueta A20, realizando una especie de ciclo.
Línea 18: Termina el proceso.
Línea 19: Termina el programa.
 
 
En la imágen anterior se muestra como ensamblarlo y enlazarlo, donde se nos muestra una vez máas la advertencia de que no se declaró stack segment, pero no lo utilizamos por lo que no es ningún problema. En las siguientes imagenes se puede ver como al entrar al debug, se consigue ver el contenido de los registros DS, CS y SS, así como la corrida del programa paso por paso.



 
Al terminar de correr todo el programa nos saca del debug.
 
Si lo hicieramos directo en el debug podemos observer como va cambiando de dirección de acuerdo a la isntrucción que vamos poniendo.
 
 
Lo podemos comparar con el programa de acuerdo a la sig. imagen. Observando que coinciden las direcciones.
 
 


No hay comentarios:

Publicar un comentario