Programa en ensamblador:

Iniciado por Smiley2036, 14 Abril 2015, 20:44 PM

0 Miembros y 1 Visitante están viendo este tema.

Smiley2036

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.

ivancea96

Código (mpasm) [Seleccionar]
addi $a1, $0, 100

Guarda en el registro $a1 la suma de los otros dos parámetros (0 + 100) -> ADDI

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

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

Smiley2036

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