Вы находитесь на странице: 1из 11

Organizacin de Computadoras (5744)

Lenguaje Ensamblador II

Organizacin de Computadoras Clase 13


Mg. Javier Echaiz D.C.I.C. U.N.S. http://cs.uns.edu.ar/~jechaiz je@cs.uns.edu.ar

de Lenguaje Ensamblador

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

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.

Lenguaje de Alto Nivel Lenguaje Ensamblador Cdigo Mquina Hardware

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

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

Mg. Javier Echaiz

Organizacin de Computadoras (5744)

Lenguaje Ensamblador II

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Razones para estudiar LE


Lograr una mejor comprensin de la arquitectura bsica de la PC. Conocer tecnologas que solamente se pueden entender plenamente utilizando LE: modo protegido, FPU y MMX. Obtener una adecuada apreciacin de la labor desempeada por los compiladores.
7 31

Registros del x86


16 8 0

ah eax bh ebx ch ecx dh edx

ax

al

Accumulator

bx

bl

Base

cx

cl

Count

dx

dl

Data
8

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

31

16

sp esp bp ebp si esi di edi ip eip flags eflags

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

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

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

CF carry flag PF parity flag AF auxiliary flag ZF Zero Flag

SF sign flag DF direction flag OF overflow flag

Archivo en Lenguaje Ensamblador .asm

gcc (front-end)

ld (linker)

nasm
11

Archivo ELF Ejecutable


12

Mg. Javier Echaiz

Organizacin de Computadoras (5744)

Lenguaje Ensamblador II

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

NASM
NASM
Netwide Assembler

Construyendo un Programa

Mg. Javier Echaiz

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

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

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.

Fin del Repaso


15

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Set de instrucciones MIPS


Se aprender el set de instrucciones del MIPS, usado por NEC, Nintendo, Silicon Graphics y Sony entre otros. El set de instrucciones MIPS es un set de instrucciones RISC (ms que CISC) y es similar a otros sets de instrucciones RISC. El set de instrucciones RISC es caracterizado por:
Ser compacto. Ser un set de instrucciones regulares. Las operaciones toman todos los operandos desde el conjunto de registros de la mquina.
NOTA (Repaso): RISC = Reduced Instruction Set Computer CISC = Complex Instruction Set Computer

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

Mg. Javier Echaiz

Organizacin de Computadoras (5744)

Lenguaje Ensamblador II

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Simplicidad en el Diseo del Set de Instrucciones


Todos las instrucciones en MIPS tienen 3 operandos, otro ejemplo es sub a,b,c # a = b-c Esto es una ilustracin de un principio de diseo. La regularidad en el diseo del set de instrucciones mantiene una mquina simple (y rpida).
19

Expresin en Arbol y Orden de Evaluacin


Un conjunto alternativo de instrucciones para el ejemplo previo sera dado por: add a,b,c + b + add f,d,e + + + add a,a,f c + b c d e d e Ntese que se requiere una variable adicional, f pero contiene instrucciones independientes o en paralelo ((b+c)+(d+e)) (((b+c)+d)+e)

20

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

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

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Simplicidad, la aproximacin RISC


Gran nmero de registros. hay intercambio de velocidad y rea. Set de instrucciones regulares. tres registros especifican los operandos y el resultado para todas las operaciones (excepto load y store). Load y store son operaciones independientes. instrucciones separadas provistas para transferir datos desde memoria a registros y viceversa.

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

Mg. Javier Echaiz

Organizacin de Computadoras (5744)

Lenguaje Ensamblador II

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

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

Orden de los bytes (REPASO)


Las mquinas con direccionamiento al Byte se dividen en: Big-endian: usan la direccin del byte de ms a la izquierda como la direccin de la palabra (0, 1, 2, 3). Little-endian: usa el byte de ms a la derecha (3, 2, 1, 0). Los procesadores pueden numerar los bytes dentro de una palabra tal que el byte con el nmero menor est ms a la izquierda o ms a la derecha. Orden del byte: es la convencin usada por una mquina Little-endian: es usado por Intel 80x86, Pentium II, VAX, Alpha. Big-endian: es usado por IBM System 370/390, Motorola 680x0, Sun SPARC y la mayora de los RISC.
26

dato

El direccionamiento es por byte

100 1000 10 1
25

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

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

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Instrucciones
Tipo R
p.e. add $t0, $s1, $s2
Op rs rt rd shamt funct

Campos de las Instrucciones


Los campos en cada instruccin son: op - operacin de la instruccin. rs - primer registro operando fuente. rt - segundo registro operando fuente. y rd - registro operando destino (resultado). Shamt - cantidad de desplazamiento usado para instrucciones de desplazamiento. Funct - variante de operacin para algunos op codes. o Address - campo de 16 bits de offset de 30 direccin de memoria.

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

No se puede mantener la uniformidad tpica de las RISCs

35
6 bits

19
5 bits

8
5 bits

Astart
16 bits

29

Mg. Javier Echaiz

Organizacin de Computadoras (5744)

Lenguaje Ensamblador II

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

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

instr. formato op add R 0 sub R 0 lw I 35 sw I 43


Tamao en bits 6

rs reg reg reg reg


5

rt reg reg reg reg


5

rd reg reg n/a n/a


5

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

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Saltos Condicionales e Incondicionales (beq, bne)


Lo que distingue a una computadora de una simple calculadora es su habilidad para tomar decisiones. MIPS soporta dos tipos de instrucciones de salto: beq (branch if equal) bne (branch if not equal) beq $s3, $s4, L1 # salta a L1 si el contenido # de $s3 igual al de $s4 bne $s3, $s4, L1 # salta a L1 si el contenido # de $s3 no es igual al de # $s4

Implementacin de una instruccin IF


En un HLL se tiene if (i==j) go to L1; f=g + h L1 f=f - i Asignacin de registros f hasta j-----$s0 hasta $s4

Esto sera compilado as: beq $s3, $s4, L1 add $s0 ,$s1 ,$s2 L1: sub $s0,$s0,$s3

# va a L1 si i = j # f = g + h (no se ejecuta # si i=j) #f=f-i

33

34

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Implementacin de un ciclo While


En C se puede escribir: while (save(i) ==k) i=i+j El cual llega a ser: loop: add $t1,$s3,$s3 add $t1,$t1,$t1 add $t1,$t1,$s6 lw $t0, 0($t1) bne $t0,$s5,exit add $s3,$s3,$s4 j loop exit: ........ Asignacin de registros i,j,k-------$s3,$s4,$s5 $s6 contiene la base del arreglo save #reg. Temporal $t1 = 2*i #reg. Temporal $t1 = 4*i # $t1 = direccin de save(1) #reg. Temporal $t1 = save(i) # va a exit si save(i) k # i = i+j # va a loop

Comparaciones Distintas a la Igualdad


El set de instrucciones MIPS slo provee saltos para el test de igual a y no igual a. La instruccin slt se puede usar para generar saltos para menor que y mayor que. Compara dos registros y pone un tercer registro en 1 si el primero es menor que el segundo, de otra forma pone un 0 slt $t0,s3,s4 #$t0=1 si el valor de $s3<$s4 Una instruccin beq o bne puede usar el registro $zero. As usando el registro $zero=0 todos los saltos pueden ser generados usando bne, beq y slt.
36

35

Mg. Javier Echaiz

Organizacin de Computadoras (5744)

Lenguaje Ensamblador II

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Instruccin jr (jump register)

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

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

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

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

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

Mg. Javier Echaiz

Organizacin de Computadoras (5744)

Lenguaje Ensamblador II

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

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).

MIPS proporciona un registro slo para stack:


stack pointer ($sp): usado para almacenar la direccin del tope del stack.

Histricamente el stack crece hacia abajo.


43 44

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Stack Pointer

Ejemplo: Compilacin de un Procedimiento


Sea el siguiente procedimiento: int leaf_example (int h, int g, int i, int j) { int f; f = (g + h) - (i + j); return f; }
Para efectos de simplicidad supondremos que podemos sumar y restar constantes como 4, 8, 12. La variables g, h, i, j corresponden a los registros argumentos $a0, $a1, $a2, $a3 y f corresponde a $s0.
45 46

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Ejemplo: Compilacin de un Procedimiento


Hay que salvar los valores de los registros que se usarn en el procedimiento, pues estos cambiarn y puede que el programa llamador necesite esos valores antiguos. Se crea espacio para 3 palabras en el stack y as salvar los valores antiguos.
sub $sp, $sp, 12 sw $t1, 8($sp) sw $t0, 4($sp) sw $s0, 0($sp) # ajusta el stack para hacer espacio a tres tems # salva el registro $t1 para usar despus # salva el registro $t0 para usar despus # salva el registro $s0 para usar despus
47

Ejemplo: Compilacin de un Procedimiento


Ahora viene el cuerpo del procedimiento: add $t0, $a0, $a1 add $t1, $a2, $a3 sub $s0, $t0, $t1 # $t0 = g + h # $t1 = i + j # $s0 = f = $t0 - $t1 (g + h)-(i + j)

Retorna el valor de f: add $v0, $s0, $zero # retorna f ($v0 = $s0 + 0)

48

Mg. Javier Echaiz

Organizacin de Computadoras (5744)

Lenguaje Ensamblador II

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Ejemplo: Compilacin de un Procedimiento


Antes de retornar al programa llamador es necesario restaurar los registros $s0, $t1, $t0, a sus valores antiguos que tenan antes de entrar al procedimiento lw $s0, 0($sp) lw $t0, 4($sp) lw $t1, 8($sp) add $sp, $sp, 12 # restaura registro $s0 # restaura registro $t0 # restaura registro $t1 # ajusta el stack.

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).

El procedimiento termina con un salto al registro $ra jr $ra


49

As Cal est representado en C as:


67, 97, 108, 0 (cdigo ASCII en decimal)

50

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

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.

Instrucciones Tipo I (Inmediatas)


Para sumar la constante 4 al registro $sp por ejemplo, se usa la instruccin addi (add inmediate) addi $sp, $sp, 4 Tiene el mismo formato que las instrucciones lw y sw, y la constante tiene un valor de 16 bits 8 29 29 4 El rango de la constante puede ser extendida usando la instruccin lui (load upper inmediate) el cual pone los 16 bits del valor inmediato en los 16 bits ms significativos de un registro permitiendo que otra operacin especifique los 16 bits menores
51 52

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Literales de 32 bits
lui $t0,255 00111 0000 0100 0000000011111111

INSTRUCCIN jump (j)


Produce un salto a la direccin indicada en la misma instruccin J 10000 #salta a la localizacin 10000 Su formato es el tipo J
comprende un opcode de 6 bits seguido por una direccin de 26 bits

Contenido del reg $t0 despus de ejecuta---lui $t0,255

0000000011111111

0000000000000000

2
6 bits

10000
26 bits

Suma de los 16 inferiores a la constante---addi $t0,$t0,256

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

Mg. Javier Echaiz

Organizacin de Computadoras (5744)

Lenguaje Ensamblador II

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Direccionamiento en Saltos Condicionales


Las instrucciones de salto condicional usan el formato I con un campo de direcciones de 16 bits, para la direccin de salto. Esto restringira a los programas a alcanzar 216 bits o 64 K palabras de memoria si la direccin fuera usada como tal. Una alternativa es especificar un registro que sera sumado a la direccin de salto, de modo que una instruccin de salto condicional calculara
Program Counter (PC) = Registro + Direccin de salto

Ejemplo de Salto Amplio


Dado el siguiente salto, reemplazar esto por u par de instrucciones que ofrezca un salto mayor beq $s0, $s1, L1 Solucin: bne $s0, $s1, L2 j L1
55 56

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

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Modos de Direccionamiento MIPS


MIPS ofrece 5 modos de direccionamiento Direccionamiento por Registro
Donde el operando es un registro

Modos de Direccionamiento MIPS


Direccionamiento Base Desplazamiento
Donde el operando est en memoria en la direccin que es la suma de un registro (base) y una constante en la instruccin.

57

58

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Modos de Direccionamiento MIPS


Direccionamiento Inmediato
donde el operando es una constante dentro de la instruccin

Modos de Direccionamiento MIPS


Direccionamiento PC Relativo
Donde la direccin es la suma del PC y una constante en la instruccin

59

60

Mg. Javier Echaiz

10

Organizacin de Computadoras (5744)

Lenguaje Ensamblador II

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Modos de Direccionamiento MIPS


Direccionamiento Pseudodirecto
Donde la direccin de salto es los 26 bits de la instruccin concatenada con los bits superiores del PC

Decodificacin de Lenguaje Mquina


Se trata de obtener la instruccin completa en assembler a partir de los bits que la representan en lenguaje de mquina Considerar la siguiente instruccin en lenguaje de mquina 0000 0000 1010 1111 1000 0000 0010 0000 El primer paso es mirar el campo op (6 bits ms significativos), en este caso 0000. Esto indica de inmediato que se trata de una instruccin tipo R. Entonces hay que fijarse en el campo func (6 bits menos significativos), en este caso 100000 (32 decimal) que significa la operacin add .

61

62

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Organizacin de Computadoras Lenguaje Ensamblador II

Mg. Javier Echaiz

Decodificacin de Lenguaje Mquina


Sabiendo que es una instruccin tipo R, se puede deducir lo siguiente op rs rt rd shamt func
000000 00101 01111 10000 00000 100000

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

Por lo tanto, en assembler se tiene: add $s0, $a1, $t7

A partir de algn cdigo de mquina SIX decodifique el lenguaje mquina (llevndolo a ensamblador).
63 64

Mg. Javier Echaiz

11

Вам также может понравиться