Lenguaje ensamblador del DLX

Anuncio
Lenguaje ensamblador del DLX
•
•
•
•
El procesador DLX
Modos de direccionamiento
Formato de instrucciones
Instrucciones DLX
–
–
–
–
•
•
•
Transferencia de datos
Aritméticas y lógicas
Saltos y bifurcaciones
Operaciones en punto flotante
Sintaxis del ensamblador
Directivas del ensamblador
Ejemplo de programa en ensamblador
Estructura de Computadores (FI: 2º II)
Ensamblador DLX
1
El procesador DLX
•
Diseñado con filosofía RISC
–
–
–
–
Arquitectura de carga/almacenamiento
Repertorio de instrucciones sencillo
Diseño de la segmentación eficiente
Instrucciones fáciles de implementar en hardware: Instrucciones de
longitud fija y pocos modos de direccionamiento
– Eficiencia como objeto del compilador
– Incluir en el hardware todo aquello que no sea rentable hacerlo en
software
•
Registros
– 32 registros de propósito general (GPRs) de 32 bits
• R0, R1, ... R31; el valor de R0 siempre es cero
– 32 registros de punto flotante (FPR)
• F0,F1,.... F31: 32 registros de 32 bits en simple precisión
• F0, F2,... F30: 16 registros de 64 bits en doble precisión (parejas par-impar)
– Registros especiales para acceder a información sobre el estado
• Flags (indicadores) de cero: FPSR (flag de cero
• Pueden transferirse a y desde registros enteros
Estructura de Computadores (FI: 2º II)
Ensamblador DLX
2
El procesador DLX
•
Direcciones de memoria de 32 bits
– Modelo de memoria “BIG-ENDIAN”
•
Tamaño de las transferencias de datos
– Entre GPRs y memoria
• 8, 16 y 32 bits
– Entre FPRs y memoria
• 32 y 64 bits
•
Datos e instrucciones alineados en memoria
– La dirección de memoria donde se ubica un dato ha de ser múltiplo
de su tamaño.
Objeto
Bien alineado
Mal alineado
Byte
0,1,2,3,4,5,6,.. (nunca)
Media palabra
0,2,4,6,8, ...
1,3,5,7, ...
Palabra (4 bytes)
0,4,8,...
1,2,3,5,6,7,9,10,11,...
Doble palabra
0,8, ..
1,2,3,4,5,6,7,9,10,11,12,13,14,15,....
Estructura de Computadores (FI: 2º II)
Ensamblador DLX
3
El procesador DLX
•
Estructura segmentada
– Etapa IF
• Búsqueda de instrucción
– Etapa ID
• Decodificación de la instrucción y lectura de registros
– Etapa EX
• Ejecución: Operación o cálculo de dirección efectiva
• Unidades funcionales:
– intEX: Unidad principal entera
»
Carga-almacenamiento, operaciones enteras (excepto multiplicación y división) y saltos
– faddEX: Sumador FP
– fmulEX: Multiplicador FP y entero
– fdivEX: Divisor FP y entero
– Etapa MEM
• Carga o almacenamiento de datos en memoria
– Etapa WB
• Almacenamiento de resultados en registros. Se realizan en la primera mitad
del ciclo de reloj. La instrucción que está en la etapa de ID puede leer estos
datos en la segunda mitad del ciclo.
Estructura de Computadores (FI: 2º II)
Ensamblador DLX
4
Modos de direccionamiento
•
Para DATOS:
– Registro-registro (R-R)
• add
r1,r2,r3
– Inmediato (R-I)
• addi r1,r3,#5
– Registro base + desplazamiento (R-I)
• lw
•
r1, inm16(reg)
Para CÓDIGO:
– Relativo al contador de programa (PC)
• beq
• j
r1,r2,loop ; desplazamiento en 16 bits (especifica bytes)
dirección ; desplazamientos de 26 bits (especifica bytes)
– Indirecto por registro
• jr
• jalr
r2
r5
Estructura de Computadores (FI: 2º II)
Ensamblador DLX
5
Formato de las instrucciones
Sólo tres tipos de formatos:
• Formato R: add rd,rs1,rs2
op
6 bits
000000
rs1
5 bits
01010
rs2
5 bits
11111
rd
5 bits
00011
func
11 bits
00000
Instrucciones tipo R
Todas las instrucciones DLX de 32 bits
100000 0x015f1820
add R3,R10,R31
Codifica: Operaciones de ALU registro-registro: rd <- rs1 op rs2; el campo de “func” codifica la operación a realizar por el
camino de datos: add, sub, ....
•
Formato I: lw rd,inmediato(rs1)
op
6 bits
100011
rs1
5 bits
rd
5 bits
Inmediato
16 bits
00011
00101
0000000000100000
Instruciones de carga e inmediatas
Todas las instrucciones DLX de 32 bits
0x8c650020
lw $5,32($3)
Codifica: carga y almacenamiento de bytes, palabras y medias palabras; todos los inmediatos ( rd <- rs1 op inmediato); saltos
condicionales (rs1 es el registro, rd no usado); saltos indirectos por registro “jr” y salta y enlaza por registro “jalr” (rd=0; rs1
=destino; inmediato=0)
•
Formato J: j dirección
op
6 bits
000010
Dirección objetivo
26 bits
11111111111111111111110100
Instrucciones de bifurcación
Todas las instrucciones DLX de 32 bits
0x0bfffff4
0x10c: j 0x100
Bifurcación “j” y bifurcación y enlace “jal”; trap y retorno de excepción
Estructura de Computadores (FI: 2º II)
Ensamblador DLX
6
Instrucciones DLX:
Transferencias de datos
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
LB Rd,Adr
LBU Rd,Adr
LH Rd,Adr
LHU Rd,Adr
LW Rd,Adr
LF Fd,Adr
LD Dd,Adr
SB Adr,Rs
SH Adr,Rs
SW Adr,Rs
SF Adr,Fs
SD Adr,Fs
MOVI2FP Fd,Rs
MOVI2FP Rd,Fs
MOVF Fd,Fs
MOVD Dd,Ds
MOVI2S SR,Rs
MOVS2I Rs,SR
Estructura de Computadores (FI: 2º II)
Load byte (sign extension)
Load byte (unsigned)
Load halfword (sign extension)
Load halfword (unsigned)
Load word
Load single-precision Floating point
Load double-precision Floating point
Store byte
tore halfword
Store word
Store single-precision Floating point
Store double-precision Floating point
Move 32 bits from integer registers to FP registers
Move 32 bits from FP registers to integer registers
Copy one Floating point register to another register
Copy a double-precision pair to another pair
Copy a register to a special register (not implemented!)
Copy a special register to a GPR ( not implemented!)
Ensamblador DLX
7
Instrucciones DLX:
Carga-almacenamiento
Estructura de Computadores (FI: 2º II)
Ensamblador DLX
8
Instrucciones DLX:
Aritméticas
•
ADD Rd,Ra,Rb
Add
•
•
ADDI Rd,Ra,Imm
ADDU Rd,Ra,Rb
Add immediate (all immediates are 16 bits)
Add unsigned
•
ADDUI Rd,Ra,Imm
Add unsigned immediate
•
SUB Rd,Ra,Rb
Subtract
•
SUBI Rd,Ra,Imm
Subtract immediate
•
SUBU Rd,Ra,Rb
Subtract unsigned
•
SUBUI Rd,Ra,Imm
Subtract unsigned immediate
•
MULT Rd,Ra,Rb
Multiply signed
•
•
MULTU Rd,Ra,Rb
DIV Rd,Ra,Rb
Multiply unsigned
Divide signed
•
DIVU Rd,Ra,Rb
Divide unsigned
Estructura de Computadores (FI: 2º II)
Ensamblador DLX
9
Instrucciones DLX:
Lógicas
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
AND Rd,Ra,Rb
ANDI Rd,Ra,Imm
OR Rd,Ra,Rb
ORI Rd,Ra,Imm
XOR Rd,Ra,Rb
XORI Rd,Ra,Imm
LHI Rd,Imm
SLL Rd,Rs,Rc
SRL Rd,Rs,Rc
SRA Rd,Rs,Rc
SLLI Rd,Rs,Imm
SRLI Rd,Rs,Imm
SRAI Rd,Rs,Imm
S__ Rd,Ra,Rb
S__I Rd,Ra,Imm
S__U Rd,Ra,Rb
S__UI Rd,Ra,Imm
NOP
Estructura de Computadores (FI: 2º II)
And
And immediate
Or
Or immediate
Xor
Xor immediate
LOad high immediate
Shift left logical
Shift right logical
Shift right arithmetic
Shift left logical 'immediate' bits
Shift right logical 'immediate' bits
Shift right arithmetic 'immediate' bits
Set conditional : "__" may be EQ, NE, LT, GT, LE or GE
Set conditional immediate: "__" ídem de ídem
Set conditional unsigned: "__" ídem de ídem
Set conditional unsig. immediate: "__" ídem de ídem
No operation
Ensamblador DLX
10
Instrucciones DLX:
Control
•
•
•
BEQZ Rt,Dest
BNEZ Rt,Dest
BFPT Dest
•
BFPF Dest
•
•
•
•
•
•
J Dest
JR Rx
JAL Dest
JALR Rx
TRAP Imm
RFE Dest
Branch if GPR equal to zero; 16-bit offset from PC
Branch if GPR not equal to zero; 16-bit offset from PC
Test comparison bit in the FP status register (true) and branch;
16-bit offset from PC
Test comparison bit in the FP status register (false) and branch;
16-bit offset from PC
Jump: 26-bit offset from PC
Jump: target in register
Jump and link: save PC+4 to R31; target is PC-relative
Jump and link: save PC+4 to R31; target is a register
Transfer to operating system at a vectored address ; see Traps.
Return to user code from an execption; restore user mode (not
mplemented!)
Estructura de Computadores (FI: 2º II)
Ensamblador DLX
11
Instrucciones DLX:
Punto flotante
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
ADDD Dd,Da,Db
ADDF Fd,Fa,Fb
SUBD Dd,Da,Db
SUBF Fd,Fa,Fb
MULTD Dd,Da,Db
MULTF Fd,Fa,Fb
DIVD Dd,Da,Db
DIVF Fd,Fa,Fb
CVTF2D Dd,Fs
CVTD2F Fd,Ds
CVTF2I Fd,Fs
CVTI2F Fd,Fs
CVTD2I Fd,Ds
CVTI2D Dd,Fs
__D Da,Db
•
__F Fa,Fb
Estructura de Computadores (FI: 2º II)
Add double-precision numbers
Add single-precision numbers
Subtract double-precision numbers
Subtract single -precision numbers.
Multiply double-precision Floating point numbers
Multiply single-precision Floating point numbers
Divide double-precision Floating point numbers
Divide single-precision Floating point numbers
Converts from type single-precision to type double-precision
Converts from type double-precision to type single-precision
Converts from type single-precision to type integer
Converts from type integer to type single-precision
Converts from type double-precision to type integer
Converts from type integer to type double-precision
Double-precision compares: "__" may be EQ, NE, LT, GT,
LE or GE; sets comparison bit in FP status register
Single-precision compares: "__" may be EQ, NE, LT, GT,
LE or GE; sets comparison bit in FP status register
Ensamblador DLX
12
Sintaxis del ensamblador
•
Líneas de comentarios
– Todo lo que haya a partir del simbolo “;” hasta el final de línea se
ignora.
•
Directivas
– Secuencia de caracteres, (_) y (.) que no empiezan por un número.
•
Etiquetas
– Se declaran colocándolas al principio de línea y terminadas en (:).
•
Número decimales y hexadecimales
– Números en base 10 por defecto.
– Hexadecimales o en base 16 precedidos por 0x.
•
Cadenas o strings
– Las cadenas están encerradas entre dos comillas (“).
– Caracteres especiales:
• \n
• \t
• \”
Nueva línea
Tab
Comillas
Estructura de Computadores (FI: 2º II)
Ensamblador DLX
13
Directivas del ensamblador
•
.align n
•
.ascii "string1","..."
•
.asciiz "string1","..."
•
.byte byte1,byte2,...
•
.data [address]
•
.double number1,...
•
.global label
•
.space size
•
.text [address]
•
.word word1,word2,...
Estructura de Computadores (FI: 2º II)
Ensamblador DLX
14
Ejemplo
Prompt:
PrintfFormat:
PrintfPar:
PrintfValue:
main:
; ;;;;;
Finish:
.data
.asciiz
.asciiz
.align
.word
.space
"An integer value >1 : "
"Factorial = %g\n\n"
2
PrintfFormat
8
.text
.global
main
;*** Read value from stdin into R1
addi
r1,r0,Prompt
jal
InputUnsigned
;*** write result to stdout
sd
PrintfValue,f2
addi
r14,r0,PrintfPar
trap
5
;*** end
trap
0
Estructura de Computadores (FI: 2º II)
Ensamblador DLX
15
Descargar