Win DLXV
Win DLXV
Win DLXV
Manual de usuario
Septiembre, 2005
ndice general
Introduccin 11
Usuarios de este manual . . . . . . . . . . . . . . . . . . . . . . . . 11
Requisitos mnimos . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Instalacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Archivos del programa . . . . . . . . . . . . . . . . . . . . . . . . . 13
2. Ventanas 19
2.1. Cdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2. Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3. Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.4. Cauce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.5. Ciclos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.6. Estadsticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.7. Ventana Entrada/Salida . . . . . . . . . . . . . . . . . . . . . 28
3. Mens 31
3.1. Men Ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.1.1. Cargar un programa en el simulador . . . . . . . . . . 32
3.1.2. Recargar un programa en el simulador . . . . . . . . 34
3.1.3. Reinicializar el procesador DLXV . . . . . . . . . . . . 34
3.1.4. Reinicializar el procesador DLXV sin cargar ningn
programa . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1.5. Salir de WinDLXV . . . . . . . . . . . . . . . . . . . . 35
3.2. Men Ejecutar . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
ndice general
4. Escritura de un programa 59
4
ndice general
6. Ensamblador DLXV 71
6.1. Directivas del ensamblador . . . . . . . . . . . . . . . . . . . 71
6.2. Sintaxis del lenguaje ensamblador . . . . . . . . . . . . . . . 76
6.3. Instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.3.1. Instrucciones de transferencias de datos . . . . . . . . 76
6.3.2. Instrucciones aritmticas/lgicas . . . . . . . . . . . . 77
6.3.3. Instrucciones de control de flujo . . . . . . . . . . . . 77
6.3.4. Instrucciones de punto flotante . . . . . . . . . . . . . 78
6.3.5. Instrucciones vectoriales . . . . . . . . . . . . . . . . . 78
6.4. Formato de las instrucciones . . . . . . . . . . . . . . . . . . . 79
8. Traps 121
8.1. Fin de la ejecucin del programa . . . . . . . . . . . . . . . . 121
8.2. Apertura de un fichero . . . . . . . . . . . . . . . . . . . . . . 122
8.3. Cierre de un fichero . . . . . . . . . . . . . . . . . . . . . . . . 123
8.4. Lectura de un fichero o de la entrada estndar . . . . . . . . 124
8.5. Escritura de un fichero . . . . . . . . . . . . . . . . . . . . . . 125
8.6. Escritura formateada por la salida estndar . . . . . . . . . . 126
5
ndice de figuras
8
ndice de tablas
Requisitos mnimos
WinDLXV debe instalarse en un ordenador con la siguiente configura-
cin mnima:
64 Mb de memoria RAM.
Unidad de CD.
Instalacin
Para instalar el programa WinDLXV, se siguen los siguientes pasos:
12
Introduccin
WinDLXV.exe
Archivos de ejemplo
En la carpeta programas se incluye una serie de ejemplos de progra-
mas escritos en ensamblador para cargar en el simulador WinDLXV.
Archivos de ayuda
13
Captulo 1
16
Conocer el entorno del simulador
Todos los iconos cuentan con una etiqueta de ayuda con el nombre de
la funcin a la que representan.
17
Conocer el entorno del simulador
Memoria de cdigo.
Memoria de datos.
Cauce.
Estadsticas.
18
Captulo 2
Ventanas
2.1. Cdigo
En la ventana Cdigo son visualizadas las instrucciones DLX/DLXV
(seccin .text) que hay almacenadas en memoria junto con sus direccio-
nes. Todas las instrucciones son de 32 bits y deben estar alineadas.
Las instrucciones son mostradas en dos formatos: ensambladas, en he-
xadecimal, y desensambladas, con los comentarios, etiquetas, etc., que se
aadieron en el fichero fuente del programa cargado. La Figura 2.1 mues-
tra el contenido de esta ventana despus que se ha cargado un programa.
2.2. Datos
20
Ventanas
2.3. Registros
Desde la ventana Registros se puede visualizar el contenido de todos los
registros del procesador DLXV como muestra la Figura 2.4. Los registros
disponibles son:
21
Ventanas
Registros vectoriales: son 8 registros (V0, V1, ..., V7), donde cada
registro contiene 64 dobles palabras. Se visualizan en formato punto
flotante doble precisin.
22
Ventanas
2.4. Cauce
La ventana Cauce muestra el diagrama de las etapas del cauce del pro-
cesador DLXV como se muestra en la Figura 2.6. Estas etapas son:
23
Ventanas
Cauce vectorial.
24
Ventanas
25
Ventanas
2.5. Ciclos
La ventana Ciclos visualiza las operaciones que se realizan en cada ciclo
de reloj y en cada etapa. Como puede apreciarse en la Figura 2.7, cada
columna representa el estado del cauce en un ciclo de reloj, y la mostrada
en color gris indica el siguiente ciclo de reloj a ejecutar.
26
Ventanas
2.6. Estadsticas
La ventana Estadsticas visualiza estadsticas sobre la simulacin que
est siendo realizada. En la Figura 2.8 se muestra como los datos son orga-
nizados en los siguientes grupos:
27
Ventanas
28
Ventanas
29
Captulo 3
Mens
32
Mens
33
Mens
34
Mens
35
Mens
36
Mens
37
Mens
1. Memoria:
38
Mens
5. Registros vectoriales:
39
Mens
40
Mens
41
Mens
42
Mens
43
Mens
44
Mens
3.4.4. Ensamblar
La funcin Memoria . Ensamblar permite ensamblar una instruccin.
Al ejecutarse la funcin, se muestra una caja de dilogo como la de la
Figura 3.12.
Con esta funcin de men se permite ensamblar una instruccin y ac-
tualizar una direccin de cdigo con este nuevo valor. Si no se especifica
45
Mens
46
Mens
47
Mens
48
Mens
49
Mens
50
Mens
51
Mens
3.6.2. Editor
La funcin Ficheros . Editar permite acceder a un editor desde el que se
pueda crear o modificar el programa a simular.
52
Mens
53
Mens
54
Mens
3.8. Men ?
El men Ayuda contiene una completa ayuda del simulador WinDLXV,
as como el mensaje de copyright del programa:
55
Mens
56
Mens
57
Captulo 4
Escritura de un programa
Caractersticas de .text
La seccin .text es obligatoria en todos los programas, contiene el
conjunto de instrucciones del programa. Los elementos siguientes se guar-
dan en el segmento de texto.
Tiene las siguientes caractersticas:
Si no se proporciona direccin con la directiva .text, esta seccin
ser cargada en la direccin por defecto definida en WinDLXV, la
cual podr ser modificada por el usuario a travs de la funcin de
men Configuracin . Arquitectura.
Escritura de un programa
Las etiquetas van seguidas por dos puntos (:). Una etiqueta vlida es
una secuencia de caracteres alfanumricos.
Caractersticas de .data
La seccin .data contiene la declaracin de las variables del progra-
ma. Los elementos siguientes se guardan en el segmento de datos. Esta
seccin es opcional, aunque normalmente necesaria.
Si no se proporciona direccin con la directiva .data, esta seccin ser
cargada en la direccin por defecto definida en WinDLXV, la cual podr ser
modificada por el usuario a travs de la funcin de men Configuracin .
Arquitectura.
La declaracin de variables del programa se ajusta a las siguientes re-
glas:
60
Escritura de un programa
61
Captulo 5
;*********************************
;*** Suma de dos nmeros C=A+B ***
Simulacin paso a paso
;*********************************
.data
A: .word 2
B: .word 8
C: .word 0
.text
main: lw r1,A
lw r2,B
add r3,r2,r1
sw C,r3
trap 6
Escribimos este cdigo en el rea de edicin como muestra la Figura 5.1.
64
Simulacin paso a paso
65
Simulacin paso a paso
66
Simulacin paso a paso
Ciclo 4 Presionando F7 de nuevo, cada etapa del cauce escalar est ocu-
pada con una instruccin. Como est activado el adelanto de resultados,
el valor de R1 est ya disponible desde la etapa MEM, se muestra en la
ventana Registros con el color caracterstico de esta etapa.
67
Simulacin paso a paso
68
Simulacin paso a paso
69
Simulacin paso a paso
70
Captulo 6
Ensamblador DLXV
.align n
Alinea el siguiente dato sobre un lmite de 2n byte.
A continuacin se muestra un ejemplo del uso de esta directiva:
.byte 3
.align 2
.word 10
Ensamblador DLXV
72
Ensamblador DLXV
.org 100
.byte 20, 0x20
Como resultado se cargarn los bytes con valores hexadecimales 0x14 (20
en decimal) y 0x20 en las posiciones de memoria 100 y 101, respectivamen-
te.
.data [direccin]
Los elementos siguientes son almacenados en el segmento de datos. Si
se proporciona una direccin, los elementos sern cargados comenzando
en esa direccin, en otro caso lo hace a partir de la direccin de defecto con-
figurada en WinDLXV (ver funcin de men Configuracin . Arquitectura).
A continuacin se muestra un ejemplo del uso de esta directiva:
.data 0x100
.byte 20, 0x20
.org 100
.double 1.0, 3.0
Como resultado se cargarn los nmeros de punto flotante 1.0 y 3.0 en do-
ble precisin (8 bytes) a partir de las posiciones 100 y 108, respectivamente.
73
Ensamblador DLXV
.org 100
.float 1.0, 3.0
.org direccin
.org 140
.byte 230,10,7
.space n
.org 140
.space 12
74
Ensamblador DLXV
.text [direccin]
.text 0x800
addv v1,v2,v7
.org 0
path: .asciiz C:\Ejemplos\ejemplo1.s
.org 100
.word 230, 0x1040, path
75
Ensamblador DLXV
Cada uno de estos campos debe ir separado por uno o varios blancos o
tabuladores. A continuacin se describe cada uno de ellos:
6.3. Instrucciones
Clasificaremos las instrucciones en grupos de acuerdo a su finalidad.
Estas instrucciones se describirn de forma exhaustiva en el captulo 7.
76
Ensamblador DLXV
77
Ensamblador DLXV
78
Ensamblador DLXV
I n s tr u c c i n tip o -I
6 5 5 1 6
C d ig o
r s1 r d I n m e d ia to
d e o p .
C a r g a y a lm a c e n a m ie n to d e b y te s , p a la b r a s , m e d ia s p a la b r a s
I n s tr u c c io n e s d e s a lto c o n d ic io n a l
B ifu r c a c i n a r e g is tr o , b ifu r c a c i n y e n la c e a r e g is tr o
I n s tr u c c i n tip o -R
6 5 5 5 1 1
C d ig o
r s1 r s2 r d fu n c
d e o p .
A r itm tic o /L g ic a s
I n s tr u c c i n tip o -J
6 2 6
C d ig o
D e s p la z a m ie n to a a d id o a l P C
d e o p .
B ifu r c a c i n y b ifu r c a c i n y e n la c e
T r a p y R F E
79
Ensamblador DLXV
80
Captulo 7
Sintaxis:
lb rd,desp(rs1)
lb rd,desp ;rs1 = r0
Descripcin:
La instruccin LB lee 1 byte del sistema de memoria y lo carga en el
registro destino rd. La direccin de memoria se obtiene sumando a la di-
reccin base del registro rs1 el valor inmediato de 16 bits extendido con
su signo. El byte se carga en la parte inferior del registro rd, rellenando la
parte superior con la extensin del signo del valor cargado.
Instruccin LBU
Operacin:
Juego de instrucciones del DLXV
Sintaxis:
lbu rd,desp(rs1)
lbu rd,desp ;rs1 = r0
Descripcin:
La instruccin LBU lee 1 byte del sistema de memoria y lo carga en
el registro destino rd. La direccin de memoria se obtiene sumando a la
direccin base del registro rs1 el valor inmediato de 16 bits extendido con
su signo. El byte se carga en la parte inferior del registro rd, rellenando la
parte superior con ceros.
Instruccin SB
Operacin:
addr ((desp16 )16 ## desp16...31 ) + GP R[rs1]
M [addr] GP R[rd]24...31
Sintaxis:
sb desp(rs1),rd
sb desp,rd ;rs1 = r0
Descripcin:
La instruccin SB escribe el byte (8 bits) menos significativo del registro
especificado en rd en el sistema de memoria. La direccin de memoria se
obtiene sumando a la direccin base del registro rs1 el valor inmediato de
16 bits extendido con su signo.
Instruccin LH
Operacin:
addr ((desp16 )16 ## desp16...31 ) + GP R[rs1]
mem M [addr]
GP R[rd] (mem0 )16 ## mem16...31
Sintaxis:
82
Juego de instrucciones del DLXV
lh rd,desp(rs1)
lh rd,desp ;rs1 = r0
Descripcin:
La instruccin LH lee 2 bytes del sistema de memoria y los carga en el
registro destino rd. La direccin de memoria se obtiene sumando a la di-
reccin base del registro rs1 el valor inmediato de 16 bits extendido con su
signo. Los 2 bytes se cargan en la parte inferior del registro rd, rellenando
la parte superior con la extensin del signo del valor cargado.
Instruccin LHU
Operacin:
addr ((desp16 )16 ## desp16...31 ) + GP R[rs1]
mem M [addr]
GP R[rd] (0)16 ## mem16...31
Sintaxis:
lhu rd,desp(rs1)
lhu rd,desp ;rs1 = r0
Descripcin:
La instruccin LHU lee 2 bytes del sistema de memoria y los carga en el
registro destino rd. La direccin de memoria se obtiene sumando a la di-
reccin base del registro rs1 el valor inmediato de 16 bits extendido con su
signo. Los 2 bytes se cargan en la parte inferior del registro rd, rellenando
la parte superior con ceros.
Instruccin SH
Operacin:
addr ((desp16 )16 ## desp16...31 ) + GP R[rs1]
M [addr] GP R[rd]16...31
Sintaxis:
sh desp(rs1),rd
sh desp,rd ;rs1 = r0
83
Juego de instrucciones del DLXV
Descripcin:
La instruccin SH escribe los 2 bytes menos significativos del registro
especificado en rd en el sistema de memoria. La direccin de memoria se
obtiene sumando a la direccin base del registro rs1 el valor inmediato de
16 bits extendido con su signo.
Instruccin LW
Operacin:
addr ((desp16 )16 ## desp16...31 ) + GP R[rs1]
mem M [addr]
GP R[rd] mem0...31
Sintaxis:
lw rd,desp(rs1)
lw rd,desp ;rs1 = r0
Descripcin:
La instruccin LW lee 1 palabra (4 bytes) del sistema de memoria y la
carga en el registro destino rd. La direccin de memoria se obtiene su-
mando a la direccin base del registro rs1 el valor inmediato de 16 bits
extendido con su signo.
Instruccin SW
Operacin:
addr ((desp16 )16 ## desp16...31 ) + GP R[rs1]
M [addr] GP R[rd]0...31
Sintaxis:
sw desp(rs1),rd
sw desp,rd ;rs1 = r0
Descripcin:
La instruccin SW escribe el contenido del registro especificado en rd
en el sistema de memoria. La direccin de memoria se obtiene sumando
a la direccin base del registro rs1 el valor inmediato de 16 bits extendido
con su signo.
84
Juego de instrucciones del DLXV
Instruccin LF
Operacin:
addr ((desp16 )16 ## desp16...31 ) + GP R[rs1]
mem M [addr]
F P R[f d] mem0...31
Sintaxis:
lf fd,desp(rs1)
lf fd,desp ;rs1 = r0
Descripcin:
La instruccin LF carga un punto flotante en simple precisin desde el
sistema de memoria al registro de punto flotante destino fd. La direccin
de memoria se obtiene sumando a la direccin base del registro rs1 el valor
inmediato de 16 bits extendido con su signo.
Instruccin LD
Operacin:
addr ((desp16 )16 ## desp16...31 ) + GP R[rs1]
mem M [addr]
F P R[f d + 1] ## F P R[f d] mem0...63
Sintaxis:
ld fd,desp(rs1)
ld fd,desp ;rs1 = r0
Descripcin:
La instruccin LD carga un punto flotante en doble precisin desde el
sistema de memoria a los registros de punto flotante destino fd y fd+1. La
direccin de memoria se obtiene sumando a la direccin base del registro
rs1 el valor inmediato de 16 bits extendido con su signo.
85
Juego de instrucciones del DLXV
Instruccin SF
Operacin:
addr ((desp16 )16 ## desp16...31 ) + GP R[rs1]
M [addr] F P R[f d]0...31
Sintaxis:
sf desp(rs1),fd
sf desp,fd ;rs1 = r0
Descripcin:
La instruccin SF escribe el punto flotante en simple precisin desde
el registro de punto flotante fd al sistema de memoria. La direccin de
memoria se obtiene sumando a la direccin base del registro rs1 el valor
inmediato de 16 bits extendido con su signo.
Instruccin SD
Operacin:
addr ((desp16 )16 ## desp16...31 ) + GP R[rs1]
M [addr] F P R[f d + 1]0...31 ## F P R[f d]0...31
Sintaxis:
sd desp(rs1),fd
sd desp,fd ;rs1 = r0
Descripcin:
La instruccin SD escribe el punto flotante en doble precisin desde los
registros de punto flotante fd y fd+1 al sistema de memoria. La direccin
de memoria se obtiene sumando a la direccin base del registro rs1 el valor
inmediato de 16 bits extendido con su signo.
Instruccin MOVI2S
Operacin:
vlr GP R[rs1]
Sintaxis:
movi2s vlr,rs1
86
Juego de instrucciones del DLXV
Descripcin:
La instruccin MOVI 2 S transfiere el contenido del registro rs1 al regis-
tro de longitud vectorial (VLR).
Instruccin MOVS2I
Operacin:
GP R[rs1] vlr
Sintaxis:
movs2i rd,vlr
Descripcin:
La instruccin MOVS 2 I transfiere el contenido del registro de longitud
vectorial (VLR) al registro rd.
Instruccin MOVF
Operacin:
F P R[f d] F P R[f s1]
Sintaxis:
movf fd,fs1
Descripcin:
La instruccin MOVF copia el contenido del registro en punto flotante
fs1 en el registro de punto flotante fd.
Instruccin MOVD
Operacin:
F P R[f d + 1] ## F P R[f d] F P R[f s1 + 1] ## F P R[f s1]
Sintaxis:
movd fd,fs1
Descripcin:
La instruccin MOVD copia el contenido del par de registros de punto
flotante fs1 y fs1+1 en el par de registros de punto flotante fd y fd+1.
87
Juego de instrucciones del DLXV
Instruccin MOVFP2I
Operacin:
GP R[rd] F P R[f s1]
Sintaxis:
movfp2i rd,fs1
Descripcin:
La instruccin MOVFP 2 I transfiere 32 bits del registro en punto flotante
fs1 en el registro GPR rd.
Instruccin MOVI2FP
Operacin:
F P R[f d] GP R[rs1]
Sintaxis:
movi2fp fd,rs1
Descripcin:
La instruccin MOVI 2 FP transfiere 32 bits del registro GPR rs1 en el
registro de punto flotante fd.
Instruccin MOVF2S
Operacin:
vm F P R[f s1 + 1] ## F P R[f s1]
Sintaxis:
movf2s vm,fs1
Descripcin:
La instruccin MOVF 2 S transfiere el contenido de los registros de punto
flotante fs1 y fs1+1 al registro de mscara vectorial.
88
Juego de instrucciones del DLXV
Instruccin MOVS2F
Operacin:
F P R[f d + 1] ## F P R[f d] vm
Sintaxis:
movs2f fd,vm
Descripcin:
La instruccin MOVS 2 F transfiere el contenido del registro de mscara
vectorial a los registros de punto flotante fd y fd+1.
Sintaxis:
add rd,rs1,rs2
Descripcin:
La instruccin ADD suma el contenido del registro rs1 con el contenido
del registro rs2 y almacena el resultado en rd. Es siempre una suma con
signo.
Instruccin ADDI
Operacin:
GP R[rd] GP R[rs1] + ((imm16 )16 ## imm16...31 )
Sintaxis:
addi rd,rs1,imm
Descripcin:
La instruccin ADDI suma el contenido del registro rs1 con el valor
inmediato con signo imm y almacena el resultado en rd. Es siempre una
suma con signo.
89
Juego de instrucciones del DLXV
Instruccin ADDU
Operacin:
GP R[rd] GP R[rs1] + GP R[rs2]
Sintaxis:
addu rd,rs1,rs2
Descripcin:
La instruccin ADDU suma el contenido del registro rs1 con el conteni-
do del registro rs2 y almacena el resultado en rd. Es siempre una suma sin
signo.
Instruccin ADDUI
Operacin:
GP R[rd] GP R[rs1] + (016 ## imm16...31 )
Sintaxis:
addui rd,rs1,imm
Descripcin:
La instruccin ADDUI suma el contenido del registro rs1 con el valor
inmediato sin signo imm y almacena el resultado en rd. Es siempre una
suma sin signo.
Instruccin SUB
Operacin:
GP R[rd] GP R[rs1] GP R[rs2]
Sintaxis:
sub rd,rs1,rs2
Descripcin:
La instruccin SUB resta el contenido del registro rs1 con el contenido
del registro rs2 y almacena el resultado en rd. Es siempre una resta con
signo.
90
Juego de instrucciones del DLXV
Instruccin SUBI
Operacin:
GP R[rd] GP R[rs1] ((imm16 )16 ## imm16...31 )
Sintaxis:
subi rd,rs1,imm
Descripcin:
La instruccin SUBI resta el contenido del registro rs1 con el valor in-
mediato con signo imm y almacena el resultado en rd. Es siempre una
resta con signo.
Instruccin SUBU
Operacin:
GP R[rd] GP R[rs1] GP R[rs2]
Sintaxis:
subu rd,rs1,rs2
Descripcin:
La instruccin SUBU resta el contenido del registro rs1 con el contenido
del registro rs2 y almacena el resultado en rd. Es siempre una resta sin
signo.
Instruccin SUBUI
Operacin:
GP R[rd] GP R[rs1] (016 ## imm16...31 )
Sintaxis:
subui rd,rs1,imm
Descripcin:
La instruccin SUBUI resta el contenido del registro rs1 con el valor
inmediato sin signo imm y almacena el resultado en rd. Es siempre una
resta sin signo.
91
Juego de instrucciones del DLXV
Instruccin MULT
Operacin:
GP R[rd] GP R[rs1] GP R[rs2]
Sintaxis:
mult rd,rs1,rs2
Descripcin:
La instruccin MULT multiplica el contenido del registro rs1 con el con-
tenido del registro rs2 y almacena el resultado en rd. Es siempre una mul-
tiplicacin con signo. Si el resultado de la multiplicacin no puede repre-
sentarse como un entero de 32 bits se produce una excepcin de overflow.
Instruccin MULTU
Operacin:
GP R[rd] GP R[rs1] GP R[rs2]
Sintaxis:
multu rd,rs1,rs2
Descripcin:
La instruccin MULTU multiplica el contenido del registro rs1 con el
contenido del registro rs2 y almacena el resultado en rd. Es siempre una
multiplicacin sin signo. Si el resultado de la multiplicacin no puede re-
presentarse como un entero de 32 bits se produce una excepcin de over-
flow.
Instruccin DIV
Operacin:
GP R[rd] GP R[rs1] GP R[rs2]
Sintaxis:
div rd,rs1,rs2
Descripcin:
La instruccin DIV divide el contenido del registro rs1 entre el conteni-
do del registro rs2 y almacena el resultado en rd. Es siempre una divisin
con signo. Si el contenido de rs2 es cero provoca una excepcin de divisin
entera por cero.
92
Juego de instrucciones del DLXV
Instruccin DIVU
Operacin:
GP R[rd] GP R[rs1] GP R[rs2]
Sintaxis:
divu rd,rs1,rs2
Descripcin:
La instruccin DIVU divide el contenido del registro rs1 entre el conte-
nido del registro rs2 y almacena el resultado en rd. Es siempre una divisin
sin signo. Si el contenido de rs2 es cero provoca una excepcin de divisin
entera por cero.
Instruccin AND
Operacin:
GP R[rd] GP R[rs1] and GP R[rs2]
Sintaxis:
and rd,rs1,rs2
Descripcin:
La instruccin AND hace la operacin lgica and del registro rs1 con el
registro rs2 y el resultado lo almacena en el registro rd.
Instruccin ANDI
Operacin:
GP R[rd] (016 ## imm16...31 ) and GP R[rs1]
Sintaxis:
andi rd,rs1,imm
Descripcin:
La instruccin ANDI extiende el valor inmediato de 16 bits hasta 32 con
ceros y realiza la operacin lgica and con el registro rs1. El resultado es
almacenado en el registro rd.
93
Juego de instrucciones del DLXV
Instruccin OR
Operacin:
GP R[rd] GP R[rs1] or GP R[rs2]
Sintaxis:
or rd,rs1,rs2
Descripcin:
La instruccin OR hace la operacin lgica or del registro rs1 con el
registro rs2 y el resultado lo almacena en el registro rd.
Instruccin ORI
Operacin:
GP R[rd] (016 ## imm16...31 ) or GP R[rs1
Sintaxis:
ori rd,rs1,imm
Descripcin:
La instruccin ORI extiende el valor inmediato de 16 bits hasta 32 con
ceros y realiza la operacin lgica or con el registro rs1. El resultado es
almacenado en el registro rd.
Instruccin XOR
Operacin:
GP R[rd] GP R[rs1] xor GP R[rs2]
Sintaxis:
xor rd,rs1,rs2
Descripcin:
La instruccin XOR hace la operacin lgica xor del registro rs1 con el
registro rs2 y el resultado lo almacena en el registro rd.
94
Juego de instrucciones del DLXV
Instruccin XORI
Operacin:
GP R[rd] GP R[rs1] xor (016 ## imm16...31 )
Sintaxis:
xori rd,rs1,imm
Descripcin:
La instruccin XORI extiende el valor inmediato de 16 bits hasta 32 con
ceros y realiza la operacin lgica xor con el registro rs1. El resultado es
almacenado en el registro rd.
Instruccin LHI
Operacin:
GP R[rd] imm16...31 ## 016
Sintaxis:
lhi rd,imm
Descripcin:
La instruccin LHI carga el valor inmediato de 16 bits en la mitad su-
perior del registro rd, mientras pone a cero la mitad inferior de rd.
Instruccin SLL
Operacin:
desp GP R[rs2]27...31
GP R[rd] GP R[rs1]desp...31 ## 0desp
Sintaxis:
sll rd,rs1,rs2
Descripcin:
La instruccin SLL realiza el desplazamiento lgico hacia la izquierda
del registro rs1 el nmero de bits indicado en los 5 bits menos significati-
vos del registro rs2, insertando ceros en los bits vaciados.
95
Juego de instrucciones del DLXV
Instruccin SRL
Operacin:
desp GP R[rs2]27...31
GP R[rd] 0desp ## GP R[rs1]0...(31desp)
Sintaxis:
srl rd,rs1,rs2
Descripcin:
La instruccin SRL realiza el desplazamiento lgico hacia la derecha del
registro rs1 el nmero de bits indicado en los 5 bits menos significativos
del registro rs2, insertando ceros en los bits vaciados.
Instruccin SRA
Operacin:
desp GP R[rs2]27...31
GP R[rd] (GP R[rs1]0 )desp ## GP R[rs1]0...(31desp)
Sintaxis:
sra rd,rs1,rs2
Descripcin:
La instruccin SRA realiza el desplazamiento aritmtico hacia la dere-
cha del registro rs1 el nmero de bits indicado en los 5 bits menos signifi-
cativos del registro rs2, duplicando el bit de signo en los bits vaciados.
Instruccin SLLI
Operacin:
desp imm27...31
GP R[rd] GP R[rs1]desp...31 ## 0desp
Sintaxis:
slli rd,rs1,imm
Descripcin:
La instruccin SLLI realiza el desplazamiento lgico hacia la izquierda
del registro rs1 el nmero de bits indicado en los 5 bits menos significati-
vos del valor inmediato imm, insertando ceros en los bits vaciados.
96
Juego de instrucciones del DLXV
Instruccin SRLI
Operacin:
desp imm27...31
GP R[rd] 0desp ## GP R[rs1]0...(31desp)
Sintaxis:
srli rd,rs1,rs2
Descripcin:
La instruccin SRLI realiza el desplazamiento lgico hacia la derecha
del registro rs1 el nmero de bits indicado en los 5 bits menos significati-
vos del valor inmediato imm, insertando ceros en los bits vaciados.
Instruccin SRAI
Operacin:
desp imm27...31
GP R[rd] (GP R[rs1]0 )desp ## GP R[rs1]0...(31desp)
Sintaxis:
srai rd,rs1,rs2
Descripcin:
La instruccin SRAI realiza el desplazamiento aritmtico hacia la dere-
cha del registro rs1 el nmero de bits indicado en los 5 bits menos signi-
ficativos del valor inmediato imm, duplicando el bit de signo en los bits
vaciados.
Sintaxis:
97
Juego de instrucciones del DLXV
s__ rd,rs1,rs2
Descripcin:
La instruccin S __ compara los registros rs1 y rs2 segn la condicin
LT, GT, LE, GE, EQ, NE. Si la condicin es cierta coloca un 1 en el registro
rd, en otro caso coloca el valor 0. Las siguientes condiciones son posibles:
LT: menor (rs1<rs2)
GT: mayor (rs1>rs2)
LE: menor o igual (rs1rs2)
GE: mayor o igual (rs1rs2)
EQ: igual (rs1=rs2)
NE: no igual (rs16=rs2)
98
Juego de instrucciones del DLXV
Sintaxis:
beqz rs1,dest
Descripcin:
La instruccin BEQZ examina el registro rs1. Si es igual a cero efecta
el salto. Para calcular la direccin de destino el desplazamiento inmediato
de 16 bits indicado en dest es extendido con signo y sumado a la direccin
de la instruccin siguiente.
Instruccin BNEZ
Operacin:
si (GP R[rs1] 6= 0)
P C (P C + 4) + ((dest16 )16 ## dest16...31 )
Sintaxis:
bnez rs1,dest
Descripcin:
La instruccin BNEZ examina el registro rs1. Si es distinto de cero efec-
ta el salto. Para calcular la direccin de destino el desplazamiento inme-
diato de 16 bits indicado en dest es extendido con signo y sumado a la
direccin de la instruccin siguiente.
Instruccin BFPT
Operacin:
si (F P SR = true)
P C (P C + 4) + ((dest16 )16 ## dest16...31 )
Sintaxis:
99
Juego de instrucciones del DLXV
bfpt dest
Descripcin:
La instruccin BFPT examina el registro de bit de estado de punto flo-
tante. Si es cierto (true) efecta el salto. Para calcular la direccin de destino
el desplazamiento inmediato de 16 bits indicado en dest es extendido con
signo y sumado a la direccin de la instruccin siguiente.
Instruccin BFPF
Operacin:
si (F P SR = f alse)
P C (P C + 4) + ((dest16 )16 ## dest16...31 )
Sintaxis:
bfpf rs1,dest
Descripcin:
La instruccin BFPF examina el registro de bit de estado de punto flo-
tante. Si no es cierto (false) efecta el salto. Para calcular la direccin de
destino el desplazamiento inmediato de 16 bits indicado en dest es exten-
dido con signo y sumado a la direccin de la instruccin siguiente.
Instruccin J
Operacin:
P C (P C + 4) + ((dest0 )5 ## dest5...31 )
Sintaxis:
j dest
Descripcin:
La instruccin J provoca un salto incondicional. Para calcular la direc-
cin de destino el desplazamiento inmediato de 26 bits indicado en dest es
extendido con signo y sumado a la direccin de la instruccin siguiente.
100
Juego de instrucciones del DLXV
Instruccin JR
Operacin:
P C GP R[rs1]
Sintaxis:
jr rs1
Descripcin:
La instruccin JR provoca un salto incondicional a la direccin conte-
nida en el registro rs1.
Instruccin JAL
Operacin:
P C (P C + 4) + ((dest0 )5 ## dest5...31 )
R31 P C + 4
Sintaxis:
jal dest
Descripcin:
La instruccin JAL provoca un salto incondicional a subrutina (bifurca
y enlaza). Para calcular la direccin de destino el desplazamiento inme-
diato de 26 bits indicado en dest es extendido con signo y sumado a la
direccin de la instruccin siguiente. La direccin de retorno se almacena
en R31.
Instruccin JALR
Operacin:
P C GP R[rs1]
R31 P C + 4
Sintaxis:
jalr rs1
Descripcin:
La instruccin JALR provoca un salto incondicional a una subrutina
(bifurca y enlaza). La direccin destino se encuentra en el registro rs1.La
direccin de retorno se almacena en R31.
101
Juego de instrucciones del DLXV
Instruccin TRAP
Operacin:
P C ((dest0 )5 ## dest5...31 )
IAR P C + 4
Sintaxis:
trap dest
Descripcin:
La instruccin TRAP transfiere el control a una rutina del sistema ope-
rativo. Para calcular la direccin de destino el desplazamiento inmediato
de 26 bits indicado en dest es extendido con signo y sumado a la direccin
de la instruccin siguiente. Ver seccin 8.
Instruccin RFE
Operacin:
P C IAR
Sintaxis:
rfe dest
Descripcin:
La instruccin RFE vuelve al cdigo del usuario desde una excepcin.
Instruccin no implementada en WinDLXV.
Sintaxis:
addd fd,fs1,fs2
102
Juego de instrucciones del DLXV
Descripcin:
La instruccin ADDD suma los nmeros flotantes en doble precisin
contenidos en la pareja de registros de punto flotante fs1/fs1+1 y la pareja
fs2/fs2+1. La suma la almacena en la pareja de registros de punto flotante
fd/fd+1.
Instruccin ADDF
Operacin:
F P R[f d] F P R[f s1] + F P R[f s2]
Sintaxis:
addf fd,fs1,fs2
Descripcin:
La instruccin ADDF suma los nmeros flotantes en simple precisin
contenidos en los registros de punto flotante fs1 y fs2. La suma la almacena
en el registro de punto flotante fd.
Instruccin SUBD
Operacin:
F P R[f d + 1] ## F P R[f d]
(F P R[f s1 + 1] ## F P R[f s1])
(F P R[f s2 + 1] ## F P R[f s2])
Sintaxis:
subd fd,fs1,fs2
Descripcin:
La instruccin SUBD resta al nmero flotante en doble precisin de la
pareja de registros fs1/fs1+1, el nmero flotante de doble precisin de la
pareja fs2/fs2+1. La resta la almacena en la pareja de registros rd/rd+1.
103
Juego de instrucciones del DLXV
Instruccin SUBF
Operacin:
F P R[f d] F P R[f s1] F P R[f s2]
Sintaxis:
subf fd,fs1,fs2
Descripcin:
La instruccin SUBF resta al nmero flotante en simple precisin del re-
gistro fs1, el nmero flotante del registro flotante fs2. La resta la almacena
en el registro de punto flotante fd.
Instruccin MULTD
Operacin:
F P R[f d + 1] ## F P R[f d]
(F P R[f s1 + 1] ## F P R[f s1])
(F P R[f s2 + 1] ## F P R[f s2])
Sintaxis:
multd fd,fs1,fs2
Descripcin:
La instruccin MULTD multiplica los nmeros flotantes en doble preci-
sin de la pareja de registros fs1/fs1+1 y la pareja fs2/fs2+1. El resultado
de la multiplicacin lo almacena en la pareja de registros de punto flotante
fd/fd+1. Si el resultado de la multiplicacin no puede representarse como
un punto flotante de 64 bits se produce una excepcin de overflow.
Instruccin MULTF
Operacin:
F P R[f d] F P R[f s1] F P R[f s2]
Sintaxis:
multf fd,fs1,fs2
104
Juego de instrucciones del DLXV
Descripcin:
La instruccin MULTF multiplica los nmeros flotantes en simple preci-
sin contenidos en los registros de punto flotante fs1 y fs2. El resultado de
la multiplicacin lo almacena en el registro de punto flotante fd. Si el resul-
tado de la multiplicacin no puede representarse como un punto flotante
de 32 bits se produce una excepcin de overflow.
Instruccin DIVD
Operacin:
F P R[f d + 1] ## F P R[f d]
(F P R[f s1 + 1] ## F P R[f s1])
(F P R[f s2 + 1] ## F P R[f s2])
Sintaxis:
divd fd,fs1,fs2
Descripcin:
La instruccin DIVD divide el nmero flotante en doble precisin de la
pareja de registros fs1/fs1+1 entre el nmero flotante en doble precisin
de la pareja fs2/fs2+1. El resultado de la divisin lo almacena en la pareja
de registro de punto flotante fd/fd+1. Si el contenido de fs2/fs2+1 es 0.0
provoca una excepcin de divisin por cero.
Instruccin DIVF
Operacin:
F P R[f d] F P R[f s1] F P R[f s2]
Sintaxis:
divf fd,fs1,fs2
Descripcin:
La instruccin DIVF divide el nmero flotante en simple precisin del
registro fs1 entre el nmero flotante del registro flotante fs2. El resultado
de la divisin lo almacena en el registro de punto flotante fd. Si el conteni-
do de fs2 es 0.0 provoca una excepcin de divisin por cero.
105
Juego de instrucciones del DLXV
Instruccin CVTF2D
Operacin:
F P R[f d + 1] ## F P R[f d] F P R[f s1]
Sintaxis:
cvtf2d fd,fs1
Descripcin:
La instruccin CVTF 2 D convierte el nmero flotante en simple preci-
sin contenido en el registro fs1 a nmero flotante en doble precisin, y
almacena el resultado en la pareja de registros fd y fd1.
Instruccin CVTF2I
Operacin:
F P R[f d] F P R[f s1]
Sintaxis:
cvtf2i fd,fs1
Descripcin:
La instruccin CVTF 2 I convierte el nmero flotante en simple precisin
contenido en el registro fs1 a nmero entero, y almacena el resultado en el
registro de punto flotante fd.
Instruccin CVTD2F
Operacin:
F P R[f d] F P R[f s1 + 1] ## F P R[f s1]
Sintaxis:
cvtd2f fd,fs1
Descripcin:
La instruccin CVTD 2 F convierte el nmero flotante en doble precisin
contenido en la pareja de registros fs1 y fs1+1 a nmero flotante en simple
precisin, y almacena el resultado en el registro fd.
106
Juego de instrucciones del DLXV
Instruccin CVTD2I
Operacin:
F P R[f d] F P R[f s1 + 1] ## F P R[f s1]
Sintaxis:
cvtd2i fd,fs1
Descripcin:
La instruccin CVTD 2 I convierte el nmero flotante en doble precisin
contenido en la pareja de registros fs1 y fs1+1 a nmero entero, y almacena
el resultado en el registro fd.
Instruccin CVTI2F
Operacin:
F P R[f d] F P R[f s1]
Sintaxis:
cvti2f fd,fs1
Descripcin:
La instruccin CVTI 2 F convierte el nmero entero contenido en el re-
gistro de punto flotante fs1 a nmero flotante en simple precisin, y alma-
cena el resultado en el registro fd.
Instruccin CVTI2D
Operacin:
F P R[f d + 1] ## F P R[f d] F P R[f s1]
Sintaxis:
cvti2d fd,fs1
Descripcin:
La instruccin CVTI 2 D convierte el nmero entero contenido en el re-
gistro fs1 a nmero flotante en doble precisin, y almacena el resultado en
la pareja de registros fd y fd1.
107
Juego de instrucciones del DLXV
Sintaxis:
__D fs1,fs2
Descripcin:
La instruccin __ D compara los puntos flotantes en doble precisin de
las parejas de registros de punto flotante fs1/fs1+1 y fs2/fs2+1 segn la
condicin LT, GT, LE, GE, EQ, NE. Si la condicin es cierta coloca un 1 en
el registro de estado especial de punto flotante (FPSR), en otro caso coloca
el valor 0. Las siguientes condiciones son posibles:
Sintaxis:
__F fs1,fs2
108
Juego de instrucciones del DLXV
Descripcin:
La instruccin __ F compara los puntos flotantes en simple precisin
de los registros fs1 y fs2 segn la condicin LT, GT, LE, GE, EQ, NE. Si la
condicin es cierta coloca un 1 en el registro de estado especial de punto
flotante (FPSR), en otro caso coloca el valor 0. Las siguientes condiciones
son posibles:
Sintaxis:
addv vd,vs1,vs2
Descripcin:
La instruccin ADDV suma los componentes de los registros vectoria-
les vs1 y vs2 para obtener los componentes correspondientes del registro
vectorial vd. El nmero de componentes sobre el que se har la suma ser
el especificado en el registro de longitud vectorial (VLR). La suma no se
realizar sobre aquellos componentes que no tengan su bit correspondien-
te a 1 en el vector de mscara (VM).
109
Juego de instrucciones del DLXV
Instruccin ADDSV
Operacin:
V [vd(0)] (F P R[f s1 + 1] ## F P R[f s1]) + V [vs2(0)]
V [vd(1)] (F P R[f s1 + 1] ## F P R[f s1]) + V [vs2(1)]
...
V [vd(63)] (F P R[f s1 + 1] ## F P R[f s1]) + V [vs2(63)]
Sintaxis:
addsv vd,fs1,vs2
Descripcin:
La instruccin ADDSV suma el punto flotante en doble precisin con-
tenido en la pareja de registros de punto flotante fs1 y fs1+1 con cada uno
de los componentes del registro vectorial vs2 para obtener los componen-
tes correspondientes del registro vectorial vd. El nmero de componentes
sobre el que se har la suma ser el especificado en el registro de longitud
vectorial (VLR). La suma no se realizar sobre aquellos componentes que
no tengan su bit correspondiente a 1 en el vector de mscara (VM).
Instruccin SUBV
Operacin:
V [vd(0)] V [vs1(0)] V [vs2(0)]
V [vd(1)] V [vs1(1)] V [vs2(1)]
...
V [vd(63)] V [vs1(63)] V [vs2(63)]
Sintaxis:
subv vd,vs1,vs2
Descripcin:
La instruccin SUBV resta los componentes del registro vectorial vs2 a
los de vs1 para obtener los componentes correspondientes del registro vec-
torial vd. El nmero de componentes sobre el que se har la resta ser el
especificado en el registro de longitud vectorial (VLR). La resta no se rea-
lizar sobre aquellos componentes que no tengan su bit correspondiente a
1 en el vector de mscara (VM).
110
Juego de instrucciones del DLXV
Instruccin SUBVS
Operacin:
V [vd(0)] V [vs1(0)] (F P R[f s2 + 1] ## F P R[f s2])
V [vd(1)] V [vs1(1)] (F P R[f s2 + 1] ## F P R[f s2])
...
V [vd(63)] V [vs1(63)] (F P R[f s2 + 1] ## F P R[f s2])
Sintaxis:
subvs vd,vs1,fs2
Descripcin:
La instruccin SUBVS resta el punto flotante en doble precisin conte-
nido en la pareja de registros de punto flotante fs2 y fs2+1 a cada uno de
los componentes del registro vectorial vs1 al para obtener los componen-
tes correspondientes del registro vectorial vd. El nmero de componentes
sobre el que se har la resta ser el especificado en el registro de longitud
vectorial (VLR). La resta no se realizar sobre aquellos componentes que
no tengan su bit correspondiente a 1 en el vector de mscara (VM).
Instruccin SUBSV
Operacin:
V [vd(0)] (F P R[f s1 + 1] ## F P R[f s1]) V [vs2(0)]
V [vd(1)] (F P R[f s1 + 1] ## F P R[f s1]) V [vs2(1)]
...
V [vd(63)] (F P R[f s1 + 1] ## F P R[f s1]) V [vs2(63)]
Sintaxis:
subsv vd,fs1,vs2
Descripcin:
La instruccin SUBSV resta cada uno de los componentes del registro
vectorial vs2 al punto flotante en doble precisin contenido en la pareja
de registros de punto flotante fs1 y fs1+1 para obtener los componentes
correspondientes del registro vectorial vd. El nmero de componentes so-
bre el que se har la resta ser el especificado en el registro de longitud
vectorial (VLR). La resta no se realizar sobre aquellos componentes que
no tengan su bit correspondiente a 1 en el vector de mscara (VM).
111
Juego de instrucciones del DLXV
Instruccin MULTV
Operacin:
V [vd(0)] V [vs1(0)] V [vs2(0)]
V [vd(1)] V [vs1(1)] V [vs2(1)]
...
V [vd(63)] V [vs1(63)] V [vs2(63)]
Sintaxis:
multv vd,vs1,vs2
Descripcin:
La instruccin MULTV multiplica los componentes de los registros vec-
toriales vs1 y vs2 para obtener los componentes correspondientes del re-
gistro vectorial vd. El nmero de componentes sobre el que se har la mul-
tipliacin ser el especificado en el registro de longitud vectorial (VLR). La
multiplicacin no se realizar sobre aquellos componentes que no tengan
su bit correspondiente a 1 en el vector de mscara (VM). Si el resultado
de la multiplicacin de uno de los componentes no puede representarse
como un punto flotante de 64 bits se produce una excepcin de overflow.
Instruccin MULTSV
Operacin:
V [vd(0)] (F P R[f s1 + 1] ## F P R[f s1]) V [vs2(0)]
V [vd(1)] (F P R[f s1 + 1] ## F P R[f s1]) V [vs2(1)]
...
V [vd(63)] (F P R[f s1 + 1] ## F P R[f s1]) V [vs2(63)]
Sintaxis:
multsv vd,fs1,vs2
Descripcin:
La instruccin MULTSV multiplica el punto flotante en doble precisin
contenido en la pareja de registros de punto flotante fs1 y fs1+1 con cada
uno de los componentes del registro vectorial vs2 para obtener los com-
ponentes correspondientes del registro vectorial vd. El nmero de com-
ponentes sobre el que se har la multiplicacin ser el especificado en el
112
Juego de instrucciones del DLXV
Instruccin DIVV
Operacin:
V [vd(0)] V [vs1(0)] V [vs2(0)]
V [vd(1)] V [vs1(1)] V [vs2(1)]
...
V [vd(63)] V [vs1(63)] V [vs2(63)]
Sintaxis:
divv vd,vs1,vs2
Descripcin:
La instruccin DIVV divide los componentes del registro vectorial vs2
entre los componentes de vs1 para obtener los componentes correspon-
dientes del registro vectorial vd. El nmero de componentes sobre el que
se har la divisin ser el especificado en el registro de longitud vecto-
rial (VLR). La divisin no se realizar sobre aquellos componentes que no
tengan su bit correspondiente a 1 en el vector de mscara (VM). Si el con-
tenido de uno de los componentes de vs2 es 0.0 provoca una excepcin de
divisin por cero.
Instruccin DIVVS
Operacin:
V [vd(0)] V [vs1(0)] (F P R[f s2 + 1] ## F P R[f s2])
V [vd(1)] V [vs1(1)] (F P R[f s2 + 1] ## F P R[f s2])
...
V [vd(63)] V [vs1(63)] (F P R[f s2 + 1] ## F P R[f s2])
Sintaxis:
divvs vd,vs1,fs2
113
Juego de instrucciones del DLXV
Descripcin:
La instruccin DIVVS divide los componentes del registro vectorial vs1
entre el punto flotante en doble precisin contenido en la pareja de regis-
tros de punto flotante fs2 y fs2+1 para obtener los componentes corres-
pondientes del registro vectorial vd. El nmero de componentes sobre el
que se har la divisin ser el especificado en el registro de longitud vec-
torial (VLR). La divisin no se realizar sobre aquellos componentes que
no tengan su bit correspondiente a 1 en el vector de mscara (VM). Si el
contenido de la pareja de registros fs2 y fs2+1 es 0.0 provoca una excepcin
de divisin por cero.
Instruccin DIVSV
Operacin:
V [vd(0)] (F P R[f s1 + 1] ## F P R[f s1]) V [vs2(0)]
V [vd(1)] (F P R[f s1 + 1] ## F P R[f s1]) V [vs2(1)]
...
V [vd(63)] (F P R[f s1 + 1] ## F P R[f s1]) V [vs2(63)]
Sintaxis:
divsv vd,fs1,vs2
Descripcin:
La instruccin DIVSV divide el punto flotante en doble precisin conte-
nido en la pareja de registros de punto flotante fs1 y fs1+1 entre cada uno
de los componentes del registro vectorial vs2 para obtener los componen-
tes correspondientes del registro vectorial vd. El nmero de componentes
sobre el que se har la divisin ser el especificado en el registro de lon-
gitud vectorial (VLR). La divisin no se realizar sobre aquellos compo-
nentes que no tengan su bit correspondiente a 1 en el vector de mscara
(VM). Si el contenido de uno de los componentes de vs2 es 0.0 provoca
una excepcin de divisin por cero.
Instruccin LV
Operacin:
V [vd(0)] M [GP R[rs1]]
V [vd(1)] M [GP R[rs1] + 8]
114
Juego de instrucciones del DLXV
...
V [vd(63)] M [GP R[rs1] + 8 63]
Sintaxis:
lv vd,rs1
Descripcin:
La instruccin LV carga el registro vectorial vd desde memoria. Los
componentes estn en posiciones consecutivas a partir de la direccin con-
tenida en rs1. El nmero de componentes a cargar ser el especificado en
el registro de longitud vectorial (VLR). La carga no se realizar sobre aque-
llos componentes que no tengan su bit correspondiente a 1 en el vector de
mscara (VM).
Instruccin SV
Operacin:
M [GP R[rs1]] V [vd(0)]
M [GP R[rs1] + 8] V [vd(1)]
...
M [GP R[rs1] + 8 63] V [vd(63)]
Sintaxis:
sv rs1,vd
Descripcin:
La instruccin SV almacena los componentes del registro vectorial vd
en posiciones de memoria consecutivas a partir de la direccin contenida
en rs1. El nmero de componentes que se almacenen ser el especificado
en el registro de longitud vectorial (VLR). El almacenamiento no se reali-
zar sobre aquellos componentes que no tengan su bit correspondiente a
1 en el vector de mscara (VM).
Instruccin LVWS
Operacin:
V [vd(0)] M [GP R[rs1]]
V [vd(1)] M [GP R[rs1] + GP R[rs2]]
115
Juego de instrucciones del DLXV
...
V [vd(63)] M [GP R[rs1] + 63 GP R[rs2]]
Sintaxis:
lvws vd,rs1,rs2
Descripcin:
La instruccin LVWS carga el registro vectorial vd a partir de la direc-
cin contenida en rs1 con el desplazamiento contenido en rs2. El nmero
de componentes a cargar ser el especificado en el registro de longitud
vectorial (VLR). La carga no se realizar sobre aquellos componentes que
no tengan su bit correspondiente a 1 en el vector de mscara (VM).
Instruccin SVWS
Operacin:
M [GP R[rs1]] V [vd(0)]
M [GP R[rs1] + GP R[rs2]] V [vd(1)]
...
M [GP R[rs1] + 63 GP R[rs2]] V [vd(63)]
Sintaxis:
svws rs1,rs2,vd
Descripcin:
La instruccin SVWS almacena los componentes del registro vectorial
vd a partir de la direccin contenida en rs1 con el desplazamiento conte-
nido en rs2. El nmero de componentes que se almacenen ser el especi-
ficado en el registro de longitud vectorial (VLR). El almacenamiento no se
realizar sobre aquellos componentes que no tengan su bit correspondien-
te a 1 en el vector de mscara (VM).
Instruccin LVI
Operacin:
V [vd(0)] M [GP R[rs1] + V [vs2(0)]]
V [vd(1)] M [GP R[rs1] + V [vs2(1)]]
...
V [vd(63)] M [GP R[rs1] + V [vs2(63)]]
116
Juego de instrucciones del DLXV
Sintaxis:
lvi vd,rs1,vs2
Descripcin:
La instruccin LVI carga el registro vectorial vd con componentes en las
direcciones rs1 + componente de vs2, es decir, vd[i] se lee de rs1+vs2[i]. El
nmero de componentes a cargar ser el especificado en el registro de lon-
gitud vectorial (VLR). La carga no se realizar sobre aquellos componentes
que no tengan su bit correspondiente a 1 en el vector de mscara (VM).
Instruccin SVI
Operacin:
M [GP R[rs1] + V [vs2(0)]] V [vd(0)]
M [GP R[rs1] + V [vs2(1)]] V [vd(1)]
...
M [GP R[rs1] + V [vs2(63)]] V [vd(63)]
Sintaxis:
svi rs1,vs2,vd
Descripcin:
La instruccin SVI almacena los componentes del registro vectorial vd
en las direcciones rs1 + componente de vs2, es decir, vd[i] se escribe en la
direccin rs1+vs2[i]. El nmero de componentes que se almacenen ser el
especificado en el registro de longitud vectorial (VLR). El almacenamiento
no se realizar sobre aquellos componentes que no tengan su bit corres-
pondiente a 1 en el vector de mscara (VM).
Instruccin CVI
Operacin:
V [vd(0)] 0
V [vd(1)] GP R[rs1]
...
V [vd(63)] 63 GP R[rs1]
Sintaxis:
117
Juego de instrucciones del DLXV
cvi vd,rs1
Descripcin:
La instruccin CVI crea un registro vectorial de ndices almacenando
en cada componente de vd los valores 0, rs1, 2*rs1, 3*rs1, ..., 63*rs1.
Operacin:
si (V [vs1(i)] cond V [vs2(i)]) 0 i 63
V M (i) 1
si no
V M (i) 0
Sintaxis:
S__V vs1,vs2
Descripcin:
La instruccin S __ V compara los componentes de vs1 y vs2 segn la
condicin EQ, NE GT, GE, LT o LE y actualiza el bit correspondiente del
registro de mscara VM con un 1 si la condicin se cumple y con un 0 si la
condicin no se cumple. Las siguientes condiciones son posibles:
118
Juego de instrucciones del DLXV
Sintaxis:
S__SV fs1,vs2
Descripcin:
La instruccin S __ SV compara el contenido de la pareja de registros de
punto flotante fs1 y fs1+1 con cada una de las componentes de vs2 segn
la condicin EQ, NE GT, GE, LT o LE y actualiza el bit correspondiente del
registro de mscara VM con un 1 si la condicin se cumple y con un 0 si la
condicin no se cumple. Las siguientes condiciones son posibles:
Instruccin POP
Operacin:
GP R[rd] numero de unos[vm]
Sintaxis:
pop rd,vm
Descripcin:
La instruccin POP cuenta el nmero de unos del vector mscara VM y
pone el resultado en el registro rd.
119
Juego de instrucciones del DLXV
Instruccin CVM
Operacin:
vm (1)64
Sintaxis:
cvm
Descripcin:
La instruccin CVM pone a uno todos los componentes del vector ms-
cara VM.
120
Captulo 8
Traps
Parmetros de entrada
1. Nombre del fichero: es la direccin de la cadena conteniendo el nom-
bre del fichero que se quiere abrir. La cadena debe acabar con el ca-
rcter NUL.
2. Modo: establece la forma en que se va a trabajar con el fichero. Algu-
nas constantes que definen los modos bsicos son:
122
Traps
Parmetros de salida
El trap #1 retorna en el registro R1 un descriptor vlido si el fichero se
ha podido abrir, y el valor -1 en caso de error; mostrndose en este caso en
la barra de estado del simulador la causa del error.
Ejemplo
.data
Filename: .asciiz C:\ejemplos\data.dat
.align 2
Par: .word Filename
.word 0x0102 ;modo de acceso
.word 0x0400 ;permisos de acceso
FileDescr: .space 4
.text
addi r14,r0,Par ;r14: direccin
;primer parametro
trap 1 ;open()
sw FileDescr(r0),r1 ;r1: descriptor
;del fichero
;...
Parmetros de entrada
1. Descriptor: es el descriptor del archivo a cerrar (obtenido previamen-
te al abrir el fichero con el Trap #1).
La direccin del parmetro de entrada debe almacenarse en el registro
R14.
Parmetros de salida
En caso de que la llamada se realice correctamente, en R1 se almacena
el valor 0, en caso contrario, se almacena -1 indicando que ha habido un
error y se mostrar en la barra de estado del simulador la causa del error.
123
Traps
Ejemplo
.data
FileDescr: .space 4 ;Descriptor del fichero
;a cerrar
;(ver ejemplo Trap 1)
.text
addi r14,r0,FileDescr;r14:direccin
;parametro
trap 2 ;close()
;... ;r1=0 o error
Parmetros de entrada
1. Descriptor: es el descriptor sobre el que se pretende actuar. Ser el
descriptor obtenido previamente al abrir el fichero con el Trap ]1.
Como descriptor se puede utilizar el 0 para leer de la entrada estn-
dar (ventana E/S del simulador WinDLXV).
Parmetros de salida
En caso de que la llamada se realice correctamente, en R1 se almacena
el nmero de bytes que realmente se han transferido. En caso de error,
124
Traps
Ejemplo
.data
ReadBuf: .space 80 ;Memoria reservada para
;80 bytes
ReadPar: .word 0 ;Descriptor
.word ReadBuf ;Dirreccin destino
.word 80 ;Nmero de bytes
.text
addi r14,r0,ReadPar;r14:direccin
;primer parmetro
trap 3 ;read()
;... ;r1: bytes
;ledos
Parmetros de entrada
125
Traps
Parmetros de salida
En caso de que la llamada se realice correctamente, en R1 se almacena
el nmero de bytes realmente escritos, en caso contrario, se almacena -1
indicando que ha habido un error y se mostrar en la barra de estado del
simulador la causa del error.
Ejemplo
.data
Buffer: .space 80 ;Memoria a cargar
;(previamente almacenada)
WritePar: .space 4 ;Descriptor open()
.word Buffer ;Dirreccin buffer
;a copiar
.word 80 ;Nmero de bytes
.text
addi r14,r0,WritePar;r14: direccin
;primer parm.
trap 4 ;write()
;... ;r1: bytes
;escritos
Parmetros de entrada
1. Formato de la cadena: es la direccin de la cadena formateada equi-
valente a la usada en la funcin printf() de C. Por ejemplo, algunos
de los indicadores de tipos admitidos son:
%c: el argumento es tratado como un entero, y presentado como
el carcter con ese valor ASCII.
%d: el argumento es tratado como un entero, y presentado como
un nmero decimal con signo.
%u: el argumento es tratado como un entero, y presentado como
un nmero decimal sin signo.
126
Traps
Parmetros de salida
En caso de que la llamada se realice correctamente, en R1 se almacena
el nmero de bytes que realmente se han transferido. En caso de error,
retorna -1 y en la barra de estado del simulador se mostrar la causa del
error.
Ejemplo
.data
FormatStr: .asciiz Valor = %d\n
.align 2
.text
addi r14,r0,PrintfPar;r14:direccin
;primer parm.
trap 5 ;printf()
;... ;r1: bytes
;transferidos
127
Bibliografa