|
Complementos de sistemas electrónicos digitales |
Tema
3
|
5.
SUMARIO
DE INSTRUCCIONES
El formato o forma genérica de expresar las
instrucciones en ensamblador de un DSP de la familia TMS320C3x de Texas
Instruments es como sigue:
MNEMÓNICO SRC1,SRC2,DST
Donde MNEMÓNICO
hace referencia a una instrucción en particular, por ejemplo el mnemónico ADDI
hace referencia a una instrucción que realiza una operación de suma con operandos
enteros, SRC1 y SRC2 hacen referencia a los operandos fuente y DST al operando destino de la instrucción.
Obsérvese que hay instrucciones que no requieren
de operandos (por ejemplo, la instrucción NOP,
que no realiza operación alguna). Otras, sólo requieren un operando (el
destino, por ejemplo, la instrucción PUSH
AR0, que almacena el registro AR0
en la pila del DSP), o dos operandos (uno fuente y otro que hace las veces de
destino o de fuente y destino, por ejemplo, ADDI
R0,R7, que suma el contenido del registro R0 al contenido del registro R7
almacenando el resultado en el registro R7).
Por último, existen instrucciones que requieren tres operandos (dos fuentes y
un destino como, por ejemplo, ADDI
R0,R2,R7, que suma el contenido del registro R0 al contenido del registro R2
almacenando el resultado en el registro R7).
Destacar, asociado a estos microprocesadores,
las siguientes características especiales del software:
1.
Las instrucciones se pueden ejecutar
todas en un único ciclo máquina salvo instrucciones de ruptura, controlada por
el usuario, de la secuencia de ejecución del programa (instrucciones de salto)
que tardan, al no poder aprovechar la estructura de ejecución en paralelo de
microinstrucciones del DSP (estructura pipeline
vista anteriormente), cuatro ciclos máquinas en hacerse efectivas. Para
posibilitar la optimización de la ejecución de las instrucciones de salto se
definen unas instrucciones de salto con retardo, BRD. Estas instrucciones se ejecutan en un único ciclo máquina
puesto que el salto efectivo se produce con el aprovechamiento de la estructura
pipeline (las tres instrucciones que
siguen al salto se ejecutan antes de producirse el salto efectivo).
2.
Posibilidad de ejecutar dos operaciones
en paralelo. Gracias a la existencia interna de múltiples buses de datos así
como de operadores aritméticos independientes se pueden realizar dos
operaciones, simultáneamente, en la CPU del DSP. Las instrucciones que permiten
este tipo de operaciones tienen la forma genérica:
MNEMÓNICO1 SRC1,SRC2,DST1
|| MNEMÓNICO2 SRC3,SRC4,DST2
3.
Posibilidad de ejecutar múltiples veces
una instrucción (RPTS) o varias (RPTB, repetición de un bloque de
instrucciones) sin que ello suponga algún tipo de penalización por la ejecución
de bucles. En el caso de ejecución de una única instrucción múltiples veces, RPTS, la fase FETCH de recogida de la
instrucción es posible realizarla desde el registro IR de la CPU, con lo que se
evita cualquier penalización (en tiempo de ejecución) en el acceso a memoria
para recoger la instrucción.
4.
Existencia de instrucciones que facilitan
el acceso de dos procesadores a una única memoria (instrucciones de interbloqueo). Se definen una serie de
instrucciones que permiten la implementación sencilla de un semáforo y que, de
manera coherente, dos microprocesadores compartan una zona común de datos
generando, para ello, el arbitraje necesario que evite los conflictos en el
acceso a los datos comunes. La familia TMS320C3x dispone de cinco instrucciones
de interbloqueo (LDFI, LDII, SIGI, STFI, STII).
Estas instrucciones le ofrecen al usuario una
potente herramienta de sincronización en el procesamiento en paralelo de DSPs,
garantizando la integridad y la velocidad de la comunicación. Emplean los
puertos de entrada y salida de propósito general, XF0 y XF1. XF0 debe
configurarse como línea de salida y XF1 como línea de entrada de forma que, XF0
genere la señal de petición de bloqueo y XF1 funcione como línea de
reconocimiento del bloqueo solicitado. Ambas señales son activas a nivel bajo. Los
accesos en lectura y escritura (LDFI,
LDII, STFI, STII), generados
por las instrucciones interbloqueadas,
son idénticos a los normales salvo que, además, usan las líneas XF0 y XF1. Los
operandos de esas instrucciones deben ser siempre accedidos por direccionamiento
directo o indirecto.
Al emplear las instrucciones LDFI y LDII, XF0 se pone a cero si y sólo si el operando fuente se ubica
en memoria externa al DSP (,
ó
activos) o en la zona de memoria
interna de periféricos. En caso contrario, acceso a memoria interna de tipo
RAM por ejemplo, las operaciones de lectura interbloqueadas
no activan XF0 y son idénticas a las operaciones de lectura normales que
realiza el bus. Cuando se ejecuta una instrucción de tipo LDFI ó LDII, la CPU
realiza las siguientes operaciones:
1.
Comienza el acceso en lectura al
operando: Se impone en el bus la dirección del dato y, simultáneamente, se
activa XF0 ().
2.
Se extiende, en el tiempo, el acceso en
lectura al dato hasta que no se activen XF1 () y la variable
(acceso con
activo) ó
(acceso con
ó
activos).
La estructura de la CPU permite la atención de
una interrupción activa que aparezca cuando se esté ejecutando una instrucción LDFI ó LDII siempre que se haya activado la señal al DSP y aunque no se
haya reconocido el bloqueo (aunque no se haya activado XF1). Al final de la
ejecución de la rutina de servicio de la interrupción se vuelve a la
instrucción siguiente a la interbloqueada.
Ésta es la única forma de evitar, en el caso de que no llegue nunca el
reconocimiento externo del bloqueo (
), que la CPU quede bloqueada al ejecutar las instrucciones LDFI ó LDII.
Al emplear las instrucciones STFI y STII, XF0 se pone a uno si y sólo si el operando destino se ubica
en memoria externa al DSP (,
ó
activos) o en la zona de memoria
interna de periféricos. En caso contrario, acceso a memoria interna de tipo
RAM por ejemplo, las operaciones de escritura interbloqueadas no desactivan XF0 y son idénticas a las operaciones
de escritura normales que realiza el bus. Cuando se ejecuta una instrucción de
tipo STFI ó STII, la CPU realiza las siguientes operaciones:
1.
Comienza el acceso en escritura al
operando: Se impone en el bus la dirección del dato y, simultáneamente, se
desactiva XF0 ().
2.
Se extiende, en el tiempo, el acceso en
escritura del dato hasta que no se active la variable (acceso con
activo) ó
(acceso con
ó
activos).
Al emplear la instrucción SIGI, que no dispone de operandos, la CPU realiza las siguientes
operaciones:
1.
Se activa XF0 ().
2.
La CPU se queda en estado de espera hasta
que detecte la activación de XF1 ().
3.
Termina de ejecutar la instrucción
desactivando XF0 ().
Ejemplo1: Multiproceso en el que
DSP1 espera, en el bucle L1, hasta que DSP2 ponga el operando indicado por LOCK
a cero. Sólo se abandona el bucle L1 si el DSP2 escribe un valor cero en la
dirección @LOCK (lo debe hacer cuando XF0 del DSP valga 0) y, antes de
abandonar el bucle, el DSP1 vuelve a activar el semáforo (pone la dirección
@LOCK a uno).
LDI 1,R0 ; R0=1
L1: LDII @LOCK,R1 ; Comienza el interbloqueo: R1=[LOCK], XF0=0. Afecta a
; las banderas del registro ST.
STII R0,@LOCK ;
[LOCK]=1, XF0=1; Fin del interbloqueo.
No afecta a las
;
banderas del registro ST, no afecta al salto.
BNZ L1 ;
Salta a L1 mientras la condición para el salto no se haya
; activado con la instrucción LDII (R1!=0). La única forma
de
; salir del bucle es que un dispositivo externo escriba en
; @LOCK un 0 cuando XF0 vale 0.
Ejemplo2: Multiproceso en el que DSP1 ejecuta el
programa en su secuencia normal hasta que llega a la instrucción SIGI. Entonces, espera hasta que DSP2
quite el bloqueo (ejecute SIGI). Para
que el proceso de ejecución esté sincronizado, es preciso conectar XF0 del DSP1
(configurado como línea de salida del microprocesador) a XF1 del DSP2
(configurado como línea de entrada) y XF1 del DSP1 (configurado como línea de
entrada) a XF0 del DSP2 (configurado como línea de salida).
En la tabla 3-4 se enumeran las instrucciones de
almacenamiento y carga de datos de que dispone el DSP. En la tabla 3-5 se
enumeran las instrucciones que realizan operaciones aritméticas simples. En la tabla
3-6 se enumeran las instrucciones que realizan operaciones lógicas. En la tabla
3-7 se enumeran las instrucciones de control del formato del dato. En la tabla
3-8 se enumeran las instrucciones de control del contador de programa. En la tabla 3-9 se enumeran las instrucciones que introducen
al DSP en el modo de funcionamiento de bajo consumo. En la tabla 3-10 se
enumeran las instrucciones interbloqueadas y, finalmente, en la tabla 3-11 se
enumeran las instrucciones que realizan dos operaciones en paralelo.
Mnemónico |
Descripción breve |
LDE |
Carga
el exponente de un número flotante. |
LDF |
Carga
un número flotante. |
LDFcond |
Carga
un número flotante si se cumple la condición definida. |
LDI |
Carga
un número entero. |
LDIcond |
Carga
un número entero si se cumple la condición definida. |
LDM |
Carga
la mantisa de un número flotante. |
LDP |
Carga
el puntero a la página de datos (direccionamiento directo). |
POP |
Recoge
entero de la pila. |
POPF |
Recoge
flotante de la pila. |
PUSH |
Almacena
entero en la pila. |
PUSHF |
Almacena
flotante en la pila. |
STF |
Almacena
flotante. |
STI |
Almacena
entero. |
Tabla 3-4. Operaciones básicas de carga y almacenamiento de datos, TMS320C3x.
Mnemónico |
Descripción breve |
ABSF |
Calcula
el valor absoluto de un flotante. |
ABSI |
Calcula
el valor absoluto de un entero. |
ADDC |
Suma
enteros (al resultado le suma el valor del bit de acarreo). |
ADDC3 |
Suma
enteros (al resultado le suma el valor del bit de acarreo). |
ADDF |
Suma
flotantes. |
ADDF3 |
Suma
flotantes. |
ADDI |
Suma
enteros. |
ADDI3 |
Suma
enteros. |
CMPF |
Compara
dos flotantes. |
CMPF3 |
Compara
dos flotantes. |
CMPI |
Compara
dos enteros. |
CMPI |
Compara
dos enteros. |
MPYF |
Multiplica
flotantes. |
MPYF3 |
Multiplica
flotantes. |
MPYI |
Multiplica
enteros. |
MPYI3 |
Multiplica
enteros. |
NEGB |
Calcula
el entero cambiado de signo (al resultado le resta el valor del bit de
acarreo). |
NEGF |
Calcula
el flotante cambiado de signo. |
NEGI |
Calcula
el entero cambiado de signo. |
SUBB |
Resta
enteros (al resultado le resta el valor del bit de acarreo). |
SUBB3 |
Resta
enteros (al resultado le resta el valor del bit de acarreo). |
SUBcond |
Resta
enteros, si se cumple una determinada condición. |
SUBF |
Resta
flotantes. |
SUBF3 |
Resta
flotantes. |
SUBI |
Resta
enteros. |
SUBI3 |
Resta
enteros. |
SUBRB |
Resta
enteros (al resultado le resta el valor del bit de acarreo). Similar a SUBB. |
SUBRF |
Resta
flotantes. La operación de resta es la contraria que en SUBF. |
SUBRI |
Resta
enteros. La operación de resta es la contraria que en SUBI. |
Tabla 3-5. Operaciones aritméticas simples básicas, TMS320C3x.
Mnemónico |
Descripción breve |
AND |
And lógico. |
AND3 |
And lógico. |
ANDN |
And
lógico con complemento. |
ANDN3 |
And
lógico con complemento. |
ASH |
Desplazamiento
aritmético. |
ASH3 |
Desplazamiento
aritmético. |
LSH |
Desplazamiento
lógico. |
LSH3 |
Desplazamiento
lógico. |
NOT |
Complemento a uno. |
OR |
Or
lógico. |
OR3 |
Or
lógico. |
ROL |
Giro
a la izquierda. |
ROLC |
Giro
a la izquierda a través del bit de acarreo. |
ROR |
Giro
a la derecha. |
RORC |
Giro
a la derecha a través del bit de acarreo. |
TSTB |
Comprueba
un campo de bits. |
TSTB3 |
Comprueba
un campo de bits. |
XOR |
Xor
lógico. |
XOR3 |
Xor
lógico. |
Tabla 3-6. Operaciones lógicas básicas, TMS320C3x.
Mnemónico |
Descripción breve |
FIX |
Convierte
de flotante a entero. |
FLOAT |
Convierte
de entero a flotante. |
NORM |
Normaliza
flotante. |
RND |
Redondea
flotante. |
Tabla 3-7. Operaciones básicas de control del formato de los datos, TMS320C3x.
Mnemónico |
Descripción breve |
Bcond |
Salto
condicionado. |
BcondD |
Salto
condicionado con retardo. |
BR |
Salto
incondicional. |
BRD |
Salto
incondicional con retardo. |
CALL |
Llamada
a subrutina. |
CALLcond |
Llamada
a subrutina condicionada. |
DBcond |
Decrementa
y salto condicionado. |
DBcondD |
Decrementa
y salto condicionado con retardo. |
IACK |
Reconocimiento
de interrupción. |
IDLE |
Espera
hasta la aparición de una interrupción. |
NOP |
No
operación. |
RETIcond |
Retorno
condicionado de rutina de servicio de interrupción. |
RETScond |
Retorno
condicionado de subrutina. |
RPTB |
Repite
bloque de instrucciones. |
RPTS |
Repite
una instrucción. |
SWI |
Interrupción software. El fabricante indica, en el
manual del DSP, que esta instrucción no debe ser utilizada por un usuario. |
TRAPcond |
Llamada
condicionada a vector TRAP. |
Tabla 3-8. Operaciones
básicas de control del contador de programa, TMS320C3x.
Mnemónico |
Descripción breve |
IDLE2 |
Para
el contador de programa y elimina la entrada de reloj al sistema digital. |
LOPOWER |
Divide
por 16 la fuente de reloj, H1=H1/16. |
MAXSPEED |
Restaura
el reloj a su velocidad normal. |
Tabla 3-9. Operaciones básicas de control del modo de funcionamiento de bajo consumo, sólo para el DSP TMS320LC31.
Mnemónico |
Descripción breve |
LDFI |
Carga
valor flotante con interbloqueo. |
LDII |
Carga
valor entero con interbloqueo. |
SIGI |
Genera
señales de interbloqueo. |
STFI |
Almacena
valor flotante con interbloqueo. |
STII |
Almacena
valor entero con interbloqueo. |
Tabla 3-10. Operaciones básicas con interbloqueo, TMS320C3x.
Mnemónico |
Descripción breve |
ABSF
|| STF |
Calcula
el valor absoluto de un flotante y almacena otro flotante. |
ABSI
|| STI |
Calcula
el valor absoluto de un entero y almacena otro entero. |
ADDF3
|| STF |
Suma
dos flotantes y almacena otro flotante. |
ADDI3
|| STI |
Suma
dos enteros y almacena otro entero. |
AND3
|| STI |
AND
lógica bit a bit de dos registros y almacena un entero. |
ASH3
|| STI |
Desplazamiento
aritmético y almacena un entero. |
FIX
|| STI |
Convierte
a entero un flotante y almacena otro entero. |
FLOAT
|| STF |
Convierte
a flotante un entero y almacena otro flotante. |
LDF
|| LDF |
Carga
dos flotantes. |
LDF
|| STF |
Carga
un flotante y almacena otro. |
LDI
|| LDI |
Carga
dos enteros. |
LDI
|| STI |
Carga
un entero y almacena otro. |
LSH3
|| STI |
Desplazamiento
lógico y almacena un entero. |
MPYF3
|| ADDF3 |
Multiplica
dos flotantes y suma otros dos flotantes. |
MPYF3
|| STF |
Multiplica
dos flotantes y almacena otro flotante. |
MPYF3
|| SUBF3 |
Multiplica
dos flotantes y resta otros dos flotantes. |
MPYI3
|| ADDI3 |
Multiplica
dos enteros y suma otros dos enteros. |
MPYI3
|| STI |
Multiplica
dos enteros y almacena otro entero. |
MPYI3
|| SUBI3 |
Multiplica
dos enteros y resta otros dos enteros. |
NEGF
|| STF |
Cambia
de signo un flotante y almacena otro flotante. |
NEGI
|| STI |
Cambia
de signo un entero y almacena otro entero. |
NOT
|| STI |
Complemento
a uno de un registro y almacena un entero. |
OR3
|| STI |
OR
lógica bit a bit de dos registros y almacena un entero. |
STF
|| STF |
Almacena
dos flotantes. |
STI
|| STI |
Almacena
dos enteros. |
SUBF3
|| STF |
Resta
dos flotantes y almacena otro flotante. |
SUBI3
|| STI |
Resta
dos enteros y almacena otro entero. |
XOR3
|| STI |
XOR
lógico bit a bit de dos registros y almacena un entero. |
Tabla 3-11. Operaciones en paralelo, TMS320C3x.
En la tabla 3-12 se
describen, por orden alfabético, las instrucciones de que dispone esta familia
de microprocesadores de Texas Instruments. Las instrucciones condicionadas,
disponibles en esta familia de DSPs, precisan de un código que indica el tipo
de condición que debe de cumplirse para que la instrucción se ejecute. En la tabla
3-13 se suministran los códigos y tipos de condición que contempla el
ensamblador de la familia TMS320C3x.
Mnemónico |
Operación |
Descripción |
Instrucciones simples |
||
Tipo de
operando (modos de direccionamiento posibles al operando): Cualquier modo de
direccionamiento es posible (operando src, count), operandos src1,
src2
(direccionamiento a registro o indirecto con desplazamiento 0, 1, IR0 ó IR1),
operando Csrc (direccionamiento a registro o relativo al contador de
programa), modo de direccionamiento a registro (operandos Dreg,
Sreg),
modo de direccionamiento a registro R0-R7 (operando Rn), modo de
direccionamiento a registro AR0-AR7 (operando ARn), modo de
direccionamiento inmediato largo (operando addr). Códigos de condición, cond, tabla 3-13. |
||
ABSF |
|
Calcula el valor absoluto de un número flotante. |
ABSI |
|
Calcula el valor absoluto de un número entero. |
ADDC |
|
Suma enteros con acarreo. |
ADDC3 |
|
Suma enteros con acarreo (tres operandos). |
ADDF |
|
Suma números flotantes. |
ADDF3 |
|
Suma números flotantes (tres operandos). |
ADDI |
|
Suma enteros sin acarreo. |
ADDI3 |
|
Suma enteros sin acarreo (tres operandos). |
AND |
|
AND
lógica. |
AND3 |
|
AND lógica (tres operandos). |
ANDN |
|
AND lógica con complemento. |
ANDN3 |
|
AND lógica con complemento (tres operandos). |
ASH |
if else |
Desplazamiento aritmético (conserva el signo) count veces. Si count>0, desplazamiento a la izquierda, si count<0, a la derecha. |
ASH3 |
if else |
Desplazamiento aritmético (conserva el signo) count veces, de tres operandos. Si count>0, desplazamiento a la izquierda, si count<0, a la derecha. |
Bcond |
if cond es cierto if Csrc es un registro, if Csrc es un valor, else |
Salto condicional. |
BcondD |
if cond es cierto if Csrc es un registro, if Csrc es un valor, else |
Salto condicional con retardo. |
BR |
|
Salto incondicional. |
BRD |
|
Salto incondicional con retraso. |
CALL |
|
Llamada a subrutina. |
CALLcond |
if cond es cierto if Csrc es un registro, if Csrc es un valor, else |
Llamada condicional a subrutina. |
CMPF |
Activa los flags de
operación (Registro ST) como consecuencia de realizar |
Compara valores flotantes. Para realizar la comparación, resta los dos valores pero no almacena el resultado de la operación. |
CMPF3 |
Activa los flags de
operación (Registro ST) como consecuencia de realizar |
Compara valores flotantes. Para realizar la comparación, resta los dos valores pero no almacena el resultado de la operación (tres operandos). |
CMPI |
Activa los flags de
operación (Registro ST) como consecuencia de realizar |
Compara valores enteros. Para realizar la comparación, resta los dos valores pero no almacena el resultado de la operación. |
CMPI3 |
Activa los flags de
operación (Registro ST) como consecuencia de realizar |
Compara valores enteros. Para realizar la comparación, resta los dos valores pero no almacena el resultado de la operación (tres operandos). |
DBcond |
if cond es cierto y if Csrc es un registro, if Csrc es un valor, else |
Decrementa y salta condicionalmente. |
DBcondD |
if cond es cierto y if Csrc es un registro, if Csrc es un valor, else |
Decrementa y salta condicionalmente y con retardo. |
FIX |
|
Convierte un valor flotante en entero. |
FLOAT |
|
Convierte un valor entero en flotante. |
IACK |
Lectura sin utilidad de src |
Reconocimiento de interrupción. |
IDLE |
Idle hasta la próxima interrupción |
Parada de la CPU hasta la llegada de una interrupción. |
LDE |
|
Carga en el exponente de Rn el de otro valor flotante. |
LDF |
|
Carga en Rn un valor flotante. |
LDFcond |
if cond es cierto else no se actualiza Rn |
Carga condicionalmente en Rn un valor flotante. |
LDFI |
|
Pone Termina el acceso y deja |
LDI |
|
Carga un entero. |
LDIcond |
if cond es cierto else no se actualiza Dreg |
Carga un entero condicionalmente. |
LDII |
|
Pone Termina el acceso y deja |
LDM |
|
Carga en la mantisa de Rn la de otro valor flotante |
LSH |
if else |
Desplazamiento lógico (no conserva el signo) count veces. Si count>0, desplazamiento a la izquierda, si count<0, a la derecha. |
LSH3 |
if else |
Desplazamiento aritmético (conserva el signo) count veces, de tres operandos. Si count>0, desplazamiento a la izquierda, si count<0, a la derecha. |
MPYF |
|
Multiplica valores flotantes. |
MPY3 |
|
Multiplica valores flotantes (tres operandos). |
MPYI |
|
Multiplica valores enteros. |
MPYI3 |
|
Multiplica valores enteros (tres operandos). |
NEGB |
|
Entero cambiado de signo menos bit de acarreo. |
NEGF |
|
Flotante cambiado de signo. |
NEGI |
|
Entero cambiado de signo. |
NOP |
Modifica ARn, si se especifica en la instrucción |
Consume un ciclo máquina sin realizar operación alguna. |
NORM |
|
Normaliza un valor flotante. |
NOT |
|
NOT
lógica. |
OR |
|
OR
lógica. |
OR3 |
|
OR lógica (tres operandos). |
POP |
|
Recupera el último entero almacenado en la pila y actualiza (decrementa) el puntero a la pila. |
POPF |
|
Recupera el último flotante almacenado en la pila y actualiza (decrementa) el puntero a la pila. |
PUSH |
|
Actualiza (incrementa) el puntero de pila y almacena un entero en la pila. |
PUSHF |
|
Actualiza (incrementa) el puntero de pila y almacena un flotante en la pila. |
RETIcond |
if cond es cierto o no existe else |
Retorno condicional de la rutina de servicio de una interrupción. |
RETScond |
if cond es cierto o no existe else |
Retorno condicional de una rutina. |
RND |
|
Redondea un valor flotante. |
ROL |
If |
Rotación de 1 bit hacia la izquierda. |
ROLC |
If |
Rotación de 1 bit hacia la izquierda, a través del bit de acarreo. |
ROR |
If |
Rotación de 1 bit hacia la derecha. |
RORC |
If |
Rotación de 1 bit hacia la derecha, a través del bit de acarreo. |
RPTB |
Próximo |
Ejecuta varias veces (RC+1 veces) un bloque de instrucciones. |
RPTS |
Próximo Próximo |
Ejecuta varias veces (RC+1 veces) una instrucción. |
SIGI |
Maneja señales de
Interbloqueo |
Activa XF0,
Espera hasta que no lea Termina poniendo |
STF |
|
Almacena valor flotante. |
STFI |
|
Activa XF0, Espera hasta que no lea Realiza la operación STF, poniendo |
STI |
|
Almacena valor entero. |
STII |
|
Activa XF0, Espera hasta que no lea Realiza la operación STI, poniendo |
SUBB |
|
Operación de resta enteros con borrow de dos operandos. |
SUBB3 |
|
Operación de resta enteros con borrow de tres operandos. |
SUBcond |
if else |
Operación de resta enteros condicionada. |
SUBF |
|
Operación de resta flotantes, de dos operandos. |
SUBF3 |
|
Operación de resta flotantes, de tres operandos. |
SUBI |
|
Operación de resta enteros, de dos operandos. |
SUBI3 |
|
Operación de resta enteros, de tres operandos. |
SUBRB |
|
Operación de resta de entero cambiado de signo con borrow. |
SUBRF |
|
Operación de resta de flotante cambiado de signo. |
SUBRI |
|
Operación de resta de entero cambiado de signo. |
SWI |
Emula la secuencia de eventos de las interrupciones |
Emulación de las Interrupciones. El fabricante no dice como funciona esta instrucción y prohibe su uso. |
TRAPcond |
if cond es cierto o no existe Vector Trap else |
Interrupción software de tipo TRAP. No necesita
que se encuentre el bit GIE del registro ST habilitado para que se produzca
la interrupción software. |
TSTB |
|
Comprueba un campo de bits, dos operandos. |
TSTB3 |
|
Comprueba un campo de bits, tres operandos. |
XOR |
|
XOR lógico (dos operandos). |
XOR3 |
|
XOR lógico (tres operandos). |
Instrucciones en paralelo |
||
Tipo de
operando (modos de direccionamiento posibles al operando): Cualquier modo de direccionamiento a registro R0-R7 (operandos src1, src3, dst1), direccionamiento a registro R0 ó R1 (operando op3), direccionamiento a registro R2 ó R3 (operando op6), modo de direccionamiento indirecto con desplazamiento 0, 1, IR0 ó IR1 (operandos src2, src4, dst2), operandos op1, op2, op3 y op4 (dos de ellos deben accederse empleando direccionamiento a registro y los otros dos deben accederse empleando direccionamiento indirecto). |
||
ABSF || STF |
|
Calcula el valor absoluto de un número flotante. En paralelo, almacena valor flotante. |
ABSI || STI |
|
Calcula el valor absoluto de un número entero. En paralelo, almacena valor entero. |
ADDF3 || STF |
|
Suma dos flotantes. En paralelo, almacena valor flotante. |
ADDI3 || STI |
|
Suma dos enteros. En paralelo, almacena valor entero. |
AND3 || STI |
|
AND lógico bit a bit entre dos registros. En paralelo, almacena valor entero. |
ASH3 || STI |
if else |
Desplazamiento aritmético (conserva el signo) count veces, de tres operandos. Si count>0, desplazamiento a la izquierda, si count<0, a la derecha. En paralelo, almacena valor entero. |
FIX || STI |
|
Convierte un valor entero en flotante. En paralelo, almacena valor entero. |
FLOAT || STF |
|
Convierte un valor flotante en entero. En paralelo, almacena valor flotante. |
LDF || LDF |
|
Carga dos flotantes. |
LDF || STF |
|
Carga un flotante. En paralelo almacena otro flotante. |
LDI || LDI |
|
Carga dos enteros. |
LDI || STI |
|
Carga un entero. En paralelo, almacena otro entero. |
LSH3 || STI |
if else |
Desplazamiento lógico (no conserva el signo) count veces, de tres operandos. Si count>0, desplazamiento a la izquierda, si count<0, a la derecha. En paralelo, almacena valor entero. |
MPYF3 || ADDF3 |
|
Multiplica dos flotantes. En paralelo suma otros dos flotantes. |
MPYF3 || STF |
|
Multiplica dos flotantes. En paralelo almacena otro flotante. |
MPYI3 || STI |
|
Multiplica dos enteros. En paralelo almacena otro entero. |
MPYF3 || SUBF3 |
|
Multiplica dos flotantes. En paralelo resta otros dos flotantes. |
MPYI3 || ADDI3 |
|
Multiplica dos enteros. En paralelo suma otros dos enteros. |
MPYI3 || SUBI3 |
|
Multiplica dos enteros. En paralelo resta otros dos enteros. |
NEGF || STF |
|
Cambia de signo un flotante. En paralelo, almacena otro flotante. |
NEGI || STI |
|
Cambia de signo un entero. En paralelo, almacena otro entero. |
NOT || STI |
|
Complemento a uno de un registro. En paralelo, almacena un entero. |
OR3 || STI |
|
OR bit a bit de dos registros. En paralelo, almacena un entero. |
STF || STF |
|
Almacena dos flotantes. |
STI || STI |
|
Almacena dos enteros. |
SUBF3 || STF |
|
Resta dos flotantes. En paralelo almacena otro flotante. |
SUBI3 || STI |
|
Resta dos enteros. En paralelo almacena otro entero. |
XOR3 || STI |
|
XOR bit a bit de dos registros. En paralelo almacena otro entero. |
Tabla 3-12. Sumario de Instrucciones, DSP TMS320C3x.
cond |
Descripción |
Compara incondicionalmente |
|
U |
Sin
condición. |
Compara sin signo |
|
LO |
Si
es más pequeño que (C=1). |
LS |
Si
es más pequeño o igual que (C=1 ó Z=1). |
HI |
Si
es más grande que (C=0 y Z=0). |
HS |
Si
es más grande o igual que (C=0). |
EQ |
Si
es igual que (Z=1). |
NE |
Si
no es igual que (Z=0). |
Compara con signo |
|
LT |
Si
es menor que (N=1). |
LE |
Si
es menor o igual que (N=1 ó Z=1). |
GT |
Si
es mayor que (N=0 y Z=0). |
GE |
Si
es mayor o igual que (N=0). |
EQ |
Si
es igual que (Z=1). |
NE |
Si
no es igual que (Z=0). |
Compara con cero |
|
Z |
Si
es cero (Z=1). |
NZ |
Si
no es cero (Z=0). |
P |
Si
es positivo (N=0 y Z=0). |
N |
Si
es negativo (N=1). |
NN |
Si
no es negativo (N=0). |
Compara con otros códigos de condición del registro ST de la CPU |
|
NV |
Si
no se ha producido overflow (V=0). |
V |
Si
se ha producido overflow (V=1). |
NUF |
Si
no se ha producido underflow (UF=0). |
UF |
Si
se ha producido underflow (UF=1). |
NC |
Si
no se ha producido el bit de acarreo (C=0). |
C |
Si
se ha producido acarreo (C=1). |
NLV |
Si
no se ha producido nunca overflow (LV=0). |
LV |
Si
se ha producido alguna vez overflow (LV=1). |
NLUF |
Si
no se ha producido nunca underflow en las operaciones con flotantes (LUF=0). |
LUF |
Si
se ha producido alguna vez underflow en las operaciones con flotantes
(LUF=1). |
ZUF |
Si
es cero o es underflow de flotantes (Z=1 ó UF=1). |
Tabla 3-13. Códigos de condición, TMS320C3x.