Ensamblador - Una duda importante sobre ensamblador

 
Vista:

Una duda importante sobre ensamblador

Publicado por Daniel Almanzar (3 intervenciones) el 12/03/2015 16:59:20
Antes que todo les doy a saber que soy un novato en programacion en general y no es mi intencion molestar com preguntas que para los que ya saben les pueda resultar en algo aburrido o tedioso, pero agradeceria enormemente que me sacaran de algunas dudas.

Primero que nada ya eh investigado mucho acerca del lenguje emsamblador y se mucho de temas informaticos de diversa indole, mas concretamente en cuanto a menejo de software y no a su desarrollo. Hasta hace un par de meses me ah despertado el interes, la programcion en general es uno de los temas del que tengo vastante conocimiento teorico aunque no practico. ocea que entiendo muchas cosas pero a la vez no se nada.

En fin, estoy investigando, recopilando y redactando informacion acerca de las carecteristicas, ventajas y desventajas que posee el lenguaje ensamblador asi como otros lenguajes de bajo nivel, uno que mas adelante quisiera compartir con gente verdaderamente experta en el tema y asi me ayuden a corregir y ampliar la informacion. De mas quiero añadir que las interrogantes que hago aqui son aquellas cuyas respuestas producto de la investigacion generalizada en la web no me resultaron satisfactorias, completas o con aparente credibilidad por parte de gente que asegura saber pero que me dejaron con grandes dudas al respecto.


Como sea, mi inquietud en esta ocasion radica en lo siguiente:
Una de las desventajas del lenguage ensamblador es que no posee portabilidad, puesto que programar en este lenguaje significa conocer la arquitectura de cada procesador y en consecuensia cada aplicacion creada en este lenguaje debera ser re-escrita casi totalmente al pasar de un CPU a otro a diferecia de otros lenguajes que o bien operan en culquier plataforma, en cualquier arquitectura(16, 32 64 bits etc.) y cualquier OS o uno mas concreto pero sin tener que tomar en cuenta la arquitectura del CPU.

Por favor no duden en corregir si me eh equivocado en algo de lo anteriormente mencionado o si eh omitido algo importante, les repito soy nuevo en estos temas de programcacion.

Con lo anterior dicho, ya que es imperativo que se conosca la arquitectura de cada procesador para programar en ensamblador, Significa que entonces podria programar en cualquier otro aparato electronico? me explico.

MIPS R4000 Unidad de procesamiento del PSP
ARM946E-S Unidad de procesamiento de la NDS
Estos son CPU's de Videoconsolas

Apple A6 procesador tipo SoC del Iphone 5
Qualcomm Snapdragon S4 plus Procesador tipo SoC del Blackberry Z10
Procesadores tipo Soc de celulares

Si conosco la arquitectura de estos procesadores, aun siendo de otro tipo de dispositicos puedo programar en ellos?
Conociendo la arquitectura del procesador puedo porgramar en cualquier otro dispositivo usando ensamblador?
Con la premisa de la arquitectura de los CPU's, significa que se puede programar en toda plataforma en ensamblador?
Claro con todas las ventajas y desventajas que esto conlleva, se puede hacer?

Y de momento esto es todo, pido disculpas de antemano por las molestias y en general por el mansage tan extenso
como es un proyecto personal seguire profundisando en el tema y asi ampliar conosimientos. toda colaboracion ayuda
y espero poder toparme con alguien que me guie un poco.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Todo te servirá, pero quizás no te valga de nada....

Publicado por Xajorkith (2 intervenciones) el 13/03/2015 02:34:13
Sea cual sea el procesador que elijas, tendrás que 'adaptar', no necesariamente reescribir el programa en ensamblador si cambias de micro.

Por ejemplo, cuando yo programaba en ensamblador con el Z80 la instrucción:

LD C,0x00

Hace que el registro C tome el valor 0, obvio. No tiene más. Pero cuando programaba en ensamblador para el 6502, el equivalente en ensamblador hacía que todos los flags del micro se actualizasen, lo cual cambia mucho el resultado de comprobaciones de Z o C, Zero y Carry que son las que mas se usan. Con el 6502, casi todas las instrucciones cambiaban algún Flag, lo cual es un cristo para programar, y si estás importando alguna rutina imagínate. Incluso siendo el Z80 y el 6502 similares en características generales, al mirar dentro son muy diferentes y tienen sus pros y sus contras.

Otra cuestión es la gestión de la memoria, si no te lías mucho con direccionamientos extremos, o indexaciones muy especificas de un micro, y modos raros varios, no tendrás problemas. Si usas características muy específicas del procesador puedes verte 'obligado' a continuar con un micro más potente de la familia (Pentium, Pentium II, etc..) o no podrás direccionarla. Simular un direccionamiento por software, incluso en ensamblador, serán como muy poco de 10 a 20 instrucciones. Una vez a 3Ghz no es gran cosa, pero en un bluce de 1200 millones para buscar un nombre chino es bastante. :)

Algo muy importante también es a que nivel quieres programar. Cuanto más bajo sea el nivel, mejor; pero también más lento el desarrollo. Si quieres mostrar un texto en pantalla podrás recurrir a alguna rutina de la BIOS, de Windows, o del SO. Será rápido pero tendrás que seguir sus reglas de uso de memoria, formato de parámetros, etc. Si te haces una rutina de escritura no tardarás mucho, y le podrás poner las características que mejor te vengan, ahorrar memoria? ganar velocidad?.

Yo te recomiendo que cojas el que cojas, hagas pruebas de 'todas' las instrucciones en general y luego utilices una programación lo más RISC (Reduced instruction set computing) posible. Si solo usas 50 instrucciones diferentes te resultará más fácil adaptar el programa a otro micro. Si programaras un PIC16F84, creo que solo tenía 35 instrucciones y se puede hacer lo mismo que con todos. Usando las básicas de siempre de cada micro en sus áreas: Lógicas, rotaciones, desplazamientos, salto, leer de memoria, escribir en memoria, in-out, etc. puede que no llegue ni a 50. Si necesitas una instrucción muy compleja que usas en pocos sitios de la aplicación (ejemplo tonto: XNOR es NOT XOR, todo micro tiene NOT y tiene XOR, pero XNOR no existe como instrucción en todos los micros) solo tienes que hacer la rutina o macro correspondiente combinando las 50 de uso habitual cuando tengas un momento de inspiración, inevitablemente perderás un poquito de velocidad y para el próximo micro al adaptar las 50 instrucciones generales ya tendrás adaptadas las rutinas o macros casi al 100%.

Otra cosilla importante que tendrás que comprobar es saber si puedes programar la plataforma que elijas en ensamblador y como instalar el programa. Las consolas, como todo lo que lleva micro, funciona en ensamblador, y se programa en ensamblador, pero quizá no te den esa posibilidad por motivos de seguridad.

:)

Animo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar