Operación: Si la condición es verdadera CLR D2 1’s ⇒ destino CMP.B D0,D1 0’s ⇒ destino SEQ D2 Si el contenido de los registros D0 y D1 son iguales el byte menos significativo de D2 se pone a Sintaxis Ensamblador: Scc <ea> 1 D2=$FF, si el contenido de los registros es distinto el byte menos significativo se pone a 0 D2=$0. Atributos: Tamaño= BYTE. Descripción: La condición especificada es testeada, de forma que,si la condición se cumple el byte especificado por <ea>se pone a1, en caso contrario, este byte se pone a0. Registro de Códigos de Condición: X N Z V C - - - - - X No afectado N No afectado Z No afectado V No afectado C No afectado Modos de direccionamiento: Operando fuente Dn (An) (An)+ -(An) d16(An) d8(An,Xn) xxx.W xxx.L Conjunto de condiciones: CÓDIGO cc CONDICIÓN TEST HI Salta si es superior (High) C • Z Sin signo LS Salta si es Inferior o igual (Low) C + Z Sin signo CC Salta si el bit de acarreo está a 0 C=0 Sin signo CS Salta si el bit de acarreo está a 1 C=1 Sin signo NE Salta si no son iguales Z=0 - EQ Salta si son iguales Z=1 - VC Salta si el bit de overflow está a 0 V=0 - VS Salta si el bit de overflow está a 1 V=1 - PL Salta si es positivo N=0 Con signo MI Salta si es negativo N=1 Con signo GE Salta si es mayor o igual N V+N V Con signo LT Salta si es menor N V+N V Con signo GT Salta si es mayor N V Z+N V Z Con signo LE Salta si es menor o igual Z+N V+N V Con signo 64 65 JMP SALTOS INCONDICIONALES Operación: destino ⇒ destino BRA Sintaxis Ensamblador: JMP<ea> Operación: PC+offset ⇒ PC Atributos: Tamaño= - Sintaxis Ensamblador: BRA <etiqueta> Descripción: el programa continua su ejecución en la dirección efectiva especificada por la Atributos: Tamaño= BYTE, WORD. instrucción. El contenido de el PC se pierde. Descripción: Salta a la dirección identificada por la etiqueta, el programa sigue ejecutándose Registro de Códigos de Condición: en la posición (PC)+offset. X N Z V C Registro de Códigos de Condición: - - - - - X N Z V C X No afectado - - - - - N No afectado Z No afectado X No afectado V No afectado N No afectado C No afectado Z No afectado V No afectado Modos de direccionamiento: C No afectado Operando fuente Modos de direccionamiento: direccionamiento implicito. (An) d16(An) Ejemplo: d8(An,Xn) BRA BUCLE xxx.W El programador en este tipo de instrucciones no indica el desplazamiento, sino que en su lugar, xxx.L indica la dirección de memoria a la que quiere saltar mediante una etiqueta, en este caso d16(PC) BUCLE. d8(PC,Xn) Ejemplo: JMP (A0) Salta a la dirección a la que apunta el registro de direcciones A0. 66 67 BSR Branch to Subrutine JSR Jump to Subrutine Operación: PC ⇒ -(SP) Operación: PC ⇒ -(SP) PC+offset ⇒ PC Sintaxis Ensamblador: JSR <ea> Sintaxis Ensamblador: BSR <etiqueta> Atributos: Tamaño= -. Atributos: Tamaño= BYTE,WORD. Descripción: esta instrucción pasa el control al inicio de la subrutina, para ello, guarda el Descripción: pasa el control al inicio de la subrutina, para ello, guarda el contenido del PC en contenido del PC en la pila e introduce en el PC la dirección efectiva especificada. Como la pila y suma al contenido de éste el offset. Como resultado de esta instrucción se produce el resultado de esta instrucción se produce el salto a la dirección especificada. salto a la dirección especificada por la etiqueta. Registro de Códigos de Condición: Registro de Códigos de Condición: X N Z V C X N Z V C - - - - - - - - - - X No afectado X No afectado N No afectado N No afectado Z No afectado Z No afectado V No afectado V No afectado C No afectado C No afectado Modos de direccionamiento: direccionamiento implicito. Modos de direccionamiento: Operando fuente Ejemplo: (An) d16(An) BSR SUBRUTINA_1 d8(An,Xn) El programador en este tipo de instrucciones no indica el desplazamiento, sino que en su lugar indica la dirección de memoria a la que quiere saltar mediante una etiqueta, en este caso xxx.W SUBRUTINA_1. xxx.L . d16(PC) d8(PC,Xn) Ejemplo: JSR (A0) Salta a la dirección inicio de la subrutina a la que apunta el registro de direcciones A0. 68 69 RTS Return from Subrutina RTR Return and Restore Operación: (SP)+ ⇒PC Operación: (SP)+ ⇒ CCR (SP)+ ⇒ PC Sintaxis Ensamblador: RTS Sintaxis Ensamblador: RTR Atributos: Tamaño= - Atributos: Tamaño= - Descripción: con esta instrucción devolvemos el control al programa principal desde el cual se hizo la llamada a subrutina, para ello, se restaura el contador de programa PC con el valor del Descripción: con esta instrucción devolvemos el control al programa principal desde el cual se PC que se almacenó en la pila con la instrucción de salto a subrutina. Como resultado de esta hizo la llamada a subrutina. Para ello, se restaura el valor del registro de códigos de condición instrucción se produce un salto a la siguiente instrucción existente en el programa principal tras CCR, hay que tener en cuenta que no existe ninguna instrucción de salto a subrutina en el que la llamada a la subrutina. se almacene el valor del registro CCR, por lo tanto, esta labor recae en la programación de la propia subrutina. Tras la restauración del CCR se produce la restauración del PC con el valor Registro de Códigos de Condición: del PC que se almacenó en la pila con la instrucción de salto a subrutina. Como resultado de esta instrucción se produce un salto a la siguiente instrucción existente en el programa principal X N Z V C tras la llamada a la subrutina. - - - - - Registro de Códigos de Condición: X No afectado N No afectado X N Z V C Z No afectado * * * * * V No afectado C No afectado El valor del CCR se restablece desde la pila. Modos de direccionamiento: direccionamiento implicito. Modos de direccionamiento: direccionamiento implicito. Ejemplo: Ejemplo: . . 70 71 SALTOS CONDICIONALES DBcc Test Condition, Decrement, and Branch Bcc Operación: Si la condición es falsa Dn-1 ⇒ Dn Operación: Si la condición es verdadera Si Dn != -1 PC+offset ⇒ PC PC+offset ⇒ PC Sintaxis Ensamblador: Bcc <etiqueta> Sintaxis Ensamblador: DBcc Dn,<etiqueta> Atributos: Tamaño= BYTE, WORD. Atributos: Tamaño= WORD. Descripción: Se trata de un salto condicional, de forma que, si la condición especificada por cc Descripción: Esta instrucción consta de tres parámetros: una condición, un registro de datos es verdadera entonces salta a la dirección identificada por la etiqueta (PC +offset), en caso que contiene el número de veces que el bucle será ejecutado y un offset que determina la contrario no se produce el salto y se sigue la ejecución normal del programa. dirección de salto. Cuando la instrucción DBcc es ejecutada lo primero es testear la condición, de forma que, si ésta es verdadera, el salto no tiene lugar y ejecutamos la instrucción que le Registro de Códigos de Condición: sigue, en caso contrario, en el que la condición sea falsa, se decrementa el contenido del registro de datos. Tras este decremento se evalúa el contenido, de manera que, si el valor de X N Z V C este registro es igual a –1 no se produce salto y se ejecuta la instrucción que sigue a DBcc, en - - - - - caso contrario (Dn!=-1), se salta a la dirección especificada por la etiqueta. X No afectado N No afectado Z No afectado V No afectado DBcc Dn,<etiqueta> C No afectado Modos de direccionamiento: direccionamiento implicito. Evaluación de Verdadera la condición Conjunto de condiciones: cc CÓDIGO cc CONDICIÓN TEST Falsa HI Salta si es superior (High) C • Z Sin signo Dn-- LS Salta si es Inferior o igual (Low) C + Z Sin signo CC Salta si el bit de acarreo está a 0 C=0 Sin signo CS Salta si el bit de acarreo está a 1 C=1 Sin signo NE Salta si no son iguales Z=0 - Si Dn=-1 No EQ Salta si son iguales Z=1 - VC Salta si el bit de overflow está a 0 V=0 - VS Salta si el bit de overflow está a 1 V=1 - PL Salta si es positivo N=0 Con signo Instrucción que sigue a DBcc Salto a la Etiqueta MI Salta si es negativo N=1 Con signo GE Salta si es mayor o igual N V+N V Con signo LT Salta si es menor N V+N V Con signo GT Salta si es mayor N V Z+N V Z Con signo LE Salta si es menor o igual Z+N V+N V Con signo Registro de Códigos de Condición: X N Z V C Ejemplo: - - - - - BVS BUCLE X No afectado El programador en este tipo de instrucciones no indica el desplazamiento, sino que en su lugar, N No afectado indica la dirección de memoria a la que quiere saltar mediante una etiqueta, en este caso Z No afectado BUCLE. Si el bit de overflow (V) está activo, es decir a 1, entonces se salta a la dirección de V No afectado memoria designada por la etiqueta BUCLE, en caso contrario se ejecuta la instrucción que C No afectado sigue a la instrucción BVS que está siendo ejecutada. Modos de direccionamiento: direccionamiento implicito. 72 73 Conjunto de condiciones: CÓDIGO cc CONDICIÓN TEST HI Salta si es superior (High) C • Z Sin signo LS Salta si es Inferior o igual (Low) C + Z Sin signo CC Salta si el bit de acarreo está a 0 C=0 Sin signo CS Salta si el bit de acarreo está a 1 C=1 Sin signo NE Salta si no son iguales Z=0 - EQ Salta si son iguales Z=1 - VC Salta si el bit de overflow está a 0 V=0 - VS Salta si el bit de overflow está a 1 V=1 - PL Salta si es positivo N=0 Con signo MI Salta si es negativo N=1 Con signo GE Salta si es mayor o igual N V+N V Con signo LT Salta si es menor N V+N V Con signo GT Salta si es mayor N V Z+N V Z Con signo LE Salta si es menor o igual Z+N V+N V Con signo F Falso siempre T Verdadero siempre Ejemplo: MOVE #99,D5 BUSCAR TST.W (A2)+ DBMI D5,BUSCAR TST.B D5 BMI NO_HAY En este ejemplo buscamos en una lista de 100 números almacenados en memoria el primer número que es negativo. La dirección inicio de la lista se almacena en el registro A2. Con este código vamos recorriendo la lista hasta llegar, bien al número negativo, o hasta recorrer la lista entera si haberlo encontrado, en este caso se ejecuta la instrucción BMI NO_HAY. 74