Autor Tema: pasar de asm a c  (Leído 8849 veces)

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

Desconectado pelusac

  • PIC16
  • ***
  • Mensajes: 118
pasar de asm a c
« en: 30 de Noviembre de 2005, 05:14:00 »
Hola a todos.
Como principiante en el tema de los microcontroladores pic tengo una duda q a lo mejor es una tonteria, pero que para mi resolverla seria bastante util.
¿como pasar codigos en asm a lenguaje c?.
Estoy aprendiendo a programar en c, de ensamblador no tengo ni idea, en la red hay muchos ejemplos en ensamblador y creo que podria ser muy apropiado pasarlos a c.
gracias a los creadores del tutorial de programacion en c y ejemplitos en c para el pic 16f648
saludos de otro sevillano nocturno66 y vszener loco

Desconectado Artifox

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 455
    • Quadbot
RE: pasar de asm a c
« Respuesta #1 en: 30 de Noviembre de 2005, 13:11:00 »
Hola, hasta donde yo conozco no hay ningunprograma que pase de Assembler a C o a Basic, solo los mismos compiladores que pasan de C o basic a Assembler en algunos casos.

Lo que te recomiendo es que cuando veas un codigo en ASM trates de entenderlo viendo los comentarios que ponen para que luego lo hagas en C, pues no encuentro otra manera de pasar los codigos...
Video Quadbot
Saludos desde mi querido Perú.
Si realmente queremos que el mundo cambie debemos empezar por nosotros mismos... ;)

Desconectado pelusac

  • PIC16
  • ***
  • Mensajes: 118
RE: pasar de asm a c
« Respuesta #2 en: 30 de Noviembre de 2005, 18:07:00 »
Gracias por la ayuda, seguire intentando descifrar el asm y no liarme en los programas largos ..
En fin siempre aprendiendo,,,,,,,Giño
Saludos desd sevilla.......Rebotado

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: pasar de asm a c
« Respuesta #3 en: 01 de Diciembre de 2005, 07:00:00 »
Escrito originalmente por pelusac
Gracias por la ayuda, seguire intentando descifrar el asm y no liarme en los programas largos ..
En fin siempre aprendiendo,,,,,,,Giño
Saludos desd sevilla.......Rebotado


Como te dijo Artifox la solución es que entiendas la lógica y la trates de codificar en C.

Dependiendo de que quieras hacer, el C suele ser muy tedioso.  A veces para operaciones de puerto, con E/S lo más aconsejable es el assembly.  Es más directo y en el C en definitiva terminas haciendo lo mismo.

Saber assembly es importante ya que si tienes algun "problema" el C no suele tener todas las respuestas ya que muchas veces tienes conflictos con el compilador o con algún aspecto del mismo que si no utilizas bien tu aplicación funcionará mal.

Mi consejo es que para aplicaciones que utilices muchos datos y que la lógica sea compleja que utilices el C, y para aplicaciones que sean más bien de controlar cosas, o medir algún parámetro o leer un teclado , utilices el assembly.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado pelusac

  • PIC16
  • ***
  • Mensajes: 118
RE: pasar de asm a c
« Respuesta #4 en: 02 de Diciembre de 2005, 05:32:00 »
Gracias x todo Artifox y Maunix, mi problema basicamente radica en que yo soy un simple currante es decir que voy de obra en obra como mantenedor de instalaciones asi que mis conocimientos se limitan a los de la formacion profesional
y ser autodidacta, en fin los pic siempre me interesaron y tras varias inmersiones en el campo he conseguido aprender algo Sonrisa) .Claro en esta situacion aprender a programar en c me resulta mas facil, pero ya estoy empezando con mis primeros pinitos en ensamblador........
Asi que gracias a todos los que me han brindado su ayuda xq graciaa a ellos en la fabrica me han facilitado tiempo para poder realizar algunas aplicaciones ,muy sencillas pero utiles.....
Si no es mucha molestia todos los ejemplos que tngan x ahi en ""c"" si me los pueden enviar me harian un gran favor ,por ejemplo termostatos digitales, relojes horarios digitales, lectores de voltaje, control PID.......vamos todo lo que sea sencillo de usar y util:Sonrisa),,,anda que no pido na je,je.............
Es que el curso de c y los ejemplos los he echo todos ya...........
Weno gracia y un saludo de sevilla.....viva la cerveza y el heavy.......que de eso es la fabrica je,je.....
Ahi va mi correo:
pelusac@hotmail.com
Flash

Desconectado hernando2999

  • PIC12
  • **
  • Mensajes: 99
RE: pasar de asm a c
« Respuesta #5 en: 18 de Enero de 2006, 00:51:00 »
Escrito originalmente por pelusac
Gracias x todo Artifox y Maunix, mi problema basicamente radica en que yo soy un simple currante es decir que voy de obra en obra como mantenedor de instalaciones asi que mis conocimientos se limitan a los de la formacion profesional
y ser autodidacta, en fin los pic siempre me interesaron y tras varias inmersiones en el campo he conseguido aprender algo Sonrisa) .Claro en esta situacion aprender a programar en c me resulta mas facil, pero ya estoy empezando con mis primeros pinitos en ensamblador........
Asi que gracias a todos los que me han brindado su ayuda xq graciaa a ellos en la fabrica me han facilitado tiempo para poder realizar algunas aplicaciones ,muy sencillas pero utiles.....
Si no es mucha molestia todos los ejemplos que tngan x ahi en ""c"" si me los pueden enviar me harian un gran favor ,por ejemplo termostatos digitales, relojes horarios digitales, lectores de voltaje, control PID.......vamos todo lo que sea sencillo de usar y util:Sonrisa),,,anda que no pido na je,je.............
Es que el curso de c y los ejemplos los he echo todos ya...........
Weno gracia y un saludo de sevilla.....viva la cerveza y el heavy.......que de eso es la fabrica je,je.....
Ahi va mi correo:
pelusac@hotmail.com
Flash


Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
RE: pasar de asm a c
« Respuesta #6 en: 17 de Febrero de 2006, 23:10:00 »
Saludos:

Se podria hacer lo contrario?

Me explico, si tengo un programa en C y genero el HEX respectivo, luego lo cargo en el IC-Prog y veo el ASM y luego lo grabo es valido? Sonrisa Gigante

Segun tengo entendido para un mismo programa escrito en C ocupa el doble o triple de espacio que uno escrito en ASM, podrian explicar porque.

Gracias
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: pasar de asm a c
« Respuesta #7 en: 18 de Febrero de 2006, 07:35:00 »
Escrito originalmente por veguepic
Saludos:
Se podria hacer lo contrario?
Me explico, si tengo un programa en C y genero el HEX respectivo, luego lo cargo en el IC-Prog y veo el ASM y luego lo grabo es valido? Sonrisa Gigante



Claro, al tener el .hex ya tienes los datos a grabar en el pic, no importa si lo generaste con el compilador de assembly, el del C , de basic o de tantos otros que andan dando vuelta por ahí.

Escrito originalmente por veguepic

Segun tengo entendido para un mismo programa escrito en C ocupa el doble o triple de espacio que uno escrito en ASM, podrian explicar porque.



Porque? la pregunta tiene una respuesta que puede ser muy corta o muy larga, pero básicamente te explico que es porque en el C todo se hace mas "genérico" y al pasarse al assembly hay que adaptarse al microcontrolador en cuestión.

Además todo la cuestión de paso de parámetros a funciones y el manejo de algo que se llama "pila" hace que un código en C sea más largo que uno que haga lo mismo pero en assembly.

Te doy un ejemplo.

En C, tu declaras variables y no importa donde estén alojadas, imaginemos que la variable a está en el RAM BANK #0 (pagina 0 de memoria de datos) y la b en el Ram Bank #2 .
si haces
Codigo:

 a = a + 2 + b;



el Compilador deberá hacer los cambios de banco adecuados para poder obtener el dato de b, y de a.  Esto si uno está en assembly seria igual.
Entonces el compilador generará un código que haga algo como esto:
1) Situarse en RamBank de a, leer a y guardarlo en una variable en la pila.
2) Situarse en RamBank de b, leer b y guardarlo en una variable en la pila.
3) Leer de la pila el valor a y b, sumarlos y luego sumarles dos, guardar esto en la pila.
4) Situarse en RamBank de a, leer el valor de la pila y asignarselo.

Ahora bien, tal vez la variable a y b estan en el mismo banco, pero como uno en un software puede hacer lo que le plazca el compilador no tiene forma de saber la rutina fue llamada cuando uno estaba en el rambank0 o en el rambank1, etc entonces también agrega el código para pasar de RamBank #0 a Rambank #0! suena estúpido pero es lo que hacen porque la subrutina bien se podría llamar de otro lado.

Además toda esa gestión de manejo de pila consume muchas instrucciones.

Ni te cuento cuando se pasan parámetros a una función o cuando se tienen que evaluar sentencias del tipo "if then else" .

Además en c, cuando uno incluye una librería, la misma se compila con todas las fuunciones que tiene dentro, no solo con la que uno usa.
Lo mismo ocurre para las rutinas de manejo de interrupciones, o con el manejo de los RomBanks, es decir la ubicación de las rutinas en la memoria de programa.  El compilador agrega los bits que son necesarios en el PCLATH todas las veces no importa si siempre estamos en el mismo RomBank, y esto es porque no sabe si llamaremos la subrutina desde el RomBank0 o el 1, 2, 3.  La lista de ejemplos es interminable jeje.

Cuando codificas en assembly uno sabe exactamente lo que se está haciendo y no es nada genérico sino una solución particular para ese problema específico.

Lo de 2 o 3 veces el tamaño es relativo, hay programas en c que pueden ocupar hasta 10 veces más que uno en assembly  y otros que solo 2 o 3 veces mas.

Cuando el código es mayor y se reutilizan más las mismas subrutinas el código en C se hace más optimo en relación al assembly pero nunca llegará a igualarlo.  

Además muchisimo tiene que ver la arquitectura.  En un pic 12 o 16 esto es muy notorio, precisamente porque tienen todo el tema de paginado de memoria de datos y de programa, además tienen pocas instrucciones que hacen más dificil y laboriosa la tarea del compilador.

En los 18, la arquitectura de los mismos (no existe paginado de memoria de programa ) ayuda a que con esa sola modificación ya el código en c sea mas pequeño, pero además tiene mas de 60 instrucciones algunas muy cómodas cuando se quiere hacer comprobaciones con lenguaje c, comprobaciones como si un registro es 0 en una sola instruccion o de si un bit es 0, etc.  Además tienen una memoria "access bank" la cual se puede acceder sin importar en qué página de memoria uno se encuentre, y esto optimiza mucho sobre todo la gestión de la pila y cuestiones de variables que se utilicen mucho en el compilador.

Espero haberte aclarado algo en vez de confundirte mas.

Saludos

Espero haberte aclarado más o menos el problema.





- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
RE: pasar de asm a c
« Respuesta #8 en: 18 de Febrero de 2006, 23:56:00 »
Gracias por las respuesta maunix, de nuevo mas claro ni el agua Muchas risasMuchas risas

lo que pasa es que tengo un programa en c y la verdad que entiendo poco me es mas facil llevarlo al asm del cual entiendo algo. Muchas risasMuchas risas y eso que antes sabia programar en c. loco

Como los tiempos son criticos, creo que me viene mejor el asm, porque concluyo que el C demora mas en hacer una misma accion que el asembler.

Saludos
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: pasar de asm a c
« Respuesta #9 en: 20 de Febrero de 2006, 05:15:00 »
Escrito originalmente por veguepic

Como los tiempos son criticos, creo que me viene mejor el asm, porque concluyo que el C demora mas en hacer una misma accion que el asembler.


Mira , si los tiempos son críticos siempre lo mejor es el assembly.  El punto es que algunos problemas son dificiles de resolver en assembly si no tienes mucha experiencia y el C te resuelve muchas cosas muy fácil.

Si tu software tiene muchas cuestiones de lógica y de parámetros que deberás ajustar, el C te brinda mayor versatilidad a la hora de hacerlo, ya que es más facil recompilar un código o detectar donde está el problema.  Hacer "if then else" en assembly puede llegar a ser muy tedioso cuando hay muchas variables en juego, pero en el c es solo escribir la sentencia y que el compilador haga su trabajo!

En la mayoría de los entornos de trabajo, se termina trabajando en C con microcontroladores mucho más rápidos como para compensar la pérdida de velocidad al compilarlo en un lenguaje como el C.

En mi caso personal, tengo muchos proyectos desarrollados con ambos lenguajes, pero ha primado el C cuando realmente la lógica era extensa o era algún algoritmo PID en que debía realizar numerosos ajustes.  En estos casos suele ser mejor el C.  Ahora cuando ya tienes depurado tu sotware en C y quieres hacerlo más veloz o mas económico al hardware (porque puedas utilizar luego un microcontrolador más pequeño y más económico) entonces es ahí donde puedes pasar a codificarlo en assembly.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything