This video explains conditional execution in assembly language, focusing on how conditional suffixes modify instructions based on the state of flags in the register. The video demonstrates how to use conditional codes in GCC assembly and their impact on program flow.
cmp (compare) are crucial for setting these flags.cs, cc, eq, ne, lt, gt, le, ge, hs, lo, etc.), detailing which flag combinations trigger their associated instructions.eq and ne), while others depend on combinations of multiple flags (e.g., carry and zero flags for hs and lo).hs, lo) and signed (g, lt, gt, le, ge) number comparisons.Bienvenidos, hoy veremos la ejecución condicional. Su objetivo: mostrar cómo cada instrucción puede ser de ejecución condicional, explicar el uso de los códigos de condición. Ya hemos utilizado el concepto del sufijo para ilustrar cómo se puede agregar una s a las instrucciones para forzar la actualización de los indicadores de registro de estado. Por ejemplo, la función de, sin la s, no tiene efecto en la bandera de estado. Existen muchos sufijos y puede usarse de manera similar para expandir la funcionalidad de casi todas las operaciones en conjunto de instrucciones a rm. Casi todas las instrucciones a rm pueden tener un sufijo aplicado que solo permitirá que el comando se ejecute si la condición bajo prueba es verdadera. Si no se cumple la condición, la instrucción será ignorada. En términos de programación, le brinda la capacidad de hacer que cada instrucción sea una operación condicional. En la diapositiva podemos observar el listado de los códigos condicionales. Por ejemplo, el sufijo cs denota acarreo ≥ 1, por lo que la instrucción a la que se adjunta solo se ejecutará si el indicador de acarreo se establece en el momento en que a rm llega a la instrucción. El ensamblador de gcc comprende estos códigos condicionales y puede utilizarlos en sus programas agregando las letras al final de la demo técnica. También puedes dejar espacio entre el nemotécnico y el código de condición y esto ayuda a la legibilidad. Por ejemplo, estas dos líneas son equivalentes y el contenido de r1 es movido a r0 solo si se ha retirado la bandera de acarreo, es decir, si se iguala a 1. Al contrario, si se usa el sufijo csc, el contenido de r1 será movido a r0 solo si la bandera de acarreo está limpia, es decir, si se igual a 0. Veamos nuevamente el listado de los códigos. Los códigos de condición actúan sobre el estado de las banderas de registro. Cps r no establecen las banderas de registro de estado en primera instancia. Necesitará usar una instrucción de comparación o una instrucción de sufijo s asociado para hacer una buena comprensión de las operaciones binarias y aritméticas le ayudará a comprender cómo las instrucciones se ven afectadas por estos indicadores de condición. Algunos sufijos alteran más de un indicador y en tales casos estas operaciones pueden requerir que ciertas combinaciones de indicadores estén en una combinación de ≥ 1 o limpio 0. Por lo tanto, podemos agrupar convenientemente los códigos de condición en dos conjuntos: los que se realizan en el resultado de un único indicador de registro de estado y los que se ejecutan en función del resultado en dos o más indicadores. Códigos condicionales de una bandera. Estas banderas condicionales se proporcionan en pares complementarios en el primer conjunto. Q y n ambos actúan bajo la condición del indicador 0, bandera z: uno cuando está configurado igual a uno y el otro cuando está despejado igual a cero. Veamos ejemplo de algunos de estos códigos. Las instrucciones que usan el sufijo ecu o n solo se ejecutarán evaluando la bandera zeta. Q verifica si se está igual a 1 y n si se está igual a 0. Prestar número del mismo valor dará como resultado 0 y en consecuencia establecerá el indicador de 0, se podrá z igual a 1. Una operación de comparación establecería el indicador de 0 si los dos valores que se comparan fueran los mismos. Si el resultado de cualquier operación no es 0, entonces el indicador de 0 está limpio, es decir, z igual a 0. En el primer caso de la izquierda se carga el valor de r1 en ere 0, cierre 1 es igual a 0, se establecerá z igual a 1 y se ejecutará la siguiente instrucción que carga el valor de 1 en ere 0. Del del lado derecho tenemos una comparación con la instrucción cmp. Veremos en detalle esta instrucción en una vídeo clase posterior. Se comparan los valores de r5 y r6, si son iguales se establece z igual a 1, iceta igual a 0; si son diferentes, la siguiente instrucción realizará la suma r5 + r6 solo si sus valores son diferentes por el sufijo n. Las instrucciones que usan el sufijo m solo se ejecutarán si se establece el indicador negativo, n igual a 1. Al contrario, las instrucciones con el sufijo pl se ejecutarán si n igual a 0. Este indicador se establece como resultado de una operación aritmética que produce un resultado que es menor que cero. Esto ocurriría si se resta un número grande de uno más pequeño. En el ejemplo, la instrucción sub resta uno del contenido de r1 y el sufijo s se usa para actualizar las banderas. El add en la siguiente línea solo tiene lugar si n igual a 1 y de ser así se agrega 15 a ere 0. La tercera instrucción se ejecuta si el resultado de la primera línea es positivo y en ese caso se suma 255 a ere 0. Códigos condicionales de múltiples banderas. Estos códigos de condición se ejecutan en función de la condición de dos o más indicadores de registro de estado. Se utilizan con mayor frecuencia después de una instrucción de comparación cmp o cnn. Este conjunto de códigos de condición se divide además en dos grupos: los que funcionan con números sin signo, hs y ls, y los que funcionan con números con signo, g, lt, gt, y l. Las instrucciones que usan el sufijo h solo se ejecutarán si se establece el indicador de acarreo, se iguala 1, y el indicador 0 está limpio, z igual a 0. Esto sucede en una comparación si operando 1 es mayor que operando 2. En el ejemplo, se comparan los valores de los registros r10 y r-5 y la siguiente instrucción se ejecutará si r10 es mayor que r5. Las instrucciones que usan el sufijo ls solo se ejecutarán si el indicador de acarreo está despejado, se iguala 0, y el indicador 0 está activado, z igual a 1. Esto sucede en una comparación si operando 1 es menor que operando 2. Es importante recordar que la condición supone que los dos números que se comparan no tienen signo. La instrucción que se ejecutará si tanto el indicador negativo como el indicador de desbordamiento están configurados o no, es decir, si se iguala 1, v igual a 1, o se iguala 0 y v igual a 0. En otras palabras, la bandera debe estar en la misma condición. Esto sucede cuando se comparan dos valores y operando uno es mayor o igual que operando 2. En la diapositiva se muestra el estado de las banderas para el resto de instrucciones. Puede pasar el vídeo y examinar estos valores. Cambia tu pensamiento y cambiarás tu mundo. Hasta la próxima.