Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Unidad Viii-Operaciones Mips
Unidad Viii-Operaciones Mips
22-I
Ciclo Académico
Lenguaje
Emsamblador II
LENGUAJE ENSAMBLADOR
Accesos a memoria
Los datos se han de traer de memoria principal a los
registros para poder trabajar con ellos.
Los resultados pueden necesitar volcarse a memoria. MP
Para traer un dato hay que hacer una lectura sobre MIPS R2000
memoria, instrucción lw (load word) $8
Para volcar un dato hay que hacer una escritura sobre $10 D
memoria, instrucción sw (store word)
$17 = 0
Formato:
lw $8, D($17) # $8=contenido de D+$17
sw $10, D($17) # En dir. D+$17 almacena $10
D+$17 dirección efectiva
LENGUAJE ENSAMBLADOR
PROGRAM ejemplo
VAR Como acedemos al elemento i del vector:
x,k,i: Suponemos i almacenada en $17
INTEGER;
lw $10, Vinicio($17) # $17 se le llama reg.
V: ARRAY[0..999] OF INTEGER;
indice
BEGIN
…
x:=k-(V[i]+V[i]); MP
MIPS R2000
…
V[i+1]:=k+V[i]; $10
… $17 = i V (dir. inicio)
END.
... $17
V[i]
LENGUAJE ENSAMBLADOR
V+2
V[1] =
V+3
V[i] = V+(i*4)
V+4
V+(i*4)+1
....
V+
(i*4)+2
V+(i*4)+3
....
LENGUAJE ENSAMBLADOR
Modos de acceder a los operandos de una instrucción. Repercuten en el modo de acceder a los datos.
Modo real: Sumar algo al contenido de un registro.
Direccionamiento a registro
Direccionamiento inmediato
Direccionamiento base o desplazamiento
Direccionamiento relativo a PC
Direccionamiento a registro
El dato esta ubicado en el registro sub $8, $10, $22
lw $10, Vinicio($17)
LENGUAJE ENSAMBLADOR
Direccionamiento inmediato
El operando es un valor constante
Inicializaciónes o operaciones con ctes.
Instrucciones en versión inmediata:
addi $17, $17, 4 # inmediate add
Salto condicional
Salto incondicional
Instrucción: j (jump)
Operando: Dirección destino. Valor concreto o etiqueta
Salto condicional
Salta si se produce alguna condición
Implementa IF…THEN…ELSE
Comparación de desigualdad:
slt $8, $19, $22 # set on less than Si $19<$22 entonces $8=1 sino $8=0
REPETIR
g:=g+A[i];
SI (i=j)ENTONCES a:=a+h; i:=i+j;
a:=a+j; HASTA (i=h)
bne $16, $17, L1 bucle:
add $18, $18, $19 multi $9,
L1: add $18, $18, $19, 4
$17
lw
$8,
A($
9)
add $17, $17, $8
add $19, $19, $20
LENGUAJE ENSAMBLADOR
Ejercicio 7 .data
# Declarar etiquetas
a: .word 20,30,115,1,62,41,12
n: .word 7
max: .word 0
.text
.globl main
main:
li $t0, 0
li $s0, 0
lw $s1, n #CARGA N EN EL REGISTRO sl
m1:
bge $t0, $s1, m3
mul $t1, $t0, 4 #LENGUAJE DE DESPLAXAMIENTO CON T1 Y T0
lw $t2, a($t1)
ble $t2, $s0, m2 #COMPARACION CON EL REGISTRO T2 Y S0
move $s0,$t2
m2:
addi $t0, $t0, 1 #COMPARA VALORES DEL CONTADOR
b m1 #LINEAS DE COMANDO PREDETERMINADAS
m3:
move $a0, $s0 #FINALIZA PROCESO DE REGISTROS
li $v0,1
syscall
li $v0,10
syscall
# Encontrar el factorial de un numero
.text
Ejercicio 8
.globl main
main:
li $v0,4
la $a0,msg1
syscall
li $v0,5
syscall
move $t0,$v0
lb $a0,fact
move $t1,$a0
lb $a0,i
move $t2,$a0
Bucle:
bgt $t2,$t0,fin
mul $t1,$t1,$t2
addi $t2,$t2,1
j Bucle
fin:
li $v0,4
la $a0,msg2
syscall
li $v0,1
move $a0,$t1
syscall
.data
msg1: .asciiz "Ingrese el número: "
msg2: .asciiz "El factorial es:"
fact: .byte 1
i: .byte 1
# Ingresar dos edades y mostrar la mayor de ellas mayor1:
Ejercicio 9 .data
msg1: .asciiz "Ingrese la primera edad: \n"
li $v0,4
la $a0,msg3
syscall
msg2: .asciiz "Ingrese la segunda edad : \n"
msg3: .asciiz "El mayor es : " li $v0,1
msg4: .asciiz " \nHasta pronto" move $a0,$t0
syscall
j fin
.text
.globl main mayor2:
main: li $v0,4
li $v0,4
la $a0,msg3
la $a0,msg1
syscall syscall
li $v0,5
syscall li $v0,1
move $t0,$v0 move $a0,$t1
li $v0,4 syscall
la $a0,msg2 j fin
syscall fin:
li $v0,5
li $v0,4
syscall
move $t1,$v0 la $a0,msg4
bgt $t0,$t1,mayor1 syscall
bgt $t1,$t0,mayor2
Arquitectura MIPS
¡MUCHAS GRACIAS!