Tema 3: El nivel de lenguaje máquina

Anuncio
Tema 3: El nivel de lenguaje máquina
• Introducción
• Modos de direccionamiento
• Tipos de instrucciones
• Tipos y tamaños de los operandos
• Formatos de las instrucciones
• Procedimientos
• Clasificación de las arquitecturas a nivel de lenguaje máquina
• Caso de estudio:
– Arquitectura del repertorio de instrucciones del procesador MIPS.
Bibliografía básica:
[Patt-95], [Henn-93]
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
1 de 64
Introducción
• Nivel de lenguaje máquina o nivel ISA:
– Interfaz crítico entre el software y el hardware. Nivel más bajo al que se
puede programar un computador.
Software
Arquitectura del repertorio de instrucciones (o nivel ISA)
Hardware
• Instrucción: Orden primitiva que debe ejecutar el hardware.
• Objetivo común de los diseñadores de computadores:
– Encontrar un lenguaje que haga fácil la construcción del hardware y del
compilador.
– Maximizar el rendimiento y minimizar el coste o precio.
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
2 de 64
Características del lenguaje máquina
• Instrucción: Orden individual que ejecuta el hardware.
– Información contenida en una instrucción:
• Operación a realizar
• Destino del resultado de la operación
• Especificación de los operandos
• Siguiente instrucción a realizar (implícitamente la siguiente o la que se
especifique en instrucciones de ruptura de secuencia).
• Las características del lenguaje máquina o nivel ISA de un
computador vienen determinadas por:
–
–
–
–
El repertorio de instrucciones
Los modos de direccionamiento (formas de localizar los operandos)
La representación y tipos de datos que puede manejar
Formato de las instrucciones (modo en el que se codifican)
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
3 de 64
Sintaxis típica de una instrucción en lenguaje
ensamblador
• Ejemplo: Lenguaje ensamblador del procesador MIPS R2000/3000
– 4 campos básicos: etiqueta, nemónico de la instrucción, operandos (fuentes
y destino) y comentarios (opcional).
Operandos
Etiqueta
Instrucción
demo:
sumai:
add
addi
Destino
Fuentes
$t1,
$s1, $v0
$t5,
$s2, 5
carga:
lw
$s3,
Fundamento de Computadores (1º II)
#
#
#
100($zero)
#
Cap 2: El nivel de lenguaje máquina
Comentarios
$t1= $s1 + $v0
$t5= $s2 + 5
$s3= M[100+$zero]
$zero = 0 siempre!
4 de 64
Modos de direccionamiento
• ¿Qué se entiende por modo de direccionamiento?
– Las diversas formas que tiene una arquitectura (procesador) de especificar
la localización de los operandos (datos) a procesar.
• ¿Dónde pueden estar los operandos de una instrucción?
– Particularizando para una máquina de registros de propósito general los
operandos pueden estar en:
• En un registro del procesador:
• En la propia instrucción (forma inmediata):
• En memoria:
add r3,r1,r2
addi r2,r1,4
add r2,r1,M
– Dirección efectiva (EA: Effective address): Dirección real de memoria
especificada por un modo de direccionamiento.
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
5 de 64
Modos de direccionamiento:
Ubicación de los operandos
• En Registros , en la propia instrucción (inmediato) o en Memoria
Procesador
Control
Registros
;……
ALU
Fundamento de Computadores (1º II)
Dirección
Memoria
Contenido
...
[0x00001144]
[0x00001148]
...
...
[0x00001000]
...
...
...
...
Cap 2: El nivel de lenguaje máquina
addi $t0, $t1, 9 ;
lw
$s0,1000($zero)
0x00001998
;
6 de 64
Modos de direccionamiento:
Interpretación de las direcciones de memoria
• Convenios para clasificar los bytes de una palabra:
– Little Endian: La dirección de un dato es la dirección de la parte menos significativa
del dato.
– Big Endian: La dirección de un dato es la dirección de la parte más significativa del
dato.
– Aspecto importante cuando se intercambia información entre distintas
máquinas.
Little Endian
MSB
Memoria
LSB
.
0x44332211
0
Big Endian
MSB
LSB
0x11223344
0x11
0x22
0x33
0x44
.
2n - 1
55
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
7 de 64
Modos de direccionamiento:
Alineación de los datos en memoria
• Algunas arquitecturas exigen que los objetos mayores de un byte
estén alineados en memoria.
• Definición:
– Un acceso a un objeto de tamaño t bytes en el byte de dirección D se alinea
si D mod t = 0 (mod: resto de la división D/t).
– Es decir, la dirección del objeto debe ser múltiplo de su tamaño en bytes.
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,....
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
8 de 64
Red de alineación
Ejemplo
Memoria
bit31
Memoria:
bit0
Dirección
byte 3 byte 2 byte 1 byte 0
bus
bit0
..
.
bit31
Contenido
0
Byte 0
1
Byte 1
2
Byte 2
3
Byte 3
4
Byte 4
...
....
Red de alineación
bit31
Registro:
bit0
byte 3 byte 2 byte 1 byte 0
Procesador
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
9 de 64
Modos de direccionamiento:
Tipos más frecuentes
Modo
Ejemplo
Significado
Registro
add r4,r3
r4 = r3+r4
Inmediato
add r4,#5
r4 = r4+5
Directo
add r1, (100)
r1 = r1+M[100]
Base + desplazamiento
add r4,28(r1)
r4 = r4 + M[28+r1]
Indirecto por registro
add r2, (r5)
r2= r2 + M[r5]
Indirecto por memoria
add r1, @(r3)
r1= r1 + M[M[r3]]
Indexado
add r3, (r1+r2)
r3= r3+M[r1+r2]
Autoincremento
add r1,(r3)+
r1= r1 + M[r3]
r3=r3+d
(d:tamaño del elemento)
Autodecremento
add r1, -(r3)
r3=r3-d
r1= r1 + M[r3]
(d:tamaño del elemento)
Escalado o índice
add r1, 50(r2)[r3]
r1= r1+M[50+r2+r3xd]
(d: tamaño del elemento)
Ruptura de secuencia
Fundamento de Computadores (1º II)
Saltos directos, relativos al PC, llamadas a
subrutinas, etc..
Cap 2: El nivel de lenguaje máquina
10 de 64
Breve descripción de la arquitectura MIPS
Características generales
• Máquina de carga-almacenamiento.
– Los operandos de las operaciones que realiza la ALU tienen que estar en
registros. No pueden estar en memoria. Los datos se tienen que mover a los
registros (instrucciones de carga/almacenamiento) para procesarlos.
• Repertorio reducido tanto de instrucciones como de tipos de
datos.
• Todas las instrucciones son de la misma longitud.
• Número pequeño de modos de direccionamiento.
– 3 para acceso a operandos
– 2 para ruptura de secuencia (saltos y bifurcaciones)
• Número reducido de formatos de instrucciones.
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
11 de 64
Breve descripción de la arquitectura MIPS
Registros
• 32 registros de 32 bits: $0 - $31.
– $1 - $31: Registros de propósito general.
– $0:
Registro cuyo contenido siempre es 0.
• Contador de Programa: PC
• 32 registros de punto flotante.
– 16 doble precisión (64 bits):
– 16 simple precisión (32 bits):
F0-F2-....-F30
F0-F2- ...- F30 (direcciones pares)
• Registros HI y LO para resultados aritméticos de 64 bits.
– HI,LO: 64 bits. Producto aritmética entera (multiplicación)
– LO: Cociente y HI: Resto para la división
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
12 de 64
Modos de direccionamiento del procesador MIPS
• Sólo 5 modos de direccionamiento:
– Registro
• add
$t0,$s0,$s1
# $t0= $s0 + $s1
– Inmediato
• addi $t0,$t1,3
# $t0= $t1 +3
– Base + desplazamiento
• lw
$t6, 100($s0)
# Carga: t6 = M[100+$s0]
• sw
$t6, 100($s0)
# Almacenamiento: M[100+$s0] = t6
– Relativo al contador de programa
• beq
$t0,$t1,loop
# Salto: si ($t0 = $t1) ir a loop
– Pseudodirecto
• j
1000
Fundamento de Computadores (1º II)
# Bifurcación a la posición 1000 (dentro del
# segmento actual de 256 Mb)
Cap 2: El nivel de lenguaje máquina
13 de 64
Codificación de los modos de direccionamiento
• La codificación de los modos de direccionamiento de los operandos
depende de:
– Número de modos de direccionamiento
– Grado de independencia entre modos y códigos de operación
• Alternativas para la codificación según el número de modos de
direccionamiento que tenga una arquitectura:
– Bajo: Codificación en el propio código de operación de la instrucción.
Código de operación
...........
............
..........
..........
In
– Alto: Utilización de especificadores de direcciones que indican el modo de
direccionamiento que utiliza cada operando.
Cód. Oper.
Especificador
............
..........
..........
In
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
14 de 64
Modos de direccionamiento y registros:
Impacto en el tamaño de las instrucciones
• El número de modos de direccionamiento y el número de registros de
una arquitectura influyen directamente en el tamaño de las
instrucciones.
– Cuanto mayor es el número de registros y modos de direccionamiento más
bits se necesitarán para la codificación de los mismos. Por ejemplo: 32
registros necesitarán como mínimo 5 bits para su codificación en la
instrucción: 00000 (R0) ………. 11111 (R31).
• Fuerzas que debe equilibrar el arquitecto de computadores:
– El deseo de tener muchos registros y modos de direccionamiento
– El impacto en el tamaño de las instrucciones -> tamaño de los programas
– El deseo de tener instrucciones codificadas en longitudes fáciles de manejar
o decodificar por una implementación determinada (hardware que ejecuta el
repertorio de instrucciones).
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
15 de 64
Tipos de instrucciones
• Las operaciones soportadas por la mayoría de las arquitecturas pueden
clasificarse según la siguiente tabla:
Tipo de instrucción
Ejemplos
Comentarios
Operaciones aritméticas y lógicas: suma,
resta, and, or, ...
Transferencia de datos entre memoria y
registros: Carga/almacenamiento.
Salto, bifurcación, llamadas a subrutinas,
retorno de subrutinas, excepciones,
Llamadas al Sistema operativo, gestión
de la memoria virtual.
Categorías presente en todas las
máquinas con un repertorio completo de
instrucciones.
Punto Flotante
operaciones en punto flotante: +, -, * y / .
En máquinas destinadas a realizar
muchas operaciones en punto flotante
Decimal
y
multiplicación
decimal,
Suma
conversiones de decimal a caracteres.
Comparar, mover, copiar o buscar en
strings o cadenas de caracteres.
En algunas arquitecturas (VAX, 80x86)
forman
parte
del
repertorio
de
instrucciones y en otras las sintetiza el
compilador a partir de instrucciones mas
sencillas.
Aritmética y lógica
Transferencia de datos
Control
Sistema
Cadenas
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
Varían entre las distintas arquitecturas
pero todas proporcionan algún soporte de
instrucciones para funciones del sistema.
16 de 64
Instrucciones para el control de flujo
• Nomenclaturas más aceptadas
– Saltos:
• Rupturas de secuencias CONDICIONALES
– Bifurcaciones:
• Rupturas de secuencia NO CONDICIONALES.
• Tipos de cambios de flujo
–
–
–
–
Saltos condicionales
Bifurcaciones
Llamadas a procedimientos
Retornos de procedimiento
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
17 de 64
Saltos condicionales
• Normalmente, los saltos son relativos al PC
– La dirección de destino se da como un desplazamiento que se suma o resta
al Contador de Programa (PC).
• Código independiente de la posición
– Puede ejecutarse independientemente de su posición en memoria.
• Un salto se realiza si la condición probada es verdadera
• la condición que se prueba puede ser:
– Un bit especial de estado que se activa en función del resultado de la ALU.
» add r1,r2,r3
» bz label
# si (bit de estado “zero” está activo) ir a label
– Registro arbitrario que toma el valor del resultado de una comparación.
» sub r1,r2,r3
» beqz r1,label
# si (r1==0) ir a label
– En la propia instrucción de salto se realiza la comparación.
» beq $1,$2,label # si ($1==$2) ir a label
• Los saltos suelen ser cortos -> pocos bits para especificar la
dirección.
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
18 de 64
Bifurcaciones
• La dirección de la siguiente instrucción a ejecutar es la especificada por
el campo de operandos de la instrucción de bifurcación.
– Ejemplo: J 2000
# ir a la dirección 2000 de memoria
• La dirección de salto puede especificarse de las siguientes formas:
– Directa
• El campo de operandos de la instrucción especifica directamente la
siguiente instrucción que se ha de ejecutar.
– J 1000
– Indirecta
• Saltos indirectos por registros
– jr $5
• Retornos de procedimientos o subrutinas
– RET
Fundamento de Computadores (1º II)
# I8086: La dirección de retorno la recupera del “stack”.
Cap 2: El nivel de lenguaje máquina
19 de 64
Procedimientos (o subrutinas)
• Concepto de procedimiento o subrutina
– Puede considerarse como una herramienta del programador para
estructurar los programas y permitir que un programa desarrollado pueda
ser reutilizado.
– Librerías de subrutinas
• Llamada y retorno de procedimientos: Funcionamiento simplificado
Programa principal
D1: instrucción 1
D2: instrucción 2
D3: Llamada a “pru”
D4: instrucción 4
.
.
Dn: instrucción n
Fundamento de Computadores (1º II)
Guarda
dirección
D4
Registro
o
Stack
Cap 2: El nivel de lenguaje máquina
Procedimiento Pru
Instrucción 1
instrucción 2
instrucción 3
inst. retorno
Recupera
D4
20 de 64
Instrucciones de llamada y retorno de
procedimientos
• Incluyen la transferencia del control y guardar algún estado.
– Como mínimo, debe guardarse la dirección de retorno en algún lugar que
normalmente es: Un registro del procesador o la pila (stack).
• Algunas arquitecturas proporcionan mecanismos para guardar los
registros. En otras, es el propio compilador quien genera las
instrucciones para guardar los registros.
• Convenios básicos para guardar los registros:
– Guarda llamador (caller-saving)
• Antes de llamar al procedimiento, se guardan los registros cuyo
contenido se quiere preservar después de la llamada.
– Guarda el llamado (called-saving)
• El procedimiento llamado guarda los registros que quiera a utilizar.
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
21 de 64
Frecuencia de uso de las instrucciones
Ejemplo: Top 10 80x86 Instructions
Rank instruction
Integer Average Percent total executed
1
load
22%
2
conditional branch
20%
3
compare
16%
4
store
12%
5
add
8%
6
and
6%
7
sub
5%
8
move register-register
4%
9
call
1%
10
return
1%
Total
96%
Simple instructions dominate instruction frequency
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
22 de 64
Operaciones básicas
• Conclusión: Soportar las siguientes operaciones porque son las
que predominan en el conjunto de instrucciones ejecutadas.
retur
Tipo de instrucción
load
store
add
subtract
move register-register
and
shift
compare equal –not equal
branch
jump
call (llamada a subrutina)
return
(retorno
de
subrutina)
Fundamento de Computadores (1º II)
lw
sw
add
sub
add
and
sll
slt
beq
j
jal
Instrucción del procesador MIPS
$a0, -30($t5) # $a0=M[-30+$t5]
$t2, 100($s5) # M[100+$s5]=$t2
$t0,$t1,$t2
# $t0= $t1+t2
$a0,$s0,$s1 # $a0= $s0-$s1
$t0,$zero,$t1 # $t0=$t1
$t0,$t1,$t2
# $t0= $t1&$t2
$t0,$t1,5
# $t0=$t1 << 5
$t0,$t5,$s0
# si($t5<$s0) $t0=1 sino $t0=0
$t0,$zero,loop# si($t0==0) ir a loop
1000
# saltar a 1000
2000
# $ra=PC+4; ir a 2000
jr
$ra
Cap 2: El nivel de lenguaje máquina
# ir a $ra
($ra=$31)
23 de 64
Tipos y tamaños de los operandos
• Tipos de operandos
– Bit:
• 0,1
– Carácter
• ASCII de 7 u 8 bits (extensiones gráficas)
• EBCDIC de 8 bits (utilizado por los grandes computadores IBM)
– Enteros
• Números positivos y negativos representados en complemento a 2.
• Byte:
8 bits
• Media palabra (half-word):
16 bits
• Palabra:
32 bits
– Punto flotante
• IEEE 754: Estándar para la representación en punto flotante.
• Simple precisión (32 bits) y doble precisión (64 bits).
– Decimal
• Decimal empaquetado: Decimal codificado en binario (BCD), 4 bits para
cada dígito, dos dígitos por byte. Ejemplo: 01001001 -> 49
• Decimal no empaquetado. Ejemplo: 00000100 00001001 -> 4 9
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
24 de 64
Especificación del tipo de operando
• Dos alternativas:
– Codificarlo en el código de operación de la instrucción (caso más frecuente).
– Añadir identificadores al dato que posteriormente serán interpretados por el
hardware (método raramente utilizado)
• Tagged architectures: Máquina de Burroughs
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
25 de 64
Frecuencia de uso de los tamaños de operandos
0%
Doubleword
69%
74%
Word
Halfword
Byte
31%
Int Avg.
FP Avg.
19%
0%
7%
0%
0%
20%
40%
60%
80%
Frequency of reference by s ize
• Es importante que las arquitecturas soporten:
– Números enteros de 8, 16 y 32 bits.
– Números en punto flotante de 32 y 64 bits (estándar IEEE754).
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
26 de 64
Formatos de las instrucciones
• La información autocontenida en una instrucción se codifica con
unos y ceros y se empaqueta en grupos de bits que definen los
diferentes campos de una instrucción.
• Campos de una instrucción
Campo 1
Campo 2
...............
Campo n
11110011
11010
................
110000
• Alternativas de diseño:
– Instrucciones de longitud variable
• Alta densidad de código.
• Programas compactos o de tamaño reducido.
• Difícil implementación hardware.
– Instrucciones de longitud fija
• Mayor rendimiento (vía segmentación de las instrucciones)
• Los programas son de mayor tamaño.
• Fácil implementación hardware.
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
27 de 64
Formatos de las instrucciones en el procesador
MIPS
Sólo tres formatos:
• Formato R: add rd,rs,rt
op
6 bits
rs
5 bits
rt
5 bits
rd
5 bits
shamt funct Formato de instrucciones aritméticas
5 bits
6 bits Todas las instrucciones MIPS de 32 bits
000000
01010
11111
00011
00000
100000 0x015f1820
add $3,$10,$31
• Formato I: lw rt,inmediato(rs)
op
6 bits
rs
5 bits
rt
5 bits
100011
00011
00101
Dirección/inmediato
16 bits
0000000000100000
Formato de instrucciones carga
Todas las instrucciones MIPS de 32 bits
0x8c650020
lw $5,32($3)
• Formato J: j dirección
op
6 bits
000010
Fundamento de Computadores (1º II)
Dirección objetivo
26 bits
00000100000000000000000000
Cap 2: El nivel de lenguaje máquina
Formato de instrucciones bifurcación
Todas las instrucciones MIPS de 32 bits
0x08100000
j 0x400000
28 de 64
Ejemplo de arquitectura CISC
(Complex Instruction Set Computer)
• Máquina representativa CISC: VAX 11/780
– Objetivos de VAX:
• Compiladores sencillos y alta densidad de código.
– Estos objetivos dieron lugar a:
• Formato de instrucciones de longitud variable.
• Potentes modos de direccionamiento.
• Potentes instrucciones y codificación de las mismas.
• Arquitectura altamente ortogonal: El código de operación es independiente
de los modos de direccionamiento que son independientes de los tipos de
datos e incluso del número de operandos. Una instrucción puede utilizar
cualquier modo de direccionamiento y tipo de dato de los soportados.
– Ejemplo: SUMA
(código de operación) (tipos de datos:byte, word, ...)(nº de operandos: 2,3)
addb2
addw2 addl2
addf2
addd2
addb3
addw3 addl3
addf3
addd3
Cientos de operaciones se expanden a miles de instrucciones!
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
29 de 64
Ejemplo de arquitectura RISC
(Reduced Instruction Set Computer)
• Ejemplo de procesador RISC: MIPS
– Objetivos de MIPS
• Alto rendimiento vía segmentación.
• Facilitar la implementación hardware de las instrucciones.
• Compatibilidad con compiladores altamente optimizados.
– Estos objetivos dieron lugar a:
• Instrucciones sencillas.
• Modos de direccionamiento sencillos.
• Formato de instrucciones de longitud fija.
• Gran número de registros.
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
30 de 64
Procedimientos
• Definición: Fragmento de código que realiza una tarea concreta y que
puede ser llamado o activado desde otra parte del programa.
• Ventajas del uso de procedimientos
– Estructuración modular de los programas:
• Nos permite descomponer un programa complejo en otros más sencillos
que se pueden editar, compilar y depurar de forma independiente.
– Código reutilizable
• Librerías de procedimientos
Llamada a un procedimiento
nombre_proc (pa1, pa2,...)
p1, p2,..: parámetros actuales
Fundamento de Computadores (1º II)
Formato
Procedimiento nombre_proc(p1, p2,..)
declaraciones
inicio
<acciones>
fin
p1, p2,..: parámetros formales
Cap 2: El nivel de lenguaje máquina
31 de 64
Pasos en la llamada a un procedimiento
Procedimiento
Programa principal
•
Paso 1: Paso de parámetros. Colocar los
parámetros de paso al procedimiento (en
registros o stack).
Paso 2: Llamada al procedimiento
•
•
Paso 3: Salvar registros. Crear bloque de
activación
(adquirir
los
recursos
de
por
el
almacenamiento
necesitados
procedimiento). Guardar en el stack los
registros que se deseen preservar (callee
saving). Gestión del bloque de activación.
Paso 4: Cuerpo del Procedimiento. Ejecuta
tarea a realizar.
Paso 5: Colocar los resultados para pasarlos
al programa principal. Restaurar registros.
Destruye bloque de activación.
Paso 6: Retorno al procedimiento.
Regresa al programa principal (dirección
siguiente a la llamada de procedimiento).
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
32 de 64
Tipos de procedimientos
• Procedimiento anidado
– Un procedimiento A llama a otro B que a su vez llama a otro C y ......
Proc A
Guardar
Proc B
Recuperar
Guardar
Proc C
Recuperar
• Procedimiento recursivo
– Procedimiento que se llama a si mismo
• Procedimiento reentrante
Procedimiento FACTORIAL (N)
integer N, FACTORIAL
if N<= 1 then
return 1
else
return N*FACTORIAL(N-1)
end if
fin_procedimiento
– Proceso = código + estado (PC, registros, variables,..)
– Varios usuarios pueden hacer uso del mismo código cargado en memoria
pero manteniendo un estado para cada usuario.
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
33 de 64
La Pila (o stack)
• Estructura de datos tipo LIFO (Last Input First Output) útil para:
– Contener valores pasados a un procedimiento como parámetros.
– Salvar la información que se desee preservar en llamadas a procedimientos.
• Por ejemplo, registros que el invocador no quiere cambiar.
– Proporcionar a un procedimiento espacio para variables locales
• Operaciones básicas:
• Guardar (push) y recuperar (pop).
• Normalmente, la estructura de datos crece hacia posiciones más bajas
de memoria.
• Puntero de pila (Stack Pointer, SP)
– Puntero o registro cuyo contenido apunta a la cima de la pila.
– Ejemplo: MIPS utiliza el registro 29 ($29 o $sp) como puntero de pila.
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
34 de 64
Operaciones sobre la pila
Guardar (push)
Recuperar (pop)
1. Decrementar puntero
2. Escribir en memoria (store)
MIPS:
addi
$sp,$sp,-4
sw
$reg, 0($sp)
Memoria
1. Leer de memoria (load)
2. Incrementar puntero
MIPS:
lw
$reg, 0($sp)
addi
$sp,$sp,4
Dirección
Memoria
Baja
sp-4
Dirección
Baja
Valor guardado
sp
sp
Valor leído
sp+4
Alta
Fundamento de Computadores (1º II)
Alta
Cap 2: El nivel de lenguaje máquina
35 de 64
Bloque de activación antes, durante y después de
la llamada a un procedimiento
# Programa principal
.....
Llamar_a B(p1,p2,..)
Antes
# Procedimiento B(...)
<guardar registros>
<cuerpo>
<restaurar registros>
<retorno>
Dirección baja
de memoria
sp ->
sp ->
Durante
Después
Variables locales
Registros
guardados
Dirección de retorno
fpOLD
<- fpNEW
sp ->
<- fpOLD
<- fp
Dirección alta
de memoria
Estado de la pila antes, durante y después de la llamada a un procedimiento.
Fundamento de Computadores (1º II)
Cap 2:activación
El nivel de lenguaje máquina
Bloque de
sombreado
36 de 64
Ejemplo: Soporte a procedimientos de la
arquitectura MIPS
• Convenio de los programadores para el uso de los registros
–
–
–
–
–
–
•
$a0 - $a3: Registros para paso de hasta 4 parámetros.
$v0 - $v1: Registros para la devolución de resultados.
$gp: puntero global que apunta a un segmento de datos estáticos.
$sp: Puntero de pila.
$fp: Puntero de encuadre (frame pointer).
$ra: Registro para guardar la dirección de retorno al realizar la llamada.
Instrucción MIPS para llamada a procedimientos
– Jump - and - Link (jal)
• jal
ProcedureAddress
• jalr
registro
# $ra= PC+ 4; ir a ProcedureAddress
# $ra= PC+ 4; ir a (registro)
• Instrucción MIPS para el retorno de procedimientos
– Jump Register (jr)
• jr
$ra
# ir a la dirección dada por $ra
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
37 de 64
Arquitectura MIPS: Convenio para el uso de los
registros en llamadas a procedimientos
Nombre Nº reg.
Uso
Preservado
en llamadas?
$zero
0
Constante 0
-
$at
1
Reservado para el ensamblador
-
$v0-$v1
2-3
Valores de resultados y evaluación de expresiones
no
$a0-$a3
4-7
Paso de parámetros (hasta cuatro; más a través de la pila)
no
$t0-$t7
16-23
Registros temporales
no
$s0-$s7
16-23
Registros que deben preservarse
si
$t8-$t9
24-25
Registros temporales
no
$k0-$k1
26-27
Reservado para el Sistema Operativo
-
$gp
28
Puntero global (global pointer)
si
$sp
29
Puntero de pila (stack pointer)
si
$fp
30
Puntero de encuadre (frame pointer)
si
$ra
31
Dirección de vuelta (return address)
si
Las abreviaciones de dos letras y nombre de los registros reflejan los usos pensados para ellos en el convenio.
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
38 de 64
Ejemplo para MIPS
# Ejemplo para MIPS
# Programa principal
main: li
$a0,5
li
$a1,8
jal
multi
....................
SP=SP-20 Æ
# comienzo del procedimiento
multi: addi $sp,$sp,-20 # Crea bloque de activación.
# Salva registros. Crea variables locales si se necesitan.
sw
$fp, 16($sp) # guarda fp antiguo
sw
$ra, 12($sp) # guarda dirección de retorno
sw
$s0, 8($sp) # guarda $s0
sw
$s1, 4($sp) # guarda $s1
sw
$s2, 0($sp) # guarda $s2
addi $fp,$sp,16 # nuevo fp
SP Æ
# cuerpo procedimiento
.....
# Restaura registros
lw
$s2, 0($sp) # recupera $s2
lw
$s1, 4($sp) # recupera $s1
lw
$s0, 8($sp) # recupera $s0
lw
$ra, 12($sp) # recupera dirección de retorno
lw
$fp, 16($sp) # recupera fp antiguo
addi $sp,$sp,20 # Destruye bloque activación
jr
$ra
# retorna al programa principal
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
Dirección baja
de memoria
$s2
$s1
Registros salvados
$s0
$ra: dir. retorno
$fp: frame pointer
<- FP
Dirección alta
de memoria
39 de 64
Clasificación de las arquitecturas a nivel de
lenguaje máquina
• La clasificación puede realizarse atendiendo a varios criterios entre los
que destacamos:
– Almacenamiento de los operandos en la CPU.
• Además de en memoria ¿dónde se encuentran los operandos?
– Número de operandos explícitos por la instrucción.
– Posición del operando.
– Tipo de instrucciones
– Tipo y tamaño de los operandos
• Almacenamiento de los operandos en la CPU.
– Criterio más importante que nos permite diferenciar una arquitectura de otra.
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
40 de 64
Clasificación de las arquitecturas atendiendo al
almacenamiento de operandos en la CPU
• Alternativas para almacenar operandos en la CPU
Arquitectura
Arquitectura de Pila
Arquitectura de Acumulador
Arquitectura de Registros de
Operandos
explícitos
0
Destino de
resultados
Pila
Procedimiento para acceder a
operandos explícitos
Introducir y sacar de la pila
1
Acumulador
Cargar/almacenar acumulador
2ó3
Registros o
Cargar/almacenar registro o memoria
Propósito General
memoria
• Ejemplo: C= A + B (C,A y B variables en memoria)
Pila
Acumulador
Registros
PUSH A
LOAD A
LOAD R1, A
PUSH B
ADD B
ADD R1, B
ADD
STORE C
STORE C,R1
POP C
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
41 de 64
Ventajas y desventajas de cada una de las
arquitecturas
Tipo de máquina
Pila
Acumulador
Registro
Ventaja
Desventaja
Modelo sencillo para la evaluzación
de expresiones.
Instrucciones cortas. Buena densidad
de código
Instrucciones cortas.
Minimiza los estados internos de la
máquina
Modelo más general para la
generación de código.
Uso efectivo de los registros por los
compiladores.
Acceso no aleatorio a la pila. Difícil
generación de código eficiente.
Dificulta
una
implementación
eficiente.
Como el acumulador es sólo
almacenamiento temporal, el tráfico
de memoria es el más alto.
Todos los operandos deben ser
nombrados -> instrucciones más
largas.
- Años 60: Arquitecturas de pila.
- Años 70: Arquitecturas CISC (ej. VAX)
- Años 80: Arquitecturas RISC (ej. MIPS)
Las arquitecturas de registros son las que dominan hoy día!
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
42 de 64
Clasificación de las arquitecturas de registros de
propósito general
• Clasificación de las arquitecturas de registros atendiendo a:
– Número de operandos: 2 o 3.
• add r1,r2
# r1=r1 + r2
• add r1,r2,r3 # r1=r2 + r3
– Número de operandos en memoria: de 0 a 3.
• add r1,r2,r3 # r1=r2 + r3
• add r1,r2,B # r1=r2 + EA(A)
• add r1,B,A # r1=EA(A) + EA(B)
• add C,B,A # EA(C)=EA(B) + EA(A)
• Las arquitecturas de registros dominan hoy día.
– Los registros son más rápidos que la memoria
– Los registros son fáciles de usar por el compilador.
– Los registros pueden almacenar variables:
• Reducción del tráfico de memoria. Disminución del tiempo de ejecución.
• Mejor densidad de código: unos cuantos bits son suficientes para
especificar un registro. En cualquier caso, menos que los necesarios
para indicar una dirección de memoria.
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
43 de 64
Arquitecturas de registros de propósito general
más frecuentes
Tipo
Registro-Registro
(0,3)
Registro-Memoria
(1,2)
Memoria-Memoria
(3,3)
Ventajas
Desventajas
Instrucciones longitud fija.
Recuento de instrucciones más alto que las
Fácil codificación.
arquitecturas con referencias a memoria.
Modelo simple de generación de
código.
Los datos pueden ser accedidos sin La codificación de una dirección de
memoria y un registro en cada instrucción
cargarlos primero en registros.
Fácil formato de instrucción.
puede restringir el número de registros.
Buena densidad de código.
Los ciclos por instrucción varían por la
posición del operando.
Más compacta.
Gran variación en el tamaño de las
No emplean registros para datos instrucciones.
Los accesos a memoria crean cuellos de
temporales
botella importantes.
Notación (m,n). m: Número de operandos en memoria; n: Número de operandos totales.
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
44 de 64
Número de registros en arquitecturas populares
EDSAC
IBM701
IBM360
DEC PDP11
INTEL 8008
MOTOROLA 6800
DEC VAX
Número de registros de
propósito general
1
1
16
8
1
2
16
INTEL 8086
MOTOROLA 68000
INTEL 80386
MIPS
1
16
8
32
HP PA-RISC
SPARC
PowerPC
DEC ALPHA
32
32
32
32
Máquina
Fundamento de Computadores (1º II)
Estilo de arquitectura
Año
Acumulador
Acumulador
Registro-memoria
Registro-memoria
Acumulador
Acumulador
Registro-memoria, memoriamemoria
Acumulador extendido
Registro-memoria
Registro-memoria
Registro-Registro
(carga/almacenamiento)
“
“
“
“
1949
1953
1964
1970
1972
1974
1977
Cap 2: El nivel de lenguaje máquina
1978
1980
1985
1985
1986
1987
1992
1992
45 de 64
Lenguaje ensamblador
• Introducción.
• Ventajas e inconvenientes del lenguaje ensamblador.
• Funcionamiento del ensamblador.
• El montador de enlaces (o linker).
• Utilidades de los ensambladores.
• Lenguaje ensamblador del procesador MIPS R2000
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
46 de 64
Ventajas e inconvenientes del lenguaje
ensamblador
• Ventajas del lenguaje ensamblador
– Útil cuando es crítico alguno de los siguientes factores:
• Tiempo de ejecución del programa.
• Tamaño del programa.
– El programador puede seleccionar instrucciones específicas de la
arquitectura para realizar una determinada operación.
• Inconvenientes del lenguaje ensamblador
– Los programas son específicamente inherentes a la máquina.
– Son de mayor tamaño que los programas equivalentes escritos en lenguaje
de alto nivel. Menor productividad del desarrollo software.
– Los programas son difíciles de leer, escribir y pueden contener más errores.
• Soluciones híbridas para aprovechar la fortaleza de cada lenguaje
– La mayor parte del programa se escribe en alto nivel.
– Las secciones críticas en lenguaje ensamblador.
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
47 de 64
Funcionamiento del ensamblador
• Un ensamblador traduce un archivo con sentencias en lenguaje
ensamblador a un archivo de instrucciones máquina y datos binarios.
• Traducción en dos pasadas:
– Primera pasada:
• Calcula las posiciones de memoria que corresponden a los nombres
simbólicos que aparecen en el programa para que sean conocidas
cuando de traduzcan las instrucciones. Crea tabla de símbolos.
– Segunda pasada:
• Traduce cada sentencia del lenguaje ensamblador al combinar los
equivalentes numéricos de los códigos de operación, especificadores de
registros y rótulos de la tabla de símbolos en una instrucción legal.
• Rótulos o etiquetas
– Externos o globales: Pueden ser referenciados desde otro archivo distinto
de aquél en el que se define (hay que declararlos como tales).
– Internos o locales: Sólo puede ser referenciado en el archivo en el que se
define (locales por defecto).
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
48 de 64
El montador de enlaces (linker)
• El ensamblador procesa cada archivo de un programa de forma
individual. Solamente se conocen las direcciones de los rótulos locales.
• Necesidad de otra herramienta: El montador de enlaces (o linker).
– Combina una colección de archivos objetos y librerías (opcional) en otro
archivo ejecutable al resolver los rótulos externos.
– El ensamblador asiste al montador suministrándole una tabla de símbolos o
rótulos y referencias no resueltas.
Archivo
fuente
Ensamblador
Archivo
objeto
Archivo
fuente
Ensamblador
Archivo
objeto
Enlazador
Archivo
fuente
Ensamblador
Archivo
objeto
Librería
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
Archivo
ejecutable
49 de 64
Utilidades de los ensambladores
• Los ensambladores proporcionan diversas características (utilidades)
que facilitan al programador la escritura de los programas.
• Utilidades:
– Directivas para organizar datos en memoria.
• Permite al programador describir los datos de una manera más concisa
y natural que la representación binaria: decimal, ASCII, hexadecimal,...
– Macros
• Permiten nombrar una secuencia de instrucciones frecuentemente
utilizada. No confundir con procedimiento o subrutina.
– Pseudoinstrucciones
• Son proporcionadas por algunos lenguajes ensambladores y no forman
parte del repertorio de instrucciones del procesador. El ensamblador las
sintetiza a partir de instrucciones puras del procesador.
– Utilización de símbolos
• Muy útil en instrucciones de control de flujo o para hacer referencia a los
datos.
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
50 de 64
Lenguaje ensamblador MIPS R2000
• Componentes de un procesador MIPS
• Modos de direccionamiento
• Sintaxis del ensamblador
• Directivas del ensamblador soportadas por el simulador SPIM.
• Formato de las instrucciones.
• Repertorio de instrucciones
–
–
–
–
–
–
Aritméticas
Lógicas
Transferencia de datos
Movimiento de datos
Comparación
Salto y bifurcación
• Ejemplo de programa en ensamblador
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
51 de 64
Componentes de un procesador MIPS
• Componentes
– CPU
– Dos coprocesadores: 0 y 1.
Memory
• CPU: 32 registros de propósito general
– $0: Siempre contiene 0
– $1-$31: Propósito general
CPU
Coprocessor 1 (FPU)
Registers
Registers
$0
$0
$31
$31
• C0: 4 registros
– BadVAddr (reg. Nº 8), Status (reg. Nº 12)
– Cause (reg. Nº 13), EPC (reg. Nº 14)
• C1: 32 registros para punto flotante
– 16 registros simple precisión
• $f0, $f2, …. $f30 (32 bits)
– 16 registros doble precisión (64 bits
• $f0-$f1, $f2-$f3, …. $f30-$f31
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
Arithmetic
unit
Multiply
divide
Lo
Arithmetic
unit
Hi
Coprocessor 0 (traps and memory)
Registers
BadVAddr
Cause
Status
EPC
52 de 64
Convenio para el uso de la memoria en sistemas
basados en el procesador MIPS
0x7FFFFFFF
Pila
Segmento de pila
Datos dinámicos
0x10000000
Datos estáticos
Código
Segmento de datos
Segmento de texto
0x00400000
0x00000000
Fundamento de Computadores (1º II)
Reservada
Cap 2: El nivel de lenguaje máquina
53 de 64
Modos de direccionamiento
Register (direct)
op
rs
rt
rd
register
Immediate
Base+index
op
rs
rt
immed
op
rs
rt
immed
register
PC-relative
op
rs
rt
+
immed
PC
Fundamento de Computadores (1º II)
Memory
Cap 2: El nivel de lenguaje máquina
Memory
+
54 de 64
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
Nueva línea
• \t
Tab
• \”
Comillas
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
55 de 64
Ejemplo de sintaxis
############################################################################
#
Sintaxis del ensamblador
#
############################################################################
# Comienzo del segmento de datos
.data
0x10000000
init:
.word
0x10,25,0x11223344 # declaración de 3 variables tipo word (4 bytes)
string:
.asciiz
“Soy una cadena \n” # declaración de una cadena
# Comienzo del segmento de código
main:
.text
0x400000
.globl
main
# declaramos la etiqueta “main” como global
lw
$t0,-8($s0)
# comentario
addi
$t0,$t0,1
# comentario
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
56 de 64
Directivas del ensamblador de MIPS soportadas
por el simulador SPIM
•SPIM soporta un subconjunto de las directivas del ensamblador MIPS
– .align
n
– .ascii
– .asciiz
str
str
– .byte
– .half
– .word
b1,b2,...
h1,h2,...
w1,w2,...
– .float
– .double
f1,f2,...
d1,d2,...
– .space
n
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
–
–
–
–
.data
.text
.ktext
.kdata
<addr>
<addr>
<addr>
–
–
–
–
.globl
.extern
.set
.set
símbolo
símbolo size
noat
at
57 de 64
Formato de las instrucciones
Sólo tres tipos de formatos:
• Formato R: add rd,rs,rt
op
6 bits
rs
5 bits
rt
5 bits
rd
5 bits
shamt funct Formato de instrucciones aritméticas
5 bits
6 bits Todas las instrucciones MIPS de 32 bits
000000
01010
11111
00011
00000
100000 0x015f1820
add $3,$10,$31
• Formato I: lw rt,inmediato(rs)
op
6 bits
rs
5 bits
rt
5 bits
100011
00011
00101
Dirección/inmediato
16 bits
0000000000100000
Formato de instruciones de carga
Todas las instrucciones MIPS de 32 bits
0x8c650020
lw $5,32($3)
• Formato J: j dirección
op
6 bits
000010
Fundamento de Computadores (1º II)
Dirección objetivo
26 bits
000000000010000000000000000
Cap 2: El nivel de lenguaje máquina
Formato de instrucciones de bifurcación
Todas las instrucciones MIPS de 32 bits
0x08010000
j 0x400000
58 de 64
Repertorio de instrucciones MIPS:
Instrucciones aritméticas
Instrucción
sumar
sumar sin signo
sumar inmediato
sumar inmediato sin signo
restar
restar sin signo
dividir
dividir sin signo
multiplicar
multiplicar sin signo
valor absoluto
dividir
dividir sin signo
multiplicar
multiplicar
multiplicar sin signo
Fundamento de Computadores (1º II)
Ejemplo
add $1,$2,$3
addu $1,$2,$3
addi $1,$2,10
addiu $1,$2,10
sub $1,$2,$3
subu $1,$2,$3
Significado
$1= $2+$3
$1=$2+$3
$1=$2+10
$1=$2+10
$1=$2-$3
$1=$2-$3
Lo=$1÷$2
div $1,$2
Hi=$1mod$2
Lo=$1÷$2
divu $1,$2
Hi=$1mod$2
mult $1,$2
Hi,Lo=$1*$2
multu $1,$2
Hi,Lo=$1*$2
Pseudoinstrucciones
abs
$1=$2÷$3
div $1,$2,$3
(cociente)
$1=$2÷$3
divu $1,$2,$3
(cociente)
mul $1,$2,$3
$1=$2*$3
mulo $1,$2,$3
$1=$2*$3
mulou $1,$2,$3
$1=$2*$3
Cap 2: El nivel de lenguaje máquina
Comentarios
Posible excepción por desbordamiento
Posible excepción por desbordamiento
Posible excepción por desbordamiento
Posible excepción por desbordamiento
-
Posible excepción por desbordamiento
Posible excepción por desbordamiento
Posible excepción por desbordamiento
59 de 64
Repertorio de instrucciones MIPS:
Instrucciones lógicas
Instrucción
and
or
xor
nor
andi
ori
xori
shift left logical
shift left logical variable
shift right logical
shift right logical variable
shift right arithmetic
shift right arithmetic variable
Fundamento de Computadores (1º II)
Ejemplo
and $1,$2,$3
andi $1,$2,10
xor $1,$2,$3
nor $1,$2,$3
andi $1,$2,10
ori $1,$2,10
xori $1,$2,10
sll $1,$2,10
sllv $1,$2,$3
srl $1,$2, 10
srlv $1,$2,$3
sra $1,$2,10
srav $1,$2,$3
Significado
$1= $2&$3
$1=$2&10
$1=$2⊕$3
$1=~($2|$3)
$1=$2&10
$1= $2|10
$1=$2|10
$1= $2<<10
$1= $2<<$3
$1=$2>>10
$1=$2>>$3
$1=$2>>10
$1=$2>>$3
Cap 2: El nivel de lenguaje máquina
Comentarios
60 de 64
Repertorio de instrucciones MIPS:
Instrucciones de transferencia de datos
Instrucción
carga byte
carga byte sin ext. signo
carga media palabra
carga media palabra sin
extensión de signo
carga palabra
carga inmediata de la
parte más significativa
“load upper inmediate”
Carga
registro
del
coprocesador z
almacena byte
almacena media palabra
almacena palabra
almacena registro en
memoria registro del
coprocesador z
Ejemplo
lb $1,10($2)
lbu $1,10($2)
lh $1,10($2)
Significado
$1=M[10+$2]
$1=M[10+$2]
$1=M[10+$2]
Extiende el bit de signo
No extiende el bit de signo
Extiende el bit de signo
lhu $1,10($2)
$1=M[10+$2]
No extiende el bit de signo
lw $1,10($2)
$1=M[10+$2]
lui $1,50
$1=50*2
lwc1 $f0,10($2)
$f0= M[10+$2]
sb $1,10($2)
sh $1,10($2)
sw $1,10($2)
M[10+$2]=$1
M[10+$2]=$1
M[10+$2]=$1
swc1 $f0,10($2)
M[10+$2]=$f0
Carga inmediata
li $1,1000
Carga dirección
la $3,label
Fundamento de Computadores (1º II)
16
Comentarios
Carga un dato de 16 bits en la parte más
significativa del registro.
Pseudoinstrucciones
Carga de un dato de 32 bits
$1=1000
$3=dirección de Transfiere la dirección de memoria no el
contenido.
label
Cap 2: El nivel de lenguaje máquina
61 de 64
Repertorio de instrucciones MIPS:
Instrucciones de movimiento de datos
Instrucción
mover desde Hi
mover desde Lo
mover a Hi
mover a Lo
mover desde coprocesador z
mover al coprocesador z
transfiere o mueve
transfiere doble desde coproc. 1
Fundamento de Computadores (1º II)
Ejemplo
Significado
mfhi $1
$1= Hi
mflo $1
$1= Lo
mthi $1
Hi=$1
mtlo $1
Lo=$1
mfcz $1,$f0
$1=$f0
mtcz $1,$f0
$f0=$1
Pseudoinstrucciones
move $1,$2
$1=$2
$4=$F0
mfc1.d $4,$f0
$5=$F1
Cap 2: El nivel de lenguaje máquina
Comentarios
$f0-$f30: Registros del coprocesador 1
62 de 64
Repertorio de instrucciones MIPS:
Instrucciones de comparación
Instrucción
Inicializar menor que
Ejemplo
slt $1,$2,$3
Significado
if ($2<$3) then
$1=1
else
$1=0
endif
Comentarios
inicializar menor que sin signo
sltu $1,$2,$3
Inicializar menor que inmediato
slti $1,$2,5
Inicializar menor que inmediato sin signo sltiu $1,$3,$5
Inicializa igual
inicializa mayor o igual
inicializa mayor que
inicializa menor o igual
inicializa no igual
Fundamento de Computadores (1º II)
Pseudoinstrucciones
si ($2==$3) then
$1=1
seq $1,$2,$3
else
$1=0
endif
sge $1,$2,$3
sgt $1,$2,$3
sle $1,$2,$3
sne $1,$2,$3
Cap 2: El nivel de lenguaje máquina
63 de 64
Repertorio de instrucciones MIPS:
Instrucciones de salto y bifurcación
Instrucción
Ejemplo
Significado
si($1==$2) ir a PC+4 +100
salta sobre igual
beq $1,$2,100
si($1!=$2) ir a PC+4 +100
salta sobre no igual
bne $1,$2,100
si($1>=0) ir a PC+4 +100
salta sobre mayor o igual que cero
bgez $1,100
salta sobre mayor o igual que cero y
bgezal $1,1000 si($1>=0) $31=PC+4; ir a 1000
enlaza
.....
ir a 2000
bifurcar
j 2000
ir a $1
bifurcar registro
jr $1
$31=PC+4; ir a 10000
Bifurcar y enlazar
jal 10000
$31=PC+4; ir a $1
bifurcar y enlazar registro
jalr $1
Pseudoinstrucciones
si($1>=$2) ir a PC+4 +100
salta sobre mayor o igual
bge $1,$2,100
si($1>$2) ir a PC+4 +100
salta sobre mayor que
bgt $1,$2,100
si($1<=$2) ir a PC+4 +100
salta sobre menor o igual
ble $1,$2,100
si($1<$2) ir a PC+4 +100
salta sobre menor que
blt $1,$2,100
.....
Fundamento de Computadores (1º II)
Cap 2: El nivel de lenguaje máquina
Comentarios
64 de 64
Descargar