Documente Academic
Documente Profesional
Documente Cultură
Lenguaje Ensamblador II
de Lenguaje Ensamblador
Lenguajes de Programacin
Lenguaje Ensamblador
Mismas instrucciones que el cdigo mquina. Cada opcode es reemplazado por un nombre simblico. Menos crptico para los seres humanos.
Ejemplo
La instruccin en lenguaje ensamblador para incrementar en uno el acumulador del Intel x86 es: inc eax
Ensamblador
Para ser ejecutado, un programa escrito en lenguaje ensamblador debe ser traducido primero a cdigo mquina mediante un programa ensamblador.
5
inc eax
Ensamblador
0x40
6
Lenguaje Ensamblador II
ax
al
Accumulator
bx
bl
Base
cx
cl
Count
dx
dl
Data
8
31
16
Stack Pointer Base Pointer Source Index Destination Index Instruction Pointer Flags
Registros de Segmentos
16 0
cs ds es fs gs ss
Code Segment Data Segment Extra Segment Extra Segment Extra Segment Stack Segment
10
Registro EFLAGS
Ciclo de desarrollo en LE
editor Archivo Objeto .o Mdulos y Bibliotecas de C Estndar
...
31
of df
11 10
sf zf
7 6
af
4
pf
2
cf
0
gcc (front-end)
ld (linker)
nasm
11
Lenguaje Ensamblador II
NASM
NASM
Netwide Assembler
Construyendo un Programa
edicin
http://sourceforge.net/projects/nasm
ensamble
enlace ejecucin
13
$ vi prueba.asm $ ls prueba.asm $ nasm -f elf prueba.asm $ ls prueba.asm prueba.o $ gcc prueba.o -o prueba $ ls prueba prueba.asm prueba.o $ prueba
14
Directivas
Son enunciados que permiten controlar la manera en que se ensambla un programa. Actan slo durante el ensamblado del programa y no generan directamente cdigo mquina.
OPERACIN: add
Las operaciones en la arquitectura MIPS tienen tres direcciones dos direcciones de operandos y una direccin resultado add a,b,c # la suma de b y c se coloca en a. Con tal operacin, necesitar n-1 instrucciones para sumar n operandos, esto es, la suma de b,c,d,e se realizara como sigue: add a,b,c # la suma de b y c es colocada en a. add a,a,d # la suma de b,c,y,d es colocada en a. add a,a,e # la suma de b,c,d y e es colocada en a. 18
17
Lenguaje Ensamblador II
20
Ejemplo
Cdigo HLL : A = B + C D=A-C Se puede traducir a: add a, b, c sub d, a ,e
Registros
La arquitectura MIPS tiene 32 registros cada uno de 32 bits. Ms pequeo ms rpido.
proveer mayor cantidad de registros hara ms lento el ciclo de reloj porque las seales elctricas toman ms tiempo para viajar lejos. requerira un rea ms significante en el chip.
21
22
Registros y Memoria
Claramente con slo 32 registros no se puede escribir programas muy complejos. El set de instrucciones tiene instrucciones para cargar y almacenar datos en memoria. La forma ms simple de ver una memoria es como un gran arreglo unidimensional donde la direccin es el ndice en el arreglo.
23 24
Lenguaje Ensamblador II
Instruccin LOAD
La instruccin MIPS que carga una palabra usa un registro para el dato, una direccin de comienzo y un registro que contiene el ndice u offset. Se escribe como sigue: lw $t0, start($s3) Si $s3 contiene el valor 12 entonces esta instruccin carga el valor 1 en el registro $t0 sw similarmente almacena el contenido de un registro en memoria
Direccin
$s3 $s3 + 4 $s3 + 8 $s3 + 12
dato
100 1000 10 1
25
Rango de Direccionamiento
Al igual como ubica registros, el compilador debe ubicar estructuras de datos tales como arreglos, para localizar en memoria. El direccionamiento en la arquitectura MIPS es por bytes. As es que hay un offset de 4 entre palabras en memoria en la diapositiva anterior. As para moverse desde una palabra a otra, el ndice del registro $s3 debe ser incrementado en 4. Las direcciones en las instrucciones load y strore son constantes. La direcciones en la arquitectura MIPS son de 32 bits as el set de instrucciones pueden direccionar 230 palabras de datos, o 1Gigaword (1.073.741.823).
Acceso a Memoria
Ms grande - significa ms lento. la memoria es un espacio para datos mucho ms grande que los registros. su acceso es correspondientemente ms lento el acceso a memoria cruza las fronteras del chip. debido a que los programas tienen ms variables que los registros disponibles, el compilador tratar de mantener las variables ms frecuentemente usadas en registros enviando el resto a memoria.
27 28
Instrucciones
Tipo R
p.e. add $t0, $s1, $s2
Op rs rt rd shamt funct
0
6 bits
17
5 bits
18
5 bits
8
5 bits
0
5 bits
32
6 bits
Tipo I
p.e.
op
lw $t0, Astart($s3)
rs=:reg. dir base rt= reg. destino Address offset
35
6 bits
19
5 bits
8
5 bits
Astart
16 bits
29
Lenguaje Ensamblador II
Resumen
Ensamblador
El lenguaje assembler es la representacin simblica de un programa. Sigue la pista de constantes y hace al ISA visible a los programadores. Las pseudo instrucciones son instrucciones que se encuentran en el lenguaje assembler pero que no tienen contrapartida en cdigo mquina. Un ejemplo es la instruccin move:
move $t0 $s3 # el contenido del registro $s3 va al $t0 add $t0,$zero,$s3 # implementacin del move
shamt funct address 0 32 n/a 0 43 n/a n/a n/a address n/a n/a address
5 6 16
31
32
Esto sera compilado as: beq $s3, $s4, L1 add $s0 ,$s1 ,$s2 L1: sub $s0,$s0,$s3
33
34
35
Lenguaje Ensamblador II
Procedimientos
Procedimiento o subrutina: es una herramienta que los programadores usan:
para estructurar programas para hacer ms fcil de entender para reusar el cdigo
instruccin jr (jump register) Esta instruccin salta a la direccin especificada por un registro jr $t0 #salta a la direccin especificada en $t0
Los procedimientos permiten a los programadores concentrarse slo en una porcin de la tarea a la vez. Parmetros actuando como interfaz entre el procedimiento y el resto del programa y datos, permitiendo pasar valores y retornar resultados MIPS dispone de los siguientes registros para usarlos en procedimientos:
$a0 - $a3 : 4 registros de argumentos para pasar parmetros $v0 - $v1 : 2 registros de valores en el cual se retornan resultados $ra : registro de direccin de retorno, para volver al punto origen
37
38
Procedimientos
En la ejecucin de un procedimiento se deben seguir los siguientes 6 pasos: Poner los parmetros en un lugar donde el procedimiento pueda alcanzarlos. UNIVERSAL!!!! Transferir el control al procedimiento. Conseguir espacio de almacenamiento necesitado por el procedimiento. Realizar la tarea deseada. Poner los resultados en el lugar donde el programa llamante pueda alcanzarlos. Devolver el control al punto de origen.
39
Procedimientos
La transferencia de control requerida en un llamado de procedimiento es otra variacin de bifurcacin que requiere un salto a una direccin del procedimiento llamado pero la direccin de retorno debe ser salvada. La instruccin jal (jump and link) realiza esta funcin jal ProcAddress Es una operacin similar a j pero salva la direccin de la actual siguiente instruccin en el registro $ra. La instruccin jr se puede usar para realizar el retorno desde el procedimiento, esto es: jr $ra # el registro $ra es el registro nmero 31.
40
Llamadas Anidadas
Pasaje de Parmetros
El pasaje de parmetros no usa una instruccin especial, sino que se usa una convencin. Los registros $a0 a $a3 son la convencin de software de MIPS. Si un procedimiento llamado llama a otro entonces los parmetros pueden ser llevados a memoria de la misma forma que la direccin de retorno. Hay una convencin para hacer esto:
Llamador salva: la subrutina llamante salva y almacena cualquier parmetro de los registros que deben ser conservados. El procedimiento llamado puede entonces usar todos los registros sin restriccin. Llamado salva: la rutina llamada es responsable de salvar y restaurar cualquier registro. El llamador en este caso no necesita restaurar registros despus de llamar.
42
Si un procedimeinto llama a otro la direccin de retorno sobreescribir a la direccin de retorno actual....ambos pueden usar el registro $ra. La solucin a esto es almacenar previamente estas direcciones en el stack.
Repaso
41
Lenguaje Ensamblador II
Stack (Pila)
Situaciones posibles:
Se necesitan ms registros para pasar variables (>4). Se necesitan ms de 2 registros para retornar valores resultados. Cualquier registro necesitado por el llamador debe ser restaurado a los valores que tena antes que el procedimiento fuera invocado.
Stack Pointer
El stack pointer apunta al tope del stack. El stack pointer se ajusta en una palabra por cada registro que se salva o restaura. Hay un vocabulario especial:
Push: proceso de poner un dato en el stack. Pop : proceso de sacar un dato desde el stack.
Los tres puntos anteriores implican usar la memoria para almacenar valores debido a la escasez de registros. La estructura ideal para esto es una pila o stack. Esta estructura se implementa en la memoria. El stack es una cola LIFO. Un stack necesita un puntero (stack pointer).
Stack Pointer
48
Lenguaje Ensamblador II
Caracteres
Los caracteres son combinados normalmente en un string, que tiene un nmero variable de caracteres Hay tres opciones para representar un string:
la primera posicin del string est reservada para dar el largo del string. una variable acompaante tiene el largo del string. la ltima posicin del string est indicada por un carcter usado para marcar el fin del string (C usa esta opcin, terminando un string con un byte cuyo valor es 0).
50
Constantes
Muchas variables son conocidas en el momento de compilar. Esto es, son constantes. Adems muchas de estas constantes son pequeas, p.e. el ajuste del stack pointer sumndole 4. cmo se puede evitar cargar estas constantes en memoria? La respuesta es introducir variantes en las operaciones aritmticas para el cual uno de los operandos es una constante. La solucin son las instrucciones tipo I. La I se establece por Inmediato el cual es el nombre tradicional para una constante almacenada en una instruccin.
Literales de 32 bits
lui $t0,255 00111 0000 0100 0000000011111111
0000000011111111
0000000000000000
2
6 bits
10000
26 bits
Otras formas de bifurcacin tales como bne y beq que usan el formato tipo I, slo pueden proveer una direccin de 16 bits Esto restringira a los programas a alcanzar 216 bits o 64 K palabras de memoria si la direccin fuera usada como tal.
54
0000000011111111
0000000100000000
53
Lenguaje Ensamblador II
Esto permite que un programa pueda ser tan grande como 232 y an pueda usar saltos condicionales Como el registro PC tiene la direccin actual, es posible saltar hasta 215 palabras ms all Este tipo de direccionamiento (ya visto) se denomina direccionamiento relativo - PC
57
58
59
60
10
Lenguaje Ensamblador II
61
62
En decimal
0 5 15 16 0 32
je Lengua or ad bl E ns a m
Coming Next
Se sabe que
rs = 5 = $a1 rt = 15 = $t7 rd = 16 = $s0
A partir de algn cdigo de mquina SIX decodifique el lenguaje mquina (llevndolo a ensamblador).
63 64
11