Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: Smiley2036 en 14 Abril 2015, 20:44 pm



Título: Programa en ensamblador:
Publicado por: Smiley2036 en 14 Abril 2015, 20:44 pm
Muy buenas:

Estoy estudiando ingeniería informática. En una asignatura (Fundamentos de computadores) estamos dando ahora mismo como empezar a programar en ensamblador, en concreto usamos el lenguaje ensamblador del MIPS-R2000

El tema me gusta bastante, pero me está costando bastante también, entre otras cosas por que apenas he encontrado nada sobre él aparte de lo que nos dan en la uni, que a veces resulta bastante escaso.

Tengo un primer programa de un boletín, es este:


.data                              # Reserva de espazo para datos en memoria.
cadena: .space 100      # Reservamos 100 bytes baixo o nome de
                              # "cadena"

.text                              # Texto obligatorio para comezar
.globl main                      # un programa
main:

la $a0, cadena              # Gardamos en $a0 a dirección da cadea
addi $a1, $0, 100      # de texto e en $a1 a lonxitude máxima
addi $v0, $0, 8              # Lectura da cadea por teclado
syscall

addi $v0, $0, 4              # Impresión da cadea por pantalla
syscall


addi $v0, $0, 10              # Finalización do programa
syscall


La cuestión es que hay algunas partes del programa que no entiendo bien, como por ejemplo el guardar la longitud máxima en $a1 o como se realiza la lectura por teclado o se imprime la cadena introducida por pantalla.

Agradecería mucho si alguien pudiese explicarme un poco este programa, creo que una vez visto el cuadro completo podré comenzar por mi mismo con los siguientes pero ahora mismo... por mis dudas creo que se aprecia que estoy más perdido que Tom Cruise en una orgía en Eyes wide shut XDD.


Título: Re: Programa en ensamblador:
Publicado por: ivancea96 en 14 Abril 2015, 21:12 pm
Código
  1. addi $a1, $0, 100

Guarda en el registro $a1 la suma de los otros dos parámetros (0 + 100) -> ADDI (http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Mips/addi.html)

Es 100, en .data puso el tamaño en bytes.

Luego lo de lectura de cadena, impresión por pantalla, finalización del programa, son todos syscall, a los que se les pasa un parámetro por $v0, que identifica lo que hará syscall -> SYSCALL (http://courses.missouristate.edu/kenvollmar/mars/help/syscallhelp.html)

Syscall tiene varios códigos, ahí los ves bien explicados (ahí, o en otro lugar, donde mejor lo encuentres)


Título: Re: Programa en ensamblador:
Publicado por: Smiley2036 en 14 Abril 2015, 21:23 pm
Aaaah vale vale, ahora viendo esta página que me has pasado ya me queda mucho más claro. Es que desconocía los códigos para $v0 que aparecen en esa tabla!!, muchas gracias!!.