Transparencias para las clases de prácticas (PDF, semana 2).

Anuncio
Estructura de Computadores
4.- Programación en Ensamblador
Parte II
UNIVERSIDAD CARLOS III DE MADRID
Área de Arquitectura y Tecnología de Computadores
Contenido
‰ Directivas del ensamblador.
‰ Instrucciones de carga.
‰ Instrucciones de almacenamiento.
‰ Direccionamiento en carga y almacenamiento.
‰ Introducción a los saltos
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 2 –
Segmento de datos
‰ Permite reservar posiciones de memoria en el
segmento de datos.
‰ Iniciado por la directiva del ensamblador .data
z Permite etiquetar posiciones de memoria.
z Se puede indicar (opcionalmente) la posición de inicio.
z En la sección data se pueden usar otras directivas.
.data
#posiciones de memoria
.text
#código del programa
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 3 –
Directiva .word
‰ Permite almacenar datos de 32 bits.
x:
v:
.data
.word 10
.word 1,0xffffffff, 3, 5
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 4 –
Direccionamiento a nivel de byte
‰ 1 palabra = 4 bytes.
‰ Direcciones de memoria de MIPS Æ Dirección de un
byte.
‰ Direcciones de palabras son múltiplos de 4.
‰ Dentro de una palabra hay dos posibilidades
z Big Endian.
z Little Endian.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 5 –
Directiva .byte
‰ Permite almacenar datos de 8 bits
x:
y:
.data
.byte 255, 1, 2, 3
.byte 0x77, 0xff, 0x77, 0xff
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 6 –
Directiva .half
‰ Permite almacenar datos de 16 bits.
x:
y:
.data
.half 355, 1, 2, 3
.half 0x0077, 0x1ff, 0x707, 0xffaa
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 7 –
Directivas .float y .double
‰ Almacenan números en simple y doble precisión
x:
y:
.data
.float 1.3e-1
.double 1.5e+2, 0.5e-4
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 8 –
Directivas .ascii y .asciiz
‰ Almacenan cadenas con terminador nulo (.asciiz) o
sin terminador (.ascii).
cad1:
cad2:
cad3:
.data
.ascii “Hola”
.asciiz “Hola”
.ascii “Hola”
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
H o
l
a
H o
l
a
H o
l
a
\0
Página – 9 –
Directiva .space
‰ Reserva de espacio en el segmento de datos.
z Útil para reserva de espacio para arrays.
v:
.data
.space
Segmento de pila
7
Segmento de datos
Segmento de texto
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 10 –
Alineación – Directiva .align
‰ Alinea el siguiente dato a una dirección
múltiplo de 2n.
Cad1:
byte1:
.data
.asciiz "Hola"
.align 1
.byte 0xff
.align 1
.byte 0x2f
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 11 –
Tipos de instrucciones MIPS
‰ Instrucciones
z Son instrucciones reales del microprocesador.
‰ Pseudoinstrucciones
z Son instrucciones que el ensamblador simula mediante
varias instrucciones.
z Hacen uso interno del registro $at.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 12 –
Instrucciones de carga
‰ lw $reg, dir
z Instrucción.
z Load word.
z Carga en el registro $reg la palabra que se encuentra en la
dirección de memoria indicada por dir.
‰ ld $reg, dir
z Pseudoinstrucción.
z Load doubleword
z Carga en los registros $reg y $reg+1 el valor de 64 bits que
se encuentra almacenado a partir de la dirección de
memoria indicada por dir.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 13 –
Instrucciones de carga
‰ la $reg, dir
z Pseudoinstrucción.
z Load address.
z Carga la dirección en el registro reg.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 14 –
Instrucciones de carga
‰ lui $reg, inm
z Instrucción.
z Load upper inmediate.
z Carga el dato inmediato inm (de 16 bits) en la mitad
superior del registro $reg.
‰ li $reg, inm
z Pseudoinstrucción.
z Load inmediate.
z Carga el dato inmediato inm en el registro $reg.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 15 –
Instrucciones de carga
‰ lb $reg, dir
z Instrucción.
z Load byte.
z Carga en el registro $reg el byte que se encuentra en la
dirección de memoria indicada por dir.
z Extiende signo del valor cargado en el registro
‰ lbu $reg, dir
z Instrucción.
z Load byte unsigned.
z Carga en el registro $reg el byte que se encuentra en la
dirección de memoria indicada por dir.
z No extiende signo del valor cargado en el registro.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 16 –
Instrucciones de carga
‰ lh $reg, dir
z Instrucción.
z Load halfword.
z Carga en el registro $reg el valor de 16 bits que se
encuentra en la dirección de memoria indicada por dir.
z Extiende el signo del valor cargado en el registro.
‰ lhu $reg, dir
z Instrucción.
z Load halfword unsigned.
z Carga en el registro $reg el valor de 16 bits que se
encuentra en la dirección de memoria indicada por dir.
z No extiende el signo del valor cargado en el registro.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 17 –
Instrucciones de carga
‰ lwl $reg, dir
Instrucción.
z Load word left.
z dir puede ser una dirección no alineada.
z Carga los bytes desde la posición dir hasta el límite inferior de
palabra en el registro $reg, rellenando con 0 por la derecha.
z
‰ lwr $reg, dir
Instrucción.
z Load word right.
z dir puede ser una dirección no alineada.
z Carga los bytes desde la posición dir hasta el límite superior de
palabra en el registro $reg, rellenando con 0 por la izquierda.
z
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 18 –
Instrucciones de carga
‰ ulh $reg, dir
z Pseudoinstrucción.
z Unaligned load halfword
z dir puede ser una dirección no alineada.
z Carga en el registro $reg el valor de 16 bits que se
encuentra en la dirección de memoria indicada por dir.
z Extiende el signo del valor cargado en el registro.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 19 –
Instrucciones de carga
‰ ulhu $reg, dir
z Pseudoinstrucción.
z Unaligned load halfword unsigned.
z dir puede ser una dirección no alineada.
z Carga en el registro $reg el valor de 16 bits que se
encuentra en la dirección de memoria indicada por dir.
z No extiende el signo del valor cargado en el registro.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 20 –
Instrucciones de carga
‰ ulw $reg, dir
z Pseudoinstrucción.
z Unaligned load word.
z dir puede ser una dirección no alineada.
z Carga en el registro $reg el valor de 32 bits que se
encuentra en la dirección de memoria indicada por dir.
z No extiende el signo del valor cargado en el registro.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 21 –
Instrucciones de carga
‰ lwc0
‰ lwc1
‰ lwc2
‰ lwc3
$reg,
$reg,
$reg,
$reg,
dir
dir
dir
dir
z Carga en el registro $reg del correspondiente coprocesador
la palabra que se encuentra en la dirección indicada por dir.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 22 –
Instrucciones de almacenamiento
‰ sw $reg, dir
z Instrucción.
z Store word.
z Guarda el valor de $reg en la dirección dir.
‰ sd $reg, dir
z Pseudoinstrucción.
z Store doubleword.
z Guarda el valor de los registros $reg y $reg+1 en la
dirección dir.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 23 –
Instrucciones de almacenamiento
‰ sb $reg, dir
z Instrucción.
z Store byte.
z Guarda el byte de menor peso del registro $reg en la
dirección dir.
‰ sh $reg, dir
z Instrucción.
z Store halfword.
z Guarda la media palabra de menos peso del registro $reg en
la dirección dir.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 24 –
Instrucciones de almacenamiento
‰ swl $reg, dir
z Instrucción.
z Store word left.
z dir puede ser una dirección no alineada.
z Rellena desde la dirección dir hasta el limite inferior de la
palabra con los bytes de la parte izquierda del registro $reg.
‰ swr $reg, dir
z Instrucción.
z Store word right.
z dir puede ser una dirección no alineada.
z Rellena desde la dirección dir hasta el límite superior de la
palabra con los bytes de la parte derecha del registro $reg.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 25 –
Instrucciones de almacenamiento
‰ ush $reg, dir
z Pseudoinstrucción.
z Unaligned store halfword.
z dir puede ser una dirección no alineada.
z Guarda la media palabra de menos peso del registro $reg en
la dirección dir.
‰ usw $reg, dir
z Pseudoinstrucción.
z Unaligned store word.
z dir puede ser una dirección no alineada.
z Guarda la palabra del registro $reg en la dirección dir.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 26 –
Instrucciones de carga
‰ swc0
‰ swc1
‰ swc2
‰ swc3
$reg,
$reg,
$reg,
$reg,
dir
dir
dir
dir
z Guarda la palabra del registro $reg del correspondiente
coprocesador en la dirección dir.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 27 –
Direccionamiento
‰ Formato de instrucción de carga y almacenamiento:
z op $reg, dir
‰ dir puede referenciar el valor de diversas formas
z Diversos tipos de direccionamiento.
‰ Razones:
z Poder direccionar todo el mapa de memoria.
z Disponer de direccionamientos más rápidos para los accesos
más frecuentes.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 28 –
Direccionamiento inmediato
‰ Objeto = Dato inmediato.
z op $reg, inm
OP
6 bits
0
$reg
5 bits
5 bits
inm
16 bits
lui $1, 0xa73b
0x0f
6 bits
0
1
5 bits
5 bits
0xa73b
16 bits
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 29 –
Direccionamiento indirecto
‰ Objeto se obtiene a través de la dirección
almacenada en otro registro.
z op $reg1, ($reg2)
OP
6 bits
$reg2
5 bits
$reg1
5 bits
0
16 bits
lw $t1, ($t2)
0x23
0xa
6 bits
5 bits
0x9
5 bits
0
16 bits
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 30 –
Ejemplo
.data
.word 0x11223344
.word 0x55667788
.text
.globl main
x:
y:
main:
la
lw
jr
$t1, x
$t2, ($t1)
$ra
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 31 –
Direccionamiento indexado
‰ Dirección del objeto se obtiene sumando el valor de
un registro a un desplazamiento.
z op $reg1, desplazamiento($reg2)
OP
6 bits
$reg2
5 bits
$reg1
5 bits
desplazamiento
16 bits
lw $t1, 300($t2)
0x23
0xa
6 bits
5 bits
0x9
5 bits
0x012c
16 bits
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 32 –
Salto incondicional
‰ j dir
Instrucción.
z Jump.
z Salta a la dirección dir.
z
‰ beq $reg1, $reg2, dir
Instrucción.
z Branch if equal.
z Salta a la dirección dir si $reg1 es igual a $reg2
z
‰ bne $reg1, $reg2, dir
Instrucción.
z Branch if not equal
z Salta a la dirección dir si $reg1 no es igual a $reg2
z
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 33 –
Actividad
‰ Escriba un programa que sume todos los elementos
de un array de números enteros.
z El array tendrá 12 posiciones.
z Cada posición estará formada por un número entero de 16
bits.
z El programa dejará el resultado en $s0.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 34 –
Actividad
‰ Escriba un programa que cuente las vocales que hay
en una cadena.
z ¡¡ Idea !! Î Utilice un vector con los valores de las vocales
para realizar las comparaciones.
Área de Arquitectura y Tecnología de Computadores
UNIVERSIDAD CARLOS III DE MADRID
Estructura de Computadores – Programación en ensamblador (II)
Curso 2005/2006
Página – 35 –
Descargar