Ir al contenido principal

Prueba de códigos básicos

A continuación se muestra un código básico del lenguaje:

string salto = "\n"@
int Edad = 5@
bool FuncionBool(bool b)
{
return b@
}

real FuncionReal(real r)
{
return r+1.0@
}
int FuncionInt(int i)
{
return i+1@
}
string FuncionString(string s)
{
return s@
}
char FuncionChar(char c)
{
return c@
}
int main()
{
char c@
c = FuncionChar('I')@
print(c)@
print(salto)@
string s@
s = FuncionString("Hola Nahum")@
print(s)@
print(salto)@
int i@
i = FuncionInt(1)@
print(i)@
print(salto)@
real r@
r = FuncionReal(1.1)@
print(r)@
print(salto)@
bool b@
b = FuncionBool(True)@
print(b)@

}

Seguidamente de su traducción al lenguaje MIPS
.data

true: .asciiz "print true"
false: .asciiz "print false"
Et0: .asciiz "\n"
Et1: .asciiz "Hola Nahum"
.text
.globl main

print_true:
li    $v0,4
la   $a0, true
syscall
jr $ra

print_false:
li    $v0,4
la   $a0, false
syscall
jr $ra
print_bool:
li $t0 ,0
beq $t1, $t0, print_true
li $t0 ,1
beq    $t1, $t0, print_false
jr $ra

print_int:
li  $v0,1
move $a0, $a1
syscall
jr $ra

print_real:
li  $v0,2
mov.s $f12, $f1
syscall
jr $ra

print_string:
li    $v0,4
move $a0, $a1
syscall
jr $ra

print_char:
li    $v0,11
move $a0, $a1
syscall
jr $ra

end_program:
li $v0,10
syscall

globales:

addi $sp, $sp, -8

la $t1, Et0
sw $t1, 0($sp)

li $t1, 5
sw $t1, 4($sp)

jr $ra

main:
jal globales

addi $sp, $sp, -20

addi $sp, $sp, -8

li $t1,'I'
sw $t1, 0($sp)
jal  FuncionChar
lw $a2, 0($sp)
addi $sp, $sp, 4
sw $a2, 0($sp)

lw $t1,0($sp)
move    $a1, $t1
jal print_char

lw $t1,20($sp)
move    $a1, $t1
jal print_string

addi $sp, $sp, -8
la $t1, Et1
sw $t1, 0($sp)
jal  FuncionString
lw $a2, 0($sp)
addi $sp, $sp, 4
sw $a2, 4($sp)

lw $t1,4($sp)
move    $a1, $t1
jal print_string

lw $t1,20($sp)
move    $a1, $t1
jal print_string

addi $sp, $sp, -8
li $t1, 1
sw $t1, 0($sp)
jal  FuncionInt
lw $a2, 0($sp)
addi $sp, $sp, 4
sw $a2, 8($sp)

lw $t1, 8($sp)
move    $a1, $t1
jal print_int

lw $t1,20($sp)
move    $a1, $t1
jal print_string

addi $sp, $sp, -8
li.s $f1, 1.1
swc1 $f1, 0($sp)
jal  FuncionReal
lwc1 $f0, 0($sp)
addi $sp, $sp, 4
swc1 $f0, 12($sp)

lwc1 $f1,12($sp)
mov.s    $f1, $f1
jal print_real

lw $t1,20($sp)
move    $a1, $t1
jal print_string

addi $sp, $sp, -8
li $t1, 0
sw $t1, 0($sp)
jal  FuncionBool
lw $a3, 0($sp)
addi $sp, $sp, 4
sw $a3, 16($sp)

lw $t1,16($sp)
move    $t1, $t1
jal print_bool
addi $sp, $sp, 20

j end_program

FuncionChar:

sw $ra, 4($sp)

addi $sp, $sp, 0

lw $t1,0($sp)
move $v0, $t1
addi $sp, $sp, 0
addi $sp, $sp, 4
lw $ra, 0($sp)
sw $v0, 0($sp)

jr $ra

FuncionString:

sw $ra, 4($sp)

addi $sp, $sp, 0

lw $t2,0($sp)
move $v0, $t2
addi $sp, $sp, 0
addi $sp, $sp, 4
lw $ra, 0($sp)
sw $v0, 0($sp)

jr $ra

FuncionInt:

sw $ra, 4($sp)

addi $sp, $sp, 0

lw $t3, 0($sp)
li $t4, 1
add $t3, $t3, $t4
move $v0, $t3
addi $sp, $sp, 0
addi $sp, $sp, 4
lw $ra, 0($sp)
sw $v0, 0($sp)

jr $ra

FuncionReal:

sw $ra, 4($sp)

addi $sp, $sp, 0

lwc1 $f4,0($sp)
li.s $f5, 1.0
add.s $f4, $f4, $f5
mov.s $f0, $f4
addi $sp, $sp, 0
addi $sp, $sp, 4
lw $ra, 0($sp)
swc1 $f0, 0($sp)

jr $ra

FuncionBool:

sw $ra, 4($sp)

addi $sp, $sp, 0

lw $t5,0($sp)
move $v0, $t5
addi $sp, $sp, 0
addi $sp, $sp, 4
lw $ra, 0($sp)
sw $v0, 0($sp)

jr $ra

Comentarios

Entradas más populares de este blog

Pruebas de condicionales

Se realizaron pruebas de diferentes ejemplos para expresiones condicionales. Se analizaron cuales son los procesos que deben ser ejecutados para las expresiones condicionales en asignaciones booleanas que podrán ser utilizadas en las diferentes estructuras de control, ejemplo; for, while, if.

Investigación de condicionales

Hasta el momento se ha avanzado en el proyecto y se ha llegado la punto donde se logra generar funciones, asignaciones complejas, llamadas de funciones y varios tipos de expresiones. Al tener expresiones y la mayoría de la gramática se requiere saber como lograr hacer condiciones en MIPS, ya que es sumamente   importante para darle sentido a la funcionalidad de los códigos que se ingresan en el compilador. Gracias a la tarea II y actividad #5 del curso, se tiene un resumen sobre el comportamiento de las condiciones en MIPS, y se logro llegar a una idea sobre lo que se necesita estructurar en el código Back-End para lograr que se genere las condiciones que aparezcan en el código fuente.