0% encontró este documento útil (0 votos)
158 vistas6 páginas

Saltos Condicionales en Ensamblador

Este documento explica los saltos condicionales en ensamblador, los cuales alteran el flujo de ejecución de un programa dependiendo del estado de las banderas. Describe las banderas y sus usos, así como instrucciones condicionales como JZ, JNZ, JL, JA, JB y JE. Finalmente, presenta ejemplos de código que ilustran el uso de diferentes saltos condicionales.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
158 vistas6 páginas

Saltos Condicionales en Ensamblador

Este documento explica los saltos condicionales en ensamblador, los cuales alteran el flujo de ejecución de un programa dependiendo del estado de las banderas. Describe las banderas y sus usos, así como instrucciones condicionales como JZ, JNZ, JL, JA, JB y JE. Finalmente, presenta ejemplos de código que ilustran el uso de diferentes saltos condicionales.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

MICROPROGRAMACION

ING. HERBERT MONGE


SALTOS CONDICIONALES EN ENSAMBLADOR.

Un salto condicional es el que altera el flujo de la ejecución de un programa enviando


el control a la dirección indicada.

Los saltos condicionales se basan en el estado de las banderas o “flags”, así como
también de la instrucción cmp (compare); esta instrucción resta el operando fuente
al operando destino pero sin que este almacene el resultado de la operación solo
se afecta el resultado de las banderas.

A continuación se muestra una tabla en la cual se dan a conocer los símbolos


empleados.

Letra Significado Observaciones


J Jump (saltar)
G Greater than (mayor que) Para números con signo
L Lees than (menor que) Para números con signo
A Above (mayor que) Para números sin signo
B Below (menor que) Para números sin singo
E Equal (igual)
N Not (no)

Bandera Bit Nombre


CF 0 Bandera de acarreo (carry flag)
PF 2 Bandera de paridad (parity flag)
AF 4 Bandera de acarreo auxiliar (adjust flag)
ZF 6 Bandera de cero (zero flag)
SF 7 Bandera de signo (sign flag)
DF 10 Bandera de dirección (direction flag)
AF 11 Bandera de desbordamiento (overflow flag)

La bandera de acarreo se activa cuando se produce acarreo en una suma o


multiplicación, o un "préstamo" en una resta entre números sin signo.

La bandera de paridad se usa para indicar si el resultado, en un registro de una


operación matemática es válido.
La bandera de acarreo auxiliar se utiliza en operaciones matemáticas con números
decimales codificados en binario (BCD). Se activa si hay acarreo presente.

La bandera de cero se activa si el resultado de una operación aritmético lógica es


cero.

La bandera de signo muestra el bit más significativo del resultado de una operación,
el cual denota el signo del número.

La bandera de dirección controla la selección de autoincremento (D=0) o auto


decremento (D=1) de los registros di o si durante las operaciones con cadenas de
caracteres. La bandera de dirección sólo se utiliza con las instrucciones para el
manejo de cadenas de caracteres.

La bandera de desbordamiento se utiliza en la aritmética de enteros con signo


cuando un número sobrepasa la capacidad de representación del registro.

Tabla de instrucción con saltos aritméticos condicionales con signo.

Condición de salto Comparación con Salta si


signo
= JE ZF= 1
!= JNE ZF= 0
> JGB ZF= 0 y
JNLE SF= OF
>= JGE SF= OF
JNL
< JL SF!= OF
JNGE
<= JLE ZF= 1 o
JNG SF!= OF
Tabla de instrucción con saltos aritméticos condicionales sin signo.

Condición de salto Comparación sin signo Salta si


= JE ZF= 1
!= JNE ZF= 0
> JA ZF= 0 y
JNBE CF= 0
>= JAE CF= 0
JNB
< JB CF= 1
JNAE
<= JBE ZF= 1 O
JNA CF= 1

Banderas en el debug.
Banderas En uno En cero
OF OV NV
DF DN UP
IF EI DI
SF NG(-) PL(+)
AF AC NA
PF PE PO
CF CY NC

EJEMPLOS DE LOS SALTOS CONDICIONALES

Ejemplo de JZ (Jump if Zero):

-a 100
154E:0100 mov ax, 00f5
154E:0103 mov bx, 00f5
154E:0106 sub ax, bx
154E:0108 jz 010a
154E:010A int 20
154E:010C
Ejemplo de JNZ (jump if not zero)
-a 100
154E:0100 mov ax, 0002
154E:0103 sub ax, 0001
154E:0106 jnz 0103 Saltos Condicionales
154E:0108 int 20
154E:010a

Ejemplo de JL (Jump if less than): se usa para con signo. Salta si DL<3ah
La instruccion CMP resta DL-3A y configura la flag, no cambia el contenido de DL,
pero si DL es menor que 3A , la intruccion JL salta a la posición 01F.

-a 100
154E:0100 mov ah, 02
154E:0102 mov dl, bl
154E:0104 add dl, 30
154E:0107 cmp dl, 3a
154E:010A jl 010f
154E:010C add dl, 07
154E:010F int 21
154E:0111 int 20
154E:0113

Ejemplo de JA (jump is above) y JB (jump is below): para sin signo es. Salta si
dl es menor que 43 y salta si dl es mayor que 80.

-a100
14A7:0100 mov ah, 02
14A7:0102 mov dl, bl
14A7:0104 add dl, 42
14A7:0107 int 21
14A7:0109 cmp dl, 43
14A7:010C jb 0104
14A7:010E cmp dl, 80
14A7:0111 ja 0116
14A7:0113 add dl, 20
14A7:0116 sub dl, 20
14A7:0119 int 21
14A7:011B int 20
14A7:011D nop
14A7:011E

Ejemplo de JG: salta si es mayor que: Aquí se compara si el valor que está en dl
es mayor que c y si esto es verdad entonces le suma a dl 20 e imprimirá la letra
“B” si no imprimirá la letra “b”

-a100
0CB8:0100 mov ah, 02
0CB8:0102 mov dl, bl
0CB8:0104 add dl, 42
0CB8:0107 cmp dl, c
0CB8:010A jg 010f
0CB8:010C add dl, 20
0CB8:010F int 21
0CB8:0111 int 20
0CB8:0113 nop
0CB8:0114

Ejemplo JL: salta si es menor que, si se cumple la condición imprimirá la letra “J”
si no imprimirá la letra “j”.

-a100
0CB8:0100 mov ah, 02
0CB8:0102 mov dl, bl
0CB8:0104 add dl, 30
0CB8:0107 cmp dl, 3A
0CB8:010A jl 010F
0CB8:010C add dl, 07
0CB8:010F int 21
0CB8:0111 int 20
0CB8:0113 nop
0CB8:0114

JE compara si es igual: Si la comparación se cumple se imprime la letra “A” y si


no se cumple se imprime la letra “a”.

-a100
0CB8:0100 mov ah, 02
0CB8:0102 mov dl, bl
0CB8:0104 add dl, 41
0CB8:0107 cmp dl, 41
0CB8:010A je 010F
0CB8:010C add dl, 20
0CB8:010F int 21
0CB8:0111 int 20
0CB8:0113 nop
0CB8:0114

También podría gustarte