Professional Documents
Culture Documents
Saltos y ciclos
LENGUAJE ENSAMBLADOR
PRESENTA
JEZER ROA JIMENEZ ALAIN SANCHEZ SALAZAR RAMSES VILLEGAS BAHENA JESSICA ESTEFANIA VEGA CAMPOS
SALTOS INCONDICIONALES
(JMP)
La instruccin JMP es la que se utiliza para un saltono condicional; esto, significa que cuando se ejecutauna instruccin JMP, el registro EIP que contiene ladireccin de la siguiente instruccin a ejecutar va aapuntar a la direccin indicada por el JMP. Una operacin JMP dentro del mismo segmento puede ser corta o cercana (o de manera tcnica, lejana, si el destino es un procedimiento con el atributo FAR). En su primer paso por un programa fuente, el ensamblador genera la longitud de cada instruccin. Sin embargo, una instruccin JMP puede ser de dos o tres bytes de longitud. Una operacin JMP a una etiqueta dentro de 128 a + 127 bytes es un salto corto. La sintaxis es la siguiente. JMP XXXX XXXX: Es la ubicacin de la instruccin en donde se continuar el programa (A partir de sta se ejecutan las siguientes). Ejemplo: XXXX:0100 MOV AX, 1000 XXXX:0103 JMP 0107 XXXX:0105 XOR AX, AX XXXX:0107 INT 20 En ste caso al ejecutarse la instruccin de salto incondicional (JMP), se contina la ejecucin a partir de la instruccin (INT 20h), no ejecutndose la instruccin XOR (sta instruccin realiza la operacin XOR de l operando 2 sobre el operando 1) que provocara el borrado de registro AX (Que provocara que AX tome el valor 0), si se ejecuta. Es decir, se ejecutan las siguientes instrucciones:
MOV AX, 1000 JMP 0107 INT 20 No se ejecuta "XOR AX, AX" por el salto incondicional. El operando puede ser una direccin constante (Por ejemplo 0107), un salto a nivel de offset, tambin puede ser un salto largo (Que cambie los valores de los registros CS e IP), (Por ejemplo FFFF:0000, que salta al ROM BIOS). Tambin puede ser el valor de un registro, por ejemplo:
JMP DI
En ste caso salta a la instruccin apuntada por DI. Tambin puede ser un valor apuntado por un registro puntero, por ejemplo:
JMP [SI]
En ste caso salta a la instruccin apuntada por el valor apuntado por SI. El operando puede ser cualquier direccionamiento vlido (Puede ser cualquiera de los direccionamientos utilizados en el operando origen de la instruccin MOV Existen bsicamente tres tipos de salto:
escribimos la instruccin "JMP ", alcompilar el fichero la etiqueta ser sustituida por elvalor numrico de la direccin de memoria en que seencuentra el lugar donde queremos saltar.
LJMP addr16. Salto incondicional de 16bits (salto largo). AJMP addr11. Salto incondicional de 11bits (salto corto). SJMP rel. Salto incondicional relativo a la posicin actual.
Si se utiliza un ensamblador, los saltos se pueden expresar con su expresin genrica JMP para salto incondicional y CALL para salto a subrutina, el software ensamblador se encargar de remplazar el salto genrico por el especfico del microprocesador ms adecuado a cada caso.
guardando previamente los flags en la pila (PUSHF), porque larutina de interrupcin retornar (con IRET en vez de con RETF) sacndolos.
SALTOS CONDICIONALES
EIF-THEN-ELSE, o el FOR, o el WHILE-DO lo que es en java. Bien, pues aqu est lo que suple a estas instrucciones en lenguaje Ensamblador. Se basan completamente en los flags, pero estn simplificados. Los saltos podran resumirse en un modo "Basic" de la manera IF-THEN-GOTO de forma que cuando se cumple una condicin se salta a un sitio determinado. He aqu los tipos de saltos condicionales (las letras en maysculas sonlas instrucciones):
JC, JNAE, JB: Los tres sirven para lo mismo. Significan: Jump if Carry, Jump
if Not Above or Equal y Jump if Below. Saltan por lo tanto si al haber una comparacin el flag de acarreo se pone a 1; es entonces equivalente a < en una operacin sin signo. Vamos, que se compara as: CMP 13h,18h, saltar, ya que 13h es menor que 18h. Tambin se suelen usar para detectar si hubo fallo en la operacin, ya que muchas interrupciones al acabar en fallo encienden el carryflag.
JNC, JAE, JNB: Otros tres que valen exactamente para lo mismo. Jump if
not Carry, Jump if Above or Equal y Jump if Not Below. Saltan por tanto si al haber una comparacin el flag de acarreo vale 0, o sea, es equivalente al operador >=. En la comparacin CMP 0,0 o CMP 13h,12h saltar, ya que el segundo operando es MAYOR O IGUAL que el primero.
JZ o JE: Jump if Zero o Jump if Equal. Salta si el flag de cero est a 1, o sea,
si las dos instrucciones comparadas son iguales. Saltara en el caso CMP 0,0
JBE o JNA: Jump if Below or Equal o Jump if Not Above. Saltara si en resultado de la comparacin el primer miembro es menor o igual que el segundo ( <= )
JS:JumpifSign. Salta si el flag de signo est a uno. JNS: Jump if Not Sign. Salta si el flag de signo est a cero.
JP, JPE: Jump if Parity o Jump if Parity Even. Salta si el flag de paridad est a
uno.
JNP, JPO: Jump if Not Parity, Jump if Parity Odd. Salta si el flag de paridad
est a cero.
JL, JNGE: Jump if Less, Jump if Not Greater of Equal. Salta si en el resultado
de la comparacin, el primer nmero es inferior al segundo, pero con nmeros con signo.
JGE, JNL: Jump if Greater or Equal, Jump if Not Less. Salta si en el resultado
de la comparacin, el primer nmero es mayor o igual que el segundo, pero con nmeros con signo.
JLE, JNG:
Jump if Lower or Equal, Jump if Not Greater. Salta si en el resultado de la comparacin, el primer nmero es menor o igual que el segundo, pero con nmeros con signo.
JG, JNLE:
Jump if Greater, Jump if Not Lower or Equal. Salta si en el resultado de la comparacin, el primer nmero es mayor que el segundo, para nmeros con signo. Algunos ejemplos de los ms utilizados: MOV AX,1111h MOV BX,1112h CMP AX,BX ; AX es menor que BX JB tirapalante ; Saltar a tirapalante HLT ; Esta orden bloquea el ordenador, halt tirapalante: DEC BX ; Ahora BX valdr 1111h CMP AX,BX ; Ahora valen igual
JNE Acaba ; No saltar, ya que son iguales JE Continua ; Esta vez si Continua: DEC BX ; Ahora BX vale 1110h CMP AX,BX JE Acaba ; No son iguales, por tanto no saltar JB Acaba ; No es menor, tampoco salta JG Acaba ; Es mayor, ahora SI saltar Acaba: XOR AX,AX XOR BX,BX ; AX y BX valen ahora cero. En los saltos condicionales se puede hacer como en los incondicionales, o sea, formatos como: JE 0022h JNE 0030h JNO AL Sin embargo, estamos limitados a saltos cortos, o sea, de rango a 127 bytes hacia delante o 128 hacia atrs, no pudiendo superar esta distancia.
CICLOS
Un ciclo, conocido tambin como iteracin, es la repeticin de un proceso un cierto nmero de veces hasta que alguna condicin se cumpla. En estos ciclos se utilizan los brincos "condicionales" basados en el estado de las banderas. Por ejemplo la instruccin jnz que salta solamente si el resultado de una operacin es diferente de cero y la instruccin jz que salta si el resultado de la operacin es cero.
Instruccin LOOP: La instruccin LOOP, requiere un valor inicial en el registro CX. En cada iteracin, LOOP de forma automtica disminuye 1 de CX. Si el valor en el CX es cero, el control pasa a la instruccin que sigue; si el valor en el CX no es cero, el control pasa a la direccin del operando. La distancia debe ser un salto corto, desde -128 hasta +127 bytes. Para una operacin que exceda este lmite, el ensamblador enva un mensaje como salto relativo fuera de rango. El formato general de la instruccin LOOP es: | [etiqueta:] | LOOP | direccin corta | El siguiente programa muestra el funcionamiento de la instruccin LOOP.
Page 60,132 TITLE P08LOOP (COM) Ilustracin de LOOP .MODEL SMALL .CODE ORG 100H MAIN PROC NEAR MOV AX,01 ;Iniciacin de AX, MOV BX,01 ;BX y MOV CX,01 ;CX a 01 MOV CX,10 ;Iniciar A20: ;Nmero de iteraciones ADD AX, 01 ;Sumar 01 a AX ADD BX, AX ;Sumar AX a BX SHL DX, 1 ;Multiplicar por dos a DX LOOP A20 ;Iterar si es diferente de cero MOV AX, 4C00H ;Salida a DOS MAIN ENDP END MAIN
Existen dos variaciones de la instruccin LOOP, ambas tambin decrementan el CX en 1. LOOPE/LOOPZ (repite el ciclo mientras sea igual o repite el ciclo mientras sea cero) continua el ciclo mientras que el valor en el CX es cero o la condicin de cero esta establecida.
Instruccin DEC
Propsito: Decrementar el operando Sintaxis: DEC destino Esta operacin resta 1 al operando destino y almacena el nuevo valor en el mismo operando.
Instruccin INC
Propsito: Incrementar el operando. Sintaxis: INC destino La instruccin suma 1 al operando destino y guarda el resultado en el mismo operando destino.