ASM, basic , C y otros

fernandob

Excluido
hola a vecs me pongo a "ojear" alguno que comenzo un curso aca de algo y se fue a poner ejemplos y responder consultas, pero dejo de lado la organizacion y la meticulosidad que requiere un curso, eso sin decir que nadie lo termina de verdad.

pero bueno, para que alguien se meta a aprender un lenguaje LO PRIMERO es saber que lenguaje aprender.
yo aprendi ASM , no quiero que en este tema enseñen ningun lenguaje y les pido que solo quienes sepan de esto escriban asi no se llena de respuestas y concretamente podemos saber que es cada cosa.

cual es la diferencia , las posibilidades de cada lenguaje ??
esta es la pregunta.
un ingeniero se dedica a esto, o un tecnico que tiene como oficio programar seguido , pero para muchisima gente esto es algo esporadico, asi que el lenguaje que aprendan con ese se quedaran , nadie se va a poner a comenzar de nuevo un lenguaje para hacer un diseño en su vida , y menso sabiendo otro.
asi que , la cosa es saber antes de tirarse a la pileta que posibilidades da cada uno y que complejidad es el programa .


por ejemplo:

ASM:
las instrucciones son faciles de aprender, en este lenguaje si o si hay que dedicar mucho tiempo, estudiar la data de el micro que son cientos de hojas , conocer todos los registros ya qu ehay que definir TODO , uno no se puede confiar que algo salga solo por que seria jugar a la carambola.
si no vas a usar A/D no tocas el registro que lo involucra......pero mejor mirar que tienen , a ver si algun bit si te afecta , o de fabrica viene ese pin como ana y vos lo queres digital.
en fin.
es arduo , yo por lo menos no me gustaba dejar nada al azar asi que me los revise todos.
luego el programa :
primero el flujo para ver que uno va a hacer.
luego el asm .
instruccion por instruccion .
como dicen todos : uno tiene el control de las cosas eso si , pero vieron que se dice que para sonreir se usan no se 40 musculos??
imaginen que quieren ejecutar :
SONREIR.
bueno , son 40 instrucciones que terminan cansando.
hay trucos, pero .........
es un fastidio.
se ve cuando uno termina y imprime el programa y no sabes si esta saliendo el mismo o un rollo de papel higienico se abre.
ademas , si es largo, mejor aprende a estructurarlo, por que cuando tenes que buscar algo luego de un tiempo.........huu.....a sumergirte en ese mosntruo que hiciste.

ASI QUE ASM :
tenes que aprenderte las instrucciones.
a usar el mplab que si no sabes ingles no es moco de pavo.
como funciona el micro y todos sus registros que estaan dispersos en esas cientos de hojas de la datasheet.
amor por la electronica y no tener novia.
una buena idea de programacion , diagramas de flujo y eso.



BASIC ......C

bueno, aca les toca a uds. alguno que sepa ambos podra hacer una comparativa.

algunas dudas que serian interesantes saber:

1 -- en alguno de estos NO es necesario saber mucho de el micro ??
uno quiere que sonria y solo pone :
SONREIR .
o quiero un retardo o un timer o alguna operacion matematica y con una o 2 instrucciones la invoco ??
sin por ello dejar al micro atorado o clavado en ella .
cosas que con ASM usaria 10 o 20 instrucciones.

2 -- derroche de memoria ??
siempre dicen que con ASM se aprovecha mas, pero hoy dia son pocos los que usan toda la memoria de un micro, y si no te alcanza , el que tiene el doble de memoria o el cuadruple solo sale un par de dolares mas, asi que no le veo a eso algo importante.

3 --- se puede hacer con estos lenguajes todo ?? l que con ASM ?? y mas ???

4 -- enlaces a buenos cursos de cada lenguaje

5 -- programas seguros y oficiales para bajar y usar .

6 --- cuantas instrucciones son ?? en cada lenguaje
que complejidad tiene ??
comentarios como puse con el ASM y mas.


saludos y gracias
 
Yo creo que si sabes programar en un lenguaje y tenes las nociones basicas de un buen programador, no creo que te resulte muy dificil entender otro lenguaje (tambien dependera cual, pero podriamos decir que casi todos).

Yo por ej. empece viendo pascal en la secundaria (lenguaje viejo y poco util diriamos hoy en dia), despues me enseñaron el lenguaje C , y es hasta el dia de hoy que le sigo sacando jugo a pesar de ser un lenguaje viejo en lo que a Pc se refiere y moderno (por decirlo de alguna forma) en el mundo de los uC's.

En ambos casos, la forma de programar no cambiaba demasiado, simplemente tenias que adaptarte a los nuevos comandos (no importa como se llame un comando o que argumento necesita, siempre te las arreglas con un help o google).

Despues dandome maña y con un libro, aprendi lo basico de java que tiene muchas cosas parecidas (hermano menor de C++), pero fundamentalmente cambia en la forma de encarar el programa, ya que es un lenguaje orientado a objetos (un especie de encapsulamiento), y si bien no lo aprendi de la noche a la mañana, muchos de los conceptos aprendidos en C y la forma de encarar algoritomos fueron los mismos.

Por ultimo, ahora estoy viendo algo de assembler aplicado a la arquitectura IA32, y nuevamente muchos de los conceptos aprendidos en C son aplicables en assembler, obviamente que hay que pedalear muchisimo mas para hacer cosas relativamente complejas, pero a la larga es siempre igual.

De los lenguajes mencionados, podria decir esto:

Assembler:

Pros:
- Mayor velocidad
- Menor peso en codigo y en datos
- Maximo control y saber exactamente lo que esta haciendo el uC o uP

Contras:
- Tedioso a la hora de trabajar, ya que las herramientas son a muy bajo nivel, para realizar ciertas cosas tenes que reinventar la rueda.
- Toma mayor tiempo realizar un programa.
- Tener que controlar absolutamente todo, por ej. que no se desbalanceen las pilas.
- Complicado de entender a la hora de leer, poco estructurado, y normalmente con un codigo que tiene jmp/goto o cosas similares por todos lados.
- Incompatibilidades con distintos uP/uC.

C:

Pros:
- Toma menor tiempo realizar un programa.
- Muchas de las funciones que se necesitan ya existen.
- Mucha mayor compatibilidad con distintos uP/uC.
- Lenguaje estructurado, si se programa bien solo deberias tener una entrada y una salida, con lo cual resulta mas sencillo de entender cuando se lo lee.

Contras:
- Mucho menor control sobre el uC/uP.
- Mayor peso en codigo y datos.

Java:

Pros:
- Lenguaje super moderno, que tiene clases para todo.
- Orientado a objetos a diferencia del C que es estructurado.
- Muy usado hoy en dia en Pc's.
- IDE's muy modernos, que programan casi solos :eek: .
- Maxima compatibilidad con diferentes sistemas, y arquitecturas, debido a una plataforma intermedia.

Contras:
- Cero control sobre el uC/uP, ni te enteras que pasa, ya que usa una plataforma intermedia.
- Mucho mayor peso en codigo y datos.

De esos 3 lenguajes, hoy en dia para uC se usan los 2 1eros, y para Pc diriamos que java, los otros 2 son obsoletos.

Si tuviera que recomendar por un lenguaje para uC, y por cuestiones de tiempo solo queres aprender un lenguaje, sin duda que lo mejor seria C, ya que te permite aplicarlo a cualquier uC moderno de hoy en dia, y dejaria al assembler para algo mucho mas avanzado que requiera extremo control sobre el hard.
 
Poes en mi opinion, Basic es el mas comodo, pero claro, ocupa mucha memoria, y assembler es el mejor, pero hay que echarle ganas para hacer un programa sofisticado. yo la verdad me quedo con C, porque tienes el programa muy bien estructurado y cuando quieras, sobre el progama en C puedes poner sentencias en assembler directamente :unsure:
 
Yo me quedo con el Assembler, ya que desde que empece la carrera de electronica los docentes solo nos permitian usar y aprender el lenguaje assembler por el simple hecho de que tenemos que pensar como una maquina :)lol:)
Actualmente muchos optan por usar software`s que usen interfaces mas simples de entender. :confused: :confused:

ASM lo maximo!!! :aplauso::aplauso::aplauso:
 
Ya lo he dicho en varias ocasiones que no son comparables... pero bueno... en mi opinion...

ASM:
Ventaja mayor velocidad
Desventaja mayor tiempo de programación
Orientado a Programadores profesionales.

C:
Ventaja mediana velocidad
ventaja mediano tiempo de programación
Orientado a Programadores semi-profesionales.
Incorporacion de Asm

Basic:
DesVentaja mínima velocidad
ventaja mínimo tiempo de programación
Orientado a programadores eventuales.
Incorporacion de Asm

Saludos....
 
Si el compilador es solo orientado para microcontroladores estoy de acuerdo con lubeck, pero no podemos generalizar.
Pero en cuanto al C, me quedo con el compilador del Hi-Tech que me a dado mejores resultados, obteniendo un HEX comparable a hacerlo todo en ASM.

Por supuesto que no todo es color de rosa.
 
C:
Ventaja mediana velocidad
ventaja mediano tiempo de programación
Orientado a Programadores semi-profesionales.
Incorporacion de Asm

Disculpá que disienta en lo que he marcado, pero yo lo pondría así:

Orientado a programadores profesionales que desean resolver el problema en forma efectiva y no perder tiempo reinventando lo que ha sido desarrollado hace 40 años. :D
 
:LOL: Bien dicho ezavalla, después de todo para eso están los compiladores de alto nivel para hacernos la vida más fácil y poner mayor atención al desarrollo del sistema en si...
Claro que debemos confiar en el mismo y para eso se debe usar compiladores que realmente tengan renombre y no preocuparnos en los bugs :unsure:...
Como sea el C es más aceptable :D.
 
Disculpá que disienta en lo que he marcado, pero yo lo pondría así

No EZ si estoy deacuerdo contigo.... pero es bien difícil generalizar.... en cuanto estas comparaciones... puntualizar las diferencias en cuanto a cada uno y hacer estadisticas de uso seria prácticamente imposible y para cuadrarlas en una clasificación me pareció así lo mas adecuado...

Saludos...
 
c para profesionales??? no jodas ezavalla!! los profesionales programan en assembler!! con ello pueden saber exactamente lo que se esta haciendo, o quizás para mi (y las personas que conozco) un programador profesional es otra cosa...
Para mi si lo que quiero que haga el micro no es algo preciso, programo en basic, si necesito tiempos exactos y saber donde estoy en cada momento, assembler. C me lo salto, para mi C o basic son lo mismo, ambos los usaría si lo que quiero hacer algo en que la precisión no sea de importancia, pero me quedo con basic.
 
c para profesionales??? no jodas ezavalla!! los profesionales programan en assembler!! con ello pueden saber exactamente lo que se esta haciendo, o quizás para mi (y las personas que conozco) un programador profesional es otra cosa...

:eek: :eek: :eek: :eek: :eek:
Bueno...si opinás así, decíselo a los cientos o miles de programadores que desarrollaron el kernel de LINUX o FreeBSD o algunos de los unixces o aún del mismo Windows. Te aseguro que te van a mirar así ":eek:"...bueno...no solo te van a mirar...

Para mi si lo que quiero que haga el micro no es algo preciso, programo en basic, si necesito tiempos exactos y saber donde estoy en cada momento, assembler. C me lo salto, para mi C o basic son lo mismo, ambos los usaría si lo que quiero hacer algo en que la precisión no sea de importancia, pero me quedo con basic.

:confused: :confused: :confused:
Bueno...sin palabras....

Lamentablemente, cuando la única herramienta que uno tiene es un martillo...todo se parece a un clavo ;)
 
decíselo a los cientos o miles de programadores que desarrollaron el kernel de LINUX o FreeBSD o algunos de los unixces o aún del mismo Windows.

En lo que si yo haria un poco de diferencia es que a profesionales... no me refiero a ello... me refiero a programadores de la NASA o desarrolladores de tecnologías de punta... pero de igual forma... es muy dificil...

lo mas importante es que la mayoría y no digo todos aqui somos amateurs y basic es una excelente opción....
asi que a mi gusto... muchos deberian considerarlo como un buen lenguaje...

Saludos...
 
lo mas importante es que la mayoría y no digo todos aqui somos amateurs y basic es una excelente opción....
asi que a mi gusto... muchos deberian considerarlo como un buen lenguaje...

No es que Basic sea malo, al menos para los microcontroladores, el problema es que NO ES ESTANDARD y hay un par de millones de versiones según la idea de cada empresa que desarrolla un compilador, lo que te exige aprender casi el 50% del lenguaje cada vez que encarás un procesador diferente. En cambio al C solo lo estudias una vez...
 
lo que te exige aprender casi el 50% del lenguaje cada vez que encarás un procesador diferente.

En eso si tienes bastante razon... estoy metiendome en esto de los micros... y baje varios compiladores para seleccionar el mas adecuado...

si tienen diferencias muy marcadas....

pero por otro lado... e insisto y creo que queda clara mi postura... la ventaja es que en no mas de tres o cuatro dias ya hice mis primero simulados en tres compiladores de basic diferentes.. entonces si yo no pretendo hacer muchos circuitos y maquinas o lo que sea, esta bien... si mi intencion fuera competir en un mercado... definitivamente optaría por un compilador de C.... esa es toda la diferencia y la mas importante en mi criterio...
 
Última edición:
Pregunta: Con los micros potentes y baratos que hay hoy en día, ¿Vale tanto la pena programar en assembler?

Obviamente, sé que hay aplicaciones donde hay que usar assembler, pero creo que para muchísimas aplicaciones, un lenguaje de alto nivel como C sirve perfectamente, es más eficiente en cuanto al tiempo para programar, depurar, es modular, mucho más legible...
Yo creo que si no se precisa una velocidad excepcional o una cantidad de memoria ínfima, el C está bien. Además a veces se puede incluir código en assembler dentro del C para ciertas cosas (obviamente depende del micro, del lenguaje y del IDE).
Para dar un ejemplo, el AVRUSB (Implementación de USB por software para AVRs), está portado al Arduino (que se programa en C, pero está incrustado el código en asm dentro del C, osea que permite modularidad inclusive con ASM).


Yo por ahora, con C ando más que bien, he pensado en aprender ASM, pero la verdad, todavía no he tenido nunca una aplicación donde lo necesite y no pueda usar C.
 
c para profesionales??? no jodas ezavalla!! los profesionales programan en assembler!! con ello pueden saber exactamente lo que se esta haciendo, o quizás para mi (y las personas que conozco) un programador profesional es otra cosa...
Para mi si lo que quiero que haga el micro no es algo preciso, programo en basic, si necesito tiempos exactos y saber donde estoy en cada momento, assembler. C me lo salto, para mi C o basic son lo mismo, ambos los usaría si lo que quiero hacer algo en que la precisión no sea de importancia, pero me quedo con basic.

No podes decir que C no es importante.

Que pasa si estoy usando un 8051, y el dia de mañana quiero pasarme a un ARM, PIC o cualquier otro, ¿podria hacerlo con el lenguaje basic? ¿tendran todos estos uC las mismas funciones? (incluso el 8051 ni se si tiene basic)

Yo justamente, de los 3 posibles lenguajes (assembler, C y basic), al que menos bola le daria es al basic.
 
hola a todos, yo creo que lo que dice ezevalla es correcto, lo que pasa , como ya dijeron aca hay mas que nada hoobystas.
creo que hay que distinguir : EL : ¿PARA QUE LO USO ??
un PROFESIONAL no se la va a pasar diseñando manejo de reles o displays simples , alguna vez entra alguno que DE VERDAD esta terminando la facu y hace alguna pregunta y quedan todos callados (de culo ) por que ni siquiera entienden de que habla, hay aplicaciones donde realmente se requiere esos 32K o mas de memoria de programa, y se necesitan hacer operaciones complejas.
Miren en el tema de acertijos de logica y comprension, cuando se ponen alejandro y eduardo que si tienen estudios superiores, ........los demas ......ni j.
es asi la cosa, hay niveles, por algo se inventaron los micros de mas de 8 bits y los DSPIC , son aplicaciones que ni entendemos de que hablan.
POR ESO DISTINGAMOS NIVELES DE APLICACIONES.

hay que saber distinguir que es lo que llaman profesional.
pero no es lo importante el querer competir en eso, tratemso de aclarar los lenguajes.

me pareceria interesante saber las diferencias entre C y basic, algunas ya las han puesto:

BASIC
1 -- es mas sencillo o no ?? en cuanto a instrucciones y forma de verlas ?? (ver punto 4 , segun que nivel de aplicaciones)
2 -- hay que conocer la data del PIC ?? me refiero a todos los registros, donde anda el stack manejo de tablas, saltos , etc. , o no ??
3 -- ya han puesto que no es muy universal ni portable .
4 -- el basic es mejor HASTA QUE TIPO DE DESARROLLOS ?? me refiero, si yo soy tecnico , y se que nunca hare ni algo de USB, solo manejo de reles o triacs , o luces, o como mucho manejar un display sencillo inteligente o no y un teclado, en ese orden de cosas andare, nada mas .........es mucho mas sencillo elegir un basic??
o mejor igual el C ?????


C
por defecto lo contario .
indiquen otros que consideren relevantes.


hay algunas cosas que ya se ven solas, pero quisiera aclaracion:
un ingeniero que necesita usar un PIC18 o PIC 24 o ARM o DSP ,,,,,,.........usa asm ?? o basic ??
que usa ?? que opciones ??


tengan en cuenta que la cosa nunca es blanco o negro, o esto sirve para todo,por eso la idea es dejar bien claro este tema, hay quienes quisieran aprender un lenguaje y saben que nunca necesitaran mas que tal tipo de proyectos, no solo por su aplicacion sino que ademas por sus conocimientos:
yo no se derivadas ni integrales, se me olvidaron y no quiero volver a eso, asi que un desarrollo complejo no solo involucra saber "EL LENGUAJE" , sino que tambien "LA TEORIA" y "las matematicas " para poder desarrollarlo.

.

saludos
 
Última edición:
Hola fer...
tu juzga...
estoy empezando con los micros y utilice este codigo de basic (picbasic pro) para entenderlo...

Código:
@ device xt_osc 
define osc 4    
led var portb.0                       
inicio:
HIGH  led   
goto inicio 
end

es todo lo que se necesita para encender un led...
no me encontrado ninguno de C seria interesante que alguien pusiera un codigo en C para encender unicamente un led...

Saludos

Pd... y se puede simplificar mas aun...
Código:
@ device xt_osc ; se le dice al compilador que se va a utilizar un osc externo
define osc 4    ; se define la frecuencia del oscilador 4Mhz
HIGH  portb.0   ;se pone en alto del puerto b el primer bit 
end  ;finaliza programa
 
Última edición:
lubeck ponele que estas eligiendo un PIC determinado, no necesitas definir lso registros iniciales ??
que ports seran I/O , que flags tenes que tocar??
definir las variables que usaras , etc, etc.......(re inchapelo......)

tomas cualquier PIC , le pones eso y listo ???

es interesante ver el mismo programa en distintos lenguajes, pero no es solo eso, entre otras cosas hay que saber (como pregunte mas arriba ) que pasara cuando hago un progrmita un poco mas largo, o otras cosas.

yo solo pregunto, NO se basic ni C .
 
Atrás
Arriba