Sunteți pe pagina 1din 61

INSTRUCCIONES Y

DIRECCIONAMIENTO
ndice
Visin abstracta del hardware
1

Formatos de instruccin
2

Aritmtica simple e instrucciones lgicas Instrucciones


3 load y store

Instrucciones jump y branch


4

Modos de direccionamiento
5
Visin abstracta del hardware
Cules son las partes de un Usuario?
Visin abstracta del hardware
Es necesario aprender esta interfaz para ser capaz de
instruir a la computadora a realizar tareas
computacionales de inters. Cuando se familiarice con el
conjunto de instrucciones de una mquina.

32 bits core y tiene una arquitectura de


maquina de Von Neumann

El conjunto de instrucciones MiniMIPS (MIPS mnimos)


es bastante similar a lo que uno encuentra en muchos
procesadores modernos
Visin abstracta del hardware
MiniMIPS es un conjunto de instrucciones load/store
(carga/almacenamiento).

Load Store

Los elementos de Operaciones que


datos se deben van hacia registro
copiar o cargar y se deben copiar
en registros antes explcitamente de
de procesarlos vuelta a la
memoria por
operaciones de
almacenamiento
separadas.
Visin abstracta del hardware
Es necesario saber acerca de esquemas
de almacenamiento de datos en memoria,
funciones de las instrucciones de carga y
almacenamiento, tipos de operaciones
permitidas en los elementos de datos que
se conservan en los registros y algunos
otros aspectos sueltos que permiten la
programacin eficiente.
Visin abstracta del hardware
El programador (compilador) de lenguaje
ensamblador se relaciona con:
Registros. Localidades (locations) de memoria
donde se pueden almacenar datos.
Instrucciones de mquina que operan sobre y
almacenan datos en los registros o memoria.
Visin abstracta del hardware

Subsistema de memoria y procesamiento de mnimos.


Visin abstracta del hardware
a la unidad de memoria MiniMIPS, con hasta 2^30
palabras (2^32 bytes)
(EIU) (FPU) (TMU)

una unidad de una unidad de una unidad de


ejecucin y punto flotante desvo y
entero memoria
Interpreta y
ejecuta las
instrucciones
MiniMIPS
bsicas
32 registros de
propsito
general
32 bits de
ancho
Ubicaciones de
memoria. (ALU)
Visin abstracta del hardware
Formatos de instruccin
a=b+c

Una instruccin de mquina MiniMIPS tpica es


add $t8, $s2, $s1
Que hace que los contenidos de los registros $s2
y $s1 se sumen y que el resultado se almacene
en el registro $t8.
Formatos de instruccin
Formatos de instruccin
g = (b + c) (e + f)
add $t8,$s2,$s3 # poner la suma b + c en $t8 add
$t9,$s5,$s6 # poner la suma e + f en $t9 sub
$s7,$t8,$t9 # fija g en ($t8) ($t9)

Al escribir programas en lenguaje de mquina, es


necesario proporcionar enteros que especifiquen
direcciones de memoria o constantes numricas. Tales
nmeros se especifican en formato decimal (base 10) o
hexadecimal (base 16, o hexa para abreviar) y
automticamente se convierten al formato binario para
procesamiento de mquina.
Formatos de instruccin
Una instruccin de mquina para una operacin
aritmtica/lgica especifica un cdigo de operacin
(opcode), uno o ms operandos fuente y, usualmente, un
operando de destino.
Opcode es un cdigo binario (patrn de bits) que define
una operacin.
Los operandos de una instruccin aritmtica o lgico
pueden provenir de una diversidad de fuentes.
Al mtodo que se usa para especificar dnde se
encuentran los operandos y a dnde debe ir el resultado
se le refiere como modo (o esquema) de
direccionamiento
Formatos de instruccin

3 formatos:
(R) Registro
(I) Inmediato
(J) Salto
Formatos de instruccin
La simplicidad y uniformidad de los formatos de
instruccin son comunes en los modernos RISC (reduced
instruction-set computer, computadora con conjunto de
instrucciones reducido) cuya meta es ejecutar las
operaciones de uso ms comn tan rpido como sea
posible, acaso a costa de las menos comunes.
De los 64 opcodes posibles, los subconjuntos no
traslapantes se asignan a las clases de instruccin en
forma tal que el hardware puede reconocer fcilmente la
clase de una instruccin particular y, en consecuencia, la
interpretacin adecuada para los campos restantes.
Formatos de instruccin
INSTRUCCIONES REGISTER
Operan en los dos registros identificados en los
campos rs y rt y almacenan el resultado en el
registro rd.
Para tales instrucciones, el campo funcin (fn)
sirve como una extensin de los opcode, para
permitir que se definan ms operaciones y que
se use el campo cantidad de corrimiento (sh) en
instrucciones que especifican una cantidad de
corrimiento constante.
Formatos de instruccin
INSTRUCCIONES INMEDIATE
Son de dos variedades diferentes, en las
instrucciones inmediato:
1) El campo operando de 16 bits (en los bits 0-
15) retiene un entero que juega el mismo papel
que rt en las instrucciones de tipo R (la operacin
especificada se realiza en el contenido del
registro rs y el operando inmediato el resultado
se almacena en el registro rt).
Formatos de instruccin
INSTRUCCIONES INMEDIATE
2)En las instrucciones load, store o branch, el
campo de 16 bits se interpreta como un offset
(desplazamiento), o direccin relativa, que se
debe agregar al valor base en el registro rs
(contador de programa) para obtener una
direccin de memoria para lectura o escritura
(transferencia de control).
Formatos de instruccin
INSTRUCCIONES INMEDIATE
Para accesos de datos, el offset se interpreta
como el nmero de bytes hacia adelante
(positivo) o hacia atrs (negativo) en relacin con
la direccin base. Para la instruccin branch, el
offset est en palabras, dado que las
instrucciones siempre ocupan palabras de
memoria completa de 32 bits.
Formatos de instruccin
INSTRUCCIONES JUMP
Provocan transferencia de control incondicional a
la instruccin en la direccin especificada.
Puesto que las direcciones MiniMIPS tienen 32
bits de ancho, mientras que en el campo
direccin (address) de una instruccin de tipo J
slo estn disponibles 26 bits, se usan dos
convenciones.
Formatos de instruccin
INSTRUCCIONES JUMP
Primera, se supone que el campo de 16 bits
porta una direccin de palabra en oposicin a
una direccin de byte; por tanto, el hardware liga
dos 0 al extremo derecho del campo address de
26 bits para derivar una direccin de palabra de
28 bits.
Los cuatro bits an perdidos se ligan al extremo
izquierdo de la direccin de 28 bits en una forma
que se describir mas adelante
Aritmtica simple e instrucciones lgicas
Las instrucciones lgicas operan en un par de
operando sobre una base bit a bit. Las
instrucciones lgicas en MiniMIPS incluyen las
siguientes:
and $t0,$s0,$s1 # fija $t0 en ($s0) ^ ($s1)
or $t0,$s0,$s1 # fija $t0 en ($s0) ($s1)
xor $t0,$s0,$s1 # fija $t0 en ($s0) ($s1)
nor $t0,$s0,$s1 # fija $t0 en (($s0) ($s1))
Aritmtica simple e instrucciones lgicas
Usualmente, un operando de una operacin aritmtica o
lgica es constante. Aunque es posible colocar esta
constante en un registro y luego realizar la operacin
deseada en dos registros, sera ms eficiente usar
instrucciones que especificaran de manera directa la
constante deseada en una instruccin de formato I.
addi $t0,$s0,61 # fija $t0 en ($s0)+61 (decimal)
No existe subi
Aritmtica simple e instrucciones lgicas
Tres de las instrucciones lgicas recin
introducidas tambin tienen versiones inmediatas
o de formato I:
andi $t0,$s0,61 # fija $t0 en ($s0) 61
ori $t0,$s0,61 # fija $t0 en ($s0) 61
xori $t0,$s0,0x00ff # fija $t0 en ($s0) 0x00ff

Opcode 12(001100)
Andi 13(001101)
Oir 14(001110)
Aritmtica simple e instrucciones lgicas
Ejemplo 1
Una palabra de 32 bits en $s0 retiene un byte de datos en
las posiciones de bit 0-7 y una bandera de estado (status
flag) en la posicin de bit 10. Otros bits en la palabra
tienen valores arbitrarios (impredecibles). Desempaque la
informacin en esta palabra, coloque el byte de datos en
el registro $t0 y la bandera de estado en el registro $t1. Al
fi nal, el registro $t0 debe retener un entero en [0, 255]
correspondiente al byte de datos y el registro $t1 debe
retener un valor distinto de cero si la bandera de estado
es 1.
Aritmtica simple e instrucciones lgicas
Ejemplo 1 Solucin
Los campos de una palabra se pueden extraer al operar AND la
palabra con una mscara (mask) predefinida, una palabra que
tenga 1 en las posiciones de bit de inters y 0 en cualquier otra
parte. Por ejemplo, al operar AND la palabra con 0x000000ff
(que en binario tiene 1 slo en sus ocho posiciones de bit
menos significativas) tiene el efecto de extraer el byte de la
extrema derecha. Cualquier bit de bandera deseado se puede
extraer de forma similar a travs de operar AND con una
mscara que tenga un solo 1 en la posicin deseada. Por ende,
las siguientes dos instrucciones logran lo que se requiere:

Andi $to, $s0, 0, 00ff #mascara con 1 en el extremo derecho


Andi $t1, $s0, 0, 0400 #mascara con un solo 1 en la posicin 10
Instrucciones load y store
Las instrucciones load y store transfieren
palabras completas (32 bits) entre memoria y
registros.
Cada una de esas instrucciones especifica un
registro y una direccin de memoria. El registro,
que es el destino de datos para carga y fuente de
datos para almacenar, se especifica en el campo
rt de una instruccin de formato I.
Instrucciones load y store
La direccin de memoria se especifica en dos partes que
se suman para producir la direccin: el entero con signo
de 16 bits en la instruccin es un offset constante que se
aade al valor base en el registro rs. En formato de
lenguaje ensamblador, el registro source/destination
(fuente/destino) rt se especifica primero, seguido por el
offset constante y el registro base rs entre parntesis. Al
poner rs entre parntesis, ello constituye un recuerdo de
la notacin de indexado A(i) en lenguajes de alto nivel.
Lw $to,40($s3) #carga mem[40+($s3)] en $to
Ls $to, A($s3) #almacena ($t0) en mem[40+($s3)
#($s3) significa contenido de $s3
Instrucciones load y store
Instruccin load que permitir la colocacin de
una constante arbitraria en un registro deseado.
Una pequea constante, que sea representable
en 16 bits o menos, se puede cargar en un
registro mediante una sola instruccin addi, cuyo
otro operando es el registro $zero (que siempre
retiene 0). Una constante ms grande se debe
colocar en un registro en dos pasos.
Instrucciones load y store
Los 16 bits superiores se cargan en la load upper
immediate (carga superior inmediata) lui y entonces los
16 bits inferiores se insertan mediante una or immediate
(ori). Esto es posible porque lui llena la mitad inferior del
registro de destino con 0, de modo que cuando estos bits
se operan OR con el operando inmediato, ste se copia
en la mitad inferior del registro.mitad superior del registro
a travs de la instruccin.

Lui $s0,61 #el valor inmediato 61(decimal)


#se carga en la mitad superior de $s0
#y los 16 bits inferiores se fijan en 0s
Instrucciones load y store
Instrucciones MiniMIPs lw y sw y sus convenciones de
direccionamiento de memoria que permite el acceso
simple a elementos de arreglos va una direccin base y
un offset(=4i)
Instrucciones load y store
Instrucciones lui permite cargar el valor arbitrario
de 16its en la mitad superior de un registro, y la
otra mitad se fija en 0.
Instrucciones load y store
Ejemplo 1
Considere el patrn de bits correspondiente a
una instruccin addi. Muestre cmo se puede
cargar en el registro $s0 este patrn de bits
particular. Y cmo se puede poner en $s0 el
patrn de bits que consiste todo de varios 1?
Instrucciones load y store
Ejemplo 1 Solucin
La mitad superior del patrn de bits de la fi gura 5.6
tiene la representacin hexa 0x2110, mientras que
la mitad inferior es 0x003d. Por ende, las siguientes
dos instrucciones logran lo que se requiere:
Lui $s0, 0 2110 #pone mitad superior de patron en $s0
Ori $s0, 0 003d #pone mitad superior de patron en $s0
Estas dos instrucciones, con sus operandos inmediatos
cambiados a 0xffff, podra colocar el patrn de todos los 1 en
$s0. Una forma ms simple y rpida sucede a travs de la
instruccin nor:
Nor $s0, $zero, $zero #porque (0v0) =1
Instrucciones jump y branch
En los MiniMIPS estn disponibles las siguientes dos
instrucciones jump (saltar) incondicionales:
j verify # ir a la localidad memoria llamada verify
jr $ra # ir a la localidad cuya direccin est en $ra;
# $ra puede retener direccin de retorno de
# un procedimiento
Instrucciones jump y branch
jump simple, que causa que la ejecucin del
programa procede de la localidad cuya direccin
numrica o simblica se ofrece, en lugar de
continuar con la siguiente instruccin en
secuencia.
Jump register (registro de salto), o jr, especifica
un registro que retiene la direccin blanco de
salto. Con frecuencia, este registro es $ra, y se
usa la instruccin jr $ra para efectuar un retorno
desde un procedimiento al punto desde donde se
llam a ste.
Instrucciones jump y branch
Para la instruccin j, se aumenta el campo
address de 26 bits en la instruccin con 00 a la
derecha y cuatro bits de orden superior del
contador de programa (PC) a la izquierda para
formar una direccin completa de 32 bits. A esto
se le llama direccionamiento seudodirecto
Instrucciones jump y branch
Dado que en la prctica, por lo general, el PC se
incrementa muy pronto en el ciclo de ejecucin
de la instruccin (antes de la decodificacin y
ejecucin de la instruccin), se supone que se
usan 4 bits de orden superior de PC
incrementado para aumentar el campo direccin
de 26 bits.
Instrucciones jump y branch
La instruccin jump j, de los minimins es una instruccin
que se muestra junto con como se obtiene su direccion
blanco efectiva.
La instruccin jump register(jr) es de tipo R, siendo
registro efectivo usualmente $ra
Instrucciones jump y branch
bltz $s1,L # bifurcacin en ($s1)< 0
beq $s1,$s2,L # bifurcacin en ($s1)=($s2)
bne $s1,$s2,L # bifurcacin en ($s1) ($s2)
slt $s1,$s2,$s3 # si ($s2) <($s3), fija $s1 en 1
# sino fija $s1 en 0; esto es
# usualmente se sigue por beg o bne
slti $s1,$s2,61 # si ($s2) <61, fija $s1 en 1
# sino fija $s1 en 0
Instrucciones jump y branch
Las instrucciones branch condicionales permiten
transferir el control a una direccin especfica
cuando se satisface una condicin de inters.
En los MiniMIPS existen tres instrucciones
branch bsicas basadas en comparacin para las
que las condiciones constituyen un contenido de
registro negativo y la igualdad o desigualdad de
los contenidos de dos registros.
Instrucciones jump y branch
En lugar de ofrecer mltiples instrucciones para
otras comparaciones, los MiniMIPS ofrecen una
instruccin de comparacin de tipo R set less
than (hacer menor que, slt) que establecen el
contenido de un registro de destino especfico a
1 si la relacin menor que se sostiene entre los
contenidos de dos registros dados, y se
establece en 0 de motor modo. Para comparar
con una constante, tambin se proporciona la
versin inmediata de esta instruccin, a saber
slti.
Instrucciones jump y branch
Para las tres instrucciones bltz, beq y bne, el
direccionamiento relativo a PC se usa mediante el cual el
offset con signo de 16 bits en la instruccin se multiplica
por 4 y el resultado se suma al contenido de PC para
obtener una direccin destino branch de 32 bits. Si la
etiqueta especificada est muy lejos de alcanzarse
mediante un offset de 16 bits (ocurrencia muy rara), el
ensamblador sustituye beq $s0, $s1, L1 con un par de
instrucciones MiniMIPS:
Bne $s1, $s2, L2 #pasa por alto jump si (s1) != (s2)
J L1 #va a L1 si (s1) = (s2)
L2: ..
Instrucciones jump y branch
Instrucciones jump y branch
Las instrucciones branch y jump se pueden
usar para formar estructuras
computacionales condicionales y
repetitivas comparables a if-then (si-
entonces) y while (mientras) de los
lenguajes de alto nivel.
Instrucciones jump y branch
IF THEN
if (i == j) x = x + y;
bne $s1,$s2,endif # bifurcacin cuando ij
add $t1,$t1,$t2 # ejecuta la parte then endif: ...
if (i < j) x = x + y;
slt $t0,$s1,$s2 # fija $t0 en 1 si i<j
beq $t0,$0,endif # bifurcacin si ($t0)=0; i.e., ij
# que es el inverso de i<j
Instrucciones jump y branch
Ejemplo 1
Compilacin de enunciados if-then-else Los lenguajes de
alto nivel contienen una constructo if-then-else (si-
entonces-sino) que permite la realizacin de dos clculos,
dependiendo de si se satisface una condicin. Muestre
una secuencia de instrucciones MiniMIPS que
correspondan al siguiente enunciado if-then-else:
if (i <= j) x = x + 1; z = 1; else y = y - 1; z = 2 * z;
Instrucciones jump y branch
Ejemplo 1 - Solucion
Esto es muy similar al enunciado if-then, excepto que se
necesitan instrucciones correspondientes a la parte else y
una forma de obviar la parte else despus de que la parte
then se ejecute.
slt $t0,$s2,$s1 # j<i? (inverso de condicin)
bne $t0,$zero,else # bifurcacin en j<i a la parte else
addi $t1,$t1,1 # comienza then la parte: x=x+1
addi $t3,$zero,1 # z=1
j endif # pasa por alto la parte else
else: addi $t2,$t2,-1 # comienza else la parte: y=y-1
add $t3,$t3,$t3 # z=z+z
endif: ...
Instrucciones jump y branch
Ciclo (loop) simple while, Requiere cinco instrucciones:
dos para calcular el offset 4i
una para agregar el offset a la direccin base en $s2
una para fetch el valor de A[i] de la memoria
una para verificar la igualdad.
while (A[i] == k) i = i + 1;
loop: add $t1,$s1,$s1 # calcula 2i en $t1
add $t1,$t1,$t1 # calcula 4i en $t1
add $t1,$t1,$s2 # coloca la direccin de A[i] en $t1
lw $t0,0($t1) # carga el valor de A[i] en $t0
bne $t0,$s3,endwhl # sale del ciclo si A[i] k
addi $si,$si,1 #i=i+1
j loop # permanece en el ciclo
endwhl: ...
Instrucciones jump y branch
Ejemplo 2
Ciclo con ndice de arreglo y goto explcito Adems de los
ciclos while, los programas en lenguaje de alto nivel
pueden contener ciclos en los que un enunciado goto (ir
a) (condicional o incondicional) inicia la siguiente
iteracin. Muestre una secuencia de instrucciones
MiniMIPS que realicen la funcin del siguiente ciclo de
este tipo:
loop: i = i + step;
sum = sum + A[i];
if (i n) goto loop;
Instrucciones jump y branch
Ejemplo 2 - Solucin
Esto es bastante similar a un ciclo while y, de hecho, se
podra escribir como uno. Tomado del ejemplo while-loop,
se escribe la siguiente secuencia de instrucciones, si
supone que el ndice i, la direccin de inicio del arreglo A,
la constante de comparacin n, step, y sum se
encuentran en los registros $s1, $s2, $s3, $s4 y $s5,
respectivamente:
Instrucciones jump y branch
Ejemplo 2 Solucin
loop: add $s1,$s1,$s4 # i = i + step
add $t1,$s1,$s1 # calcula 2i en $t1
add $t1,$t1,$t1 # calcula 4i en $t1
add $t1,$t1,$s2 # coloca la direccin de A[i] en $t1
lw $t0,0($t1) # carga el valor de A[i] en $t0
add $s5,$s5,$t0 # sum = sum + A[i]
bne $s1,$s3,loop # si (in) goto loop
Modos de direccionamiento
Modo de direccionamiento (addressing mode) es
el mtodo que especifica la ubicacin de un
operando dentro de una instruccin. Tenemos 6
tipos.
Modos de direccionamiento
Direccionamiento El
El operando
operando viene
viene de,
explcitamente en
de, oo resulta
la
resulta irir aa un
instruccin
explcitamente en la instruccin
un lugar
lugar predefinido
predefinido que
que se
se especifica
especifica

Implcito $ra
$ra

Direccionamiento El
El operando
operando sese proporciona
proporciona en
en la
la instruccin
instruccin en
en si
si misma
misma

inmediato Addi, andi, oi, xori


Addi, andi, oi, xori

Direccionamiento El
El operando
operando se
se toma
toma de,
de, oo resulta
resulta colocado
colocado en
en un
un registro
registro especifico.
especifico.
por registro

Direccionamiento El
El operando
operando esta
esta en
en memoria
memoria yy su
su ubicacin
ubicacin se
se calcula
calcula al
al agregar
agregar un
un offset
offset

de base Lw
Lw yy sw
sw

Direccionamiento Igual
Igual al
offset
al de
offset se
de base
base pero
pero el
se adiciona
adiciona con
el registro
con dos
registro siempre
dos 00 en
siempre es
en el
es el
el extremo
el contador
contador del
extremo derecho.
derecho.
del programa
programa yy el
el

relativo al PC Branch
Branch

Direccionamiento Debido
Debido que
que solo
solo contamos
instrucciones,
instrucciones, se
contamos con
se hace
hace un
con 26
un salto
26 bits
salto de
bits yy los
de relleno
relleno al
los directos
directos manejan
al programa
manejan hasta
programa de
de la
hasta 32
32
la izquierda.
izquierda.
seudodirecto
Modos de direccionamiento
Modos de direccionamiento
Instrucciones minimips (20)
Modos de direccionamiento
Ejemplo 1
Cmo encontrar el valor mximo en una lista de
nmeros Una lista de enteros que se almacena
en memoria comienza en la direccin dada en el
registro $s1. La longitud de la lista se
proporciona en el registro $s2. Escriba una
secuencia de instrucciones MiniMIPS de la tabla
5.1 para encontrar el entero ms grande en la
lista y copiarlo en el registro $t0.
Modos de direccionamiento
Ejemplo 1 - Solucin
Se examinan todos los elementos de la lista A y se usa
$t0 para mantener el entero ms grande identificado
hasta el momento (inicialmente, A[0]). En cada paso se
compara un nuevo elemento de la lista con el valor en $t0
y se actualiza el ltimo si es necesario.
Modos de direccionamiento
Ejemplo 1 - Solucin
lw $t0,0($s1) # inicializa mximo en A[0]
addi $t1,$zero,0 # inicializa ndice i a 0
loop: add $t1,$t1,1 # incrementa el ndice i en 1
beq $t1,$s2,done # si todos los elementos examinados, salir
add $t2,$t1,$t1 # calcular 2i en $t2
add $t2,$t2,$t2 # calcular 4i en $t2
add $t2,$t2,$s1 # de la direccin de A[i] en $t2
lw $t3,0($t2) # cargar valor de A[i] en $t3
slt $t4,$t0,$t3 # mximo < A[i]?
beq $t4,$zero,loop # si no, repetir sin cambio
addi $t0,$t3,0 # si s, A[i] es el nuevo mximo
j loop # cambio completo; ahora repetir
done: ... # continuacin del programa
PROCEDIMIENTOS Y
DATOS

S-ar putea să vă placă și