assembly - sgt - MIPS: ¿es importante?
sgt mips (12)
Aquí hay 3 buenas razones para aprender a ensamblar.
- Ciertos pequeños fragmentos de programas están mejor escritos en ensamblaje que en un lenguaje de alto nivel.
- Los viejos programas de ensamblaje pueden necesitar ser depurados o mejorados.
- Aprender a programar en ensamblaje lo ayudará a desarrollar modelos precisos de lo que hace un procesador y lo que hace un compilador.
La tercera razón es de lejos la más importante. Saber cómo funciona su hardware profundizará mucho su comprensión de la informática y, a su vez, le ayudará a convertirse en un mejor desarrollador.
Mi pregunta: ¿es el lenguaje de programación MIPS algo tan útil?
Soy un estudiante de CS y estoy tomando una clase de ensamblaje que se enfoca en MIPS. Me siento muy cómodo escribiendo en lenguajes de alto nivel, pero Mips me tiene un poco deprimido.
¿Es MIPS algo en lo que realmente debería centrarme y tratar de comprenderlo por completo? ¿Me ayudará en el futuro?
Creo que depende de qué área de CS quieras disparar después de la graduación. Si la arquitectura de la computadora es lo que quieres hacer, entonces en mi opinión yo digo que sí. Creo que un buen ingeniero de software se aleja con el concepto general de cómo funciona un lenguaje ensamblador + desvío y reenvío y finalmente cómo se puede optimizar su código para el rendimiento de la memoria caché. (Localidad espacial / localidad temporal)
El lenguaje ensamblador siempre vale la pena aprender. Probablemente no se les está enseñando o viendo cómo el compilador convierte el código de lenguaje de alto nivel en código ensamblador, pero yo diría que el conocimiento es el beneficio más importante de conocer el lenguaje ensamblador. Es aleccionador cuán ineficientes son muchos compiladores incluso en el nivel de optimización más alto. (La mayoría de los compiladores van a volcar el código de ensamblado cuando lo soliciten, en lugar de pasar al código de máquina y al enlace).
Dicho esto, MIPS asm es probablemente inútil, porque casi nadie usa MIPS ahora. (SGI solía hacerlo, pero ahora sus máquinas están todas en chips x86 / IA-64). Si le parece atractivo el lenguaje ensamblador y desea trabajar más en el ensamblado, aprenda el conjunto de instrucciones ARM. ARM es solo un poco más complejo que MIPS, y prácticamente todos los teléfonos móviles, teléfonos inteligentes y PDA ahora usan chips ARM (hechos por docenas de fabricantes). El iPod usa ARM, al igual que (creo) el Zune.
En su caso, creo que MIPS se usa como ayuda de tutoría. Esta es una clase de ciencias de la computación y en lugar de darte herramientas de códigos mono, intentan enseñarte conceptos amplios que son más fáciles de ejemplificar en una arquitectura más simple como MIPS en lugar de en x86.
No espere que ingrese a su "caja de herramientas del programador". Para el propósito práctico de escribir código de bajo nivel, será mejor que aprendas lenguaje ensamblador x86 luego.
En un momento (en los años 90) los procesadores derivados de MIPS fueron los procesadores más vendidos en el mundo, lo que empequeñeció las ventas de los procesadores Intel x86. Esto se debió a su gran presencia en el mercado integrado. Creo que ahora los procesadores basados en ARM pueden haber asumido ese título, pero todavía hay toneladas de sistemas integrados usando MIPS.
Incluso si nunca programa un chip MIPS en ensamblador en su carrera, el lenguaje ensamblador puede ser útil para aprender. Puede ayudarlo a escribir un código de alto nivel más eficiente si tiene alguna idea de lo que el compilador va a emitir. Otras áreas donde todavía se usa incluyen compiladores (que escriben los suyos), controladores de dispositivo y programación multimedia (donde el código que requiere MMX o SSE usualmente aún se escribe a mano en el ensamblador).
Cada tipo de CPU tiene un conjunto de instrucciones diferente, pero hay suficiente en común que una vez que aprendes un dialecto de ensamblaje (MIPS en tu caso), los otros deben ser fáciles de recoger.
Es útil comprender los niveles muy bajos de la computadora. Por ejemplo, hay desarrolladores que dirán que la CPU ejecuta algún tipo de instrucción de "objeto nuevo". Por supuesto, no hay tal instrucción, el manejo de los objetos pasa varias capas de abstracción más altas. Es bueno comprender la distinción, para que pueda entender por qué la creación de objetos puede ser costosa (o no) o por qué los espacios de direcciones protegidas pueden hacer que el sistema sea más robusto.
Cuando estaba en la escuela, el curso de ensamblaje se impartía en el mainframe de IBM utilizando el conjunto de instrucciones System / 360. Nunca, en ningún momento de mi carrera, he estado ni cerca de trabajar en una máquina así, pero el conocimiento de cómo se ve la CPU ha sido valioso.
Hoy en día trabajo en sistemas integrados usando procesadores MIPS. De hecho, me paso una cantidad de tiempo razonable estudiando detenidamente las listas de ensambles MIPS, y escribo algunos ensambles MIPS para los vectores de arranque y las primitivas de sincronización. Sin embargo, incluso si nunca escribes nada en el ensamblaje, entender la operación de la CPU sigue siendo valioso.
Estudié MIPS el año pasado. MIPS es un lenguaje importante pero desafortunadamente, y probablemente nunca usará MIPS. Aprenderá algunos conceptos básicos, pero no pierda el tiempo tratando de aprender más de lo que necesita porque no hay muchos trabajos en MIPS, en comparación con otros idiomas.
Las mips parecen estar regresando en sistemas integrados. @ [sk] me ha dado un mejor resumen que yo, pero tengo un ejemplo reciente:
Broadcom parece hacer tarjetas Wifi en estos días con chips MIPS o ARM (no estoy seguro de cuál es, la documentación dice una, el firmware dice la otra). Sin embargo, en sus chips más nuevos todavía estamos esperando el soporte de Linux en funcionamiento con todas las características habilitadas, así que por esa razón, me alegra que estés aprendiendo. (Ahora consígueme y escríbame algunos controladores: P)
MIPS es un excelente lenguaje para aprender a ensamblar. Tiene muchos registros de propósito general para hacer que escribir sus programas sea menos tedioso y es una arquitectura RISC por lo que hay menos instrucciones que necesita memorizar.
Algunos de los usos principales que no mucha gente menciona es que el N64, Playstation 1, Playstation 2 y PSP usaron todos los procesadores MIPS.
MIPS específicamente es menos importante que comprender asm en general para que tengas una idea de lo que sucede cuando compilas fuentes de alto nivel. Comprender un poco de ASM puede ayudarlo a comprender los síntomas de los errores en el código de alto nivel. (por ejemplo, sobrescribir los datos incorrectos a través de un puntero falso o modificar otros locales en la pila cuando escribe fuera de una matriz).
Obviamente, entender cómo hacer que C o C ++ corran rápido es mucho más fácil cuando sabes que lo que realmente se ejecuta es el compilador-generador asm. Es imposible diseñar microbenchmarks buenos para probar cualquier cosa si aún no sabes en su mayoría lo que está sucediendo.
Una vez que haya aprendido el ensamblado de MIPS, será bastante fácil aprender cualquier otro . Todas las demás CPU principales también son máquinas de registro que funcionan básicamente de la misma manera:
- Hay registros y memoria
- Todo, incluidos los punteros, son solo bits y bytes en la memoria o registros, es decir, enteros.
- Cada instrucción es independiente y actualiza el estado arquitectónico (valores de registro) de acuerdo con sus reglas simples. Solo se preocupa por sus entradas (generalmente registros, a veces también memoria). No hay magia
- La ejecución continúa de una instrucción a la siguiente al aumentar la dirección en la memoria del programa, a excepción de las instrucciones de salto / derivación.
- Escribir programas / funciones es una cuestión de construir una serie de pasos para que la máquina tome, lo que hará que los datos se muevan y se procesen de la manera que usted desee. Es como diseñar los pasos en un algoritmo
- ASM es donde realmente brilla un depurador: puede mostrarle el estado arquitectónico completo de la máquina (porque hay un número finito de registros), y mostrarle qué valores de registro cambiaron cuando se realizó una instrucción de un solo paso.
Cada arquitectura tiene sus propias arrugas adicionales, pero estos conceptos básicos no cambian y son lo que realmente aprendes cuando aprendes tu primer lenguaje ensamblador. Una de las principales arrugas de MIPS es la ranura de retardo de rama (que los simuladores MARS y SPIM esconden / deshabilitan por defecto)
MIPS es un lenguaje ensamblador bastante bueno para aprender. Es simple y ortogonal, y conduce muy bien a las discusiones de las CPU segmentadas porque eso es para lo que fue diseñado. (No hay instrucciones microcodificadas, y un formato de código de máquina muy regular que es fácil de decodificar).
Además, hay buenos simuladores MIPS, MARS y SPIM, que tienen un editor / ensamblador / simulador + depurador todo en uno. Y algunas "llamadas al sistema" que hacen cosas de alto nivel como leer un entero del teclado del usuario en un registro. Los sistemas operativos normales tienen llamadas al sistema que solo le permiten leer / escribir caracteres, y debe llamar a las funciones de la biblioteca o escribir sus propias funciones enteras-> cadenas. Esto es una bendición y una maldición: si no se da cuenta de que las llamadas al sistema MARS son básicamente funciones de biblioteca con una convención de llamadas especiales, es posible que no se dé cuenta de que puede escribir su propio código que hace algunas de esas cosas, o que no "normal" para que las llamadas al sistema funcionen de esta manera.
Sin embargo, puede aprender todo esto en x86, especialmente si desea realizar experimentos de rendimiento en su computadora de escritorio / portátil.
Por "mips lenguaje de programación", supongo que te refieres a MIPS Assembly Language.
Aprender a aprender un lenguaje ensamblador es beneficioso, lo ayuda a mapear el código que escribe y cómo se ejecutará en el hardware. Esto puede ayudarlo a exponerse a preocupaciones de bajo nivel como errores de caché, ramificación, ejecución fuera de orden y otras cosas que no consideraría escribir código de alto nivel.
El aprendizaje del clima El ensamblado de MIPS es útil para usted, depende de la carrera que planee seguir. Personalmente creo x86 / x64 (popular en PC, directamente aplicable si escribes C ++ o C # en PC), PPC (ganando popularidad, se usa en consolas de juegos, y también te expone a RISC) o ARM (utilizado en muchos dispositivos integrados) como teléfonos móviles) podrían ser mejores opciones para aprender.
Tomé una clase de ensamblaje haciendo mips hace unos dos años. Me encontré escribiendo juegos GameBoy Advance en un lenguaje asm parecido a mips. No puedo decir que lo disfruté.
Aunque creo que es bueno tener una comprensión sobre el funcionamiento interno del código ensamblado (del nivel alto al nivel bajo). Siento que me hizo entender más acerca de cómo funciona realmente la computadora. Además, no pude resistirme a crear algunas máquinas virtuales poco después, diseñando mi propio lenguaje ensamblador :)