Autor Tema: ASM desde C  (Leído 11574 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
ASM desde C
« en: 16 de Mayo de 2008, 23:14:14 »
Hola muchachosT

Tengo una duda con respecto a pasar de codigo C a ASM.
Uno puede ver el codigo en ASM con el Diassembly Listing despues de haber hecho el programa en C, pero: Es posible compilar en ASM el codigo generado por el Diassembly Listing???

Hice una prueba y me genera un error con el Linker ( Adicione al codigo generado por el Diassembly el p=18F452 y el #include ... y el org 0x00 y el END, ademas de quitar lo que no es ASM )

Necesito ayuda con eso por favor.

Gracias.

Saludos
El papel lo aguanta todo

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: ASM desde C
« Respuesta #1 en: 17 de Mayo de 2008, 01:15:02 »
Saludos MLO!
Mira debería funcionarte... sólo que hay algunos detalles que deberías corregir... porque CCS genera un asm pero con una nomenclatura un poco peculiar... por ejemplo, los registros de bancos 1 en adelante los enumera otra vez desde 0...
Y otras cosillas como por ejemplo "btfsc 03.2" que en realidad sería btfsc 03,2...
Bueno seguramente eso ya lo sabías... de todos modos me parece interesante tu planteamiento... si quieres sube el .lst y en lo que tenga un chance lo pruebo...
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: ASM desde C
« Respuesta #2 en: 17 de Mayo de 2008, 08:08:51 »
Hola firepic y MLO_. El archivo C/ASM es un archivo con formato .lst y no con formato .asm, quiere decir que solo sirve para la lectura. Es muy dificil sino imposible para el compilador volver a armar el C a partir del assembler, pues este solo fue construido para generar bloques frefijados de código assembler a partir de un lenguaje C y cambiar alguna instrucción dentro de esos bloques de assembler conlleva a que el compilador ya no pueda representar al mismo por una instrucción especifica en C. Si, los bloques de código assembler que generan las instrucciones C son muy flexibes y CCS puede adaptarlos a cada programa segun lo requiera, pero siguen siendo una correspondencia no biunivoca y no univoca, es decir, cada instruccion de C representa un conjunto dinámico de lineas en asm, pero no toda instruccion en asm puede representarse por una instrucción en C ni por un conjunto de instrucciones de ese lenguaje. Por lo tanto, la operacion inversa no esta permitida.

Lo que puedes hacer es utilizar el mplab para compilar el C como asm y luego trabajar con el asm para darle los toques finales (No modifiques el asm hasta estar seguro de que ya has programado todo lo posible en C, pues no hay vuelta atras). Otra forma que se utiliza muchisimo y que es la mas legible en cuanto a mantenimiento del código es colocar el código en asm dentro del código en C, esto se puede hacer en CCS mediante la declaración #ASM.

Saludos.
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: ASM desde C
« Respuesta #3 en: 17 de Mayo de 2008, 10:09:57 »
Saludos Dr. Gonzalo!

Bueno pues yo nunca quise hablar de pasar ASM a C, si le entendía bien a MLO, creo que eso tampoco es lo que él quiere....como tú bien lo dices es casi que imposible...
Si bien el archivo que genera ccs es .lst y no .asm, éste contiene el código asm por cada instrucción de c... lo que yo pensé es que acomodando ese código asm podría ser compilado por un compilador de assembler (y valga la redundancia), como el mpasm... en lo que tenga un rato de ocio voy a tratar de probarlo con un código sencillo de c.. y a ver qué pasa.

Es decir, pasar de C a ASM; de ASM a C nunca!  :shock:
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: ASM desde C
« Respuesta #4 en: 17 de Mayo de 2008, 12:33:18 »
Hola amigos.

Pues, hice la prueba con un micro 16F en el que enviaba una cadena por el serial y me ha funcionado. Eso si, tuve que incluir algunas cosillas como el list p, el #include, el END, los org respectivos y compilo normal. PERO!!!! (siempre hay un pero en esto) el problema radica en que si adiciono archivos en el LKR, me genera el error en el Linker!!!! Es decir, si no coloco el archivo .lkr del respectivo micro en el proyecto, compila bien, pero si lo adiciono, genera error en el Linker.

No se si tenga que ver con que CCS no es ansiC y tiene sus propios archivos .h para configurar las caracteristicas del PIC.

Si alguien me explica...... gracias.

Saludos  :)
El papel lo aguanta todo

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: ASM desde C
« Respuesta #5 en: 17 de Mayo de 2008, 19:49:35 »
MLO__ realmente me parece un trabajo aterrador el que mencionas  :shock:

imagina mirar todas las SFR en sus direcciones, los saltos , las etiquetas, todos son numeros que enredarian. Sin mencionar que tendrias que reacomodar todo el listado para que al final te compile el código

 
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: ASM desde C
« Respuesta #6 en: 17 de Mayo de 2008, 20:22:39 »
Tienes razón palitroquez...
Un trabajito para tiempos de ocio...  :D
Nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: ASM desde C
« Respuesta #7 en: 17 de Mayo de 2008, 20:26:13 »
Si, realmente, opino exactamente igual que palitroquez, no le veo practicidad al metodo, tal vez con un 16F pueda hacerse, pero uno no puede andar modificando el .asm de un 18F, es un trabajo casi insoportable si tienes que hacerlo, hay que trabajarlo en C y si llegado el caso necesitamos hacer alguna operación en particular que CCS no la contemple podemos incluir el pedazo de asm en el archivo .C.

Buen trabajo de todas formas por lograr compilar el .lst.

Saludos.
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ASM desde C
« Respuesta #8 en: 18 de Mayo de 2008, 14:47:10 »
Uno puede ver el codigo en ASM con el Diassembly Listing despues de haber hecho el programa en C, pero: Es posible compilar en ASM el codigo generado por el Diassembly Listing???
Si, es perfectamente posible.

porque CCS genera un asm pero con una nomenclatura un poco peculiar... por ejemplo, los registros de bancos 1 en adelante los enumera otra vez desde 0...
No es peculiar, es así como es el assembly en el micro.  Algunos usan por ejemplo 0x80 para direccionar el primer registro del banco1 pero eso carece de efecto al ensamblarlo ya que el registro que contendrá ese valor tiene solo 7 bits, con lo cual poner 0x80 es igual a poner 0x00.  Por ello están los bits RP0 y RP1.

No hay forma luego de ensamblar de que al volver para atras, tengas de nuevo el 0x80, no en forma directa, salvo que uses algún código que analice que encendiste los bits RP0 y RP1 antes de esa línea, pero esto puede ser engañoso si es una subrutina que es llamada desde varios lugares :)




PERO!!!! (siempre hay un pero en esto) el problema radica en que si adiciono archivos en el LKR, me genera el error en el Linker!!!! Es decir, si no coloco el archivo .lkr del respectivo micro en el proyecto, compila bien, pero si lo adiciono, genera error en el Linker.

No se si tenga que ver con que CCS no es ansiC y tiene sus propios archivos .h para configurar las caracteristicas del PIC.

No se como será el CCS en esta parte pero tal vez no necesites el .lkr para ese compilador.  El MPLAB IDE es una herramienta genérica y sus proyectos también , entonces el hecho de que te deje incluir un archivo .lkr no significa que el compilador y linker que uses, lo vayan a usar.

El C18 sí hace uso del linker file y debes incluirlo.


MLO__ realmente me parece un trabajo aterrador el que mencionas  :shock:

imagina mirar todas las SFR en sus direcciones, los saltos , las etiquetas, todos son numeros que enredarian. Sin mencionar que tendrias que reacomodar todo el listado para que al final te compile el código

Jaja, coincido totalmente. 

En lo personal a veces suelo analizar el assembly generado pero para ver cómo optimizar mi código en C.  Es común que por ejemplo un if ordenado de una forma y de otra no produzcan el mismo código.

MLO__ creo que debes aclarar bien para qué quieres hacer todo esto, ya que tal vez te estes haciendo demasiado problema sin necesidad.  Otra forma, es que estando en el MPLAB IDE, si vas a View/Program Memory luego puedes Exportar eso a un archivo de texto.  Allí tienes el código también en assembly.

Saludos

Pasar de ASM a C no es imposible, siempre hubo herramientas que hacian cosas por el estilo para PC y es factible que las haya o las pueda haber para microcontroladores PIC .  Les dejo un ejempo MicroApl

- 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 MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: ASM desde C
« Respuesta #9 en: 18 de Mayo de 2008, 15:21:10 »
Hola

Pues si, deberia indicar porque estoy haciendo todo ese paseo. Pues me han pedido el codigo fuente de una aplicacion que hice y ademas el ASM ( el ing. tec. de la empresa no maneja C ) y me ha tocado arreglar el .list  ( que no es tarea facil !!!!) y claro, toca hacer la prueba de que compila!!!!

Pues la prueba con el 16 ha salido bien, pero con el 18 no me fue tan bien, me genera muchos errores y estoy que mando todo para el .... bueeee.

Compare los .hex generados por la compilacion en C y la compilacion en ASM y solo se parecen en los 2 primeros renglones el resto es diferente y no corre en proteus.  :( :( .

Gracias por todas las ayudas.

« Última modificación: 15 de Noviembre de 2008, 17:37:22 por MLO__ »
El papel lo aguanta todo

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ASM desde C
« Respuesta #10 en: 18 de Mayo de 2008, 22:36:11 »
Je, que extraño te debiera dar exactamente lo mismo salvo que los amigos de CCS no saquen toda la info al archivo .lst que es necesaria.

Yo que tu no me la complico, si eso es lo que necesitas, porque no generas el archivo .HEX con el compilador y luego desensamblas el .HEX?

El Winpic800 te permite hacer eso, el MPLAB también.  Busca en el foro como desensamblar y verás la respuesta!  :)


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 firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: ASM desde C
« Respuesta #11 en: 19 de Mayo de 2008, 19:16:58 »
Saludos!
Maestro Maunix, gracias por tus explicaciones, tan claras como siempre.
Ey MLO, me parece muy bueno eso de desensamblar el .hex generado por el ccs... mucho más fácil!  :D
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: ASM desde C
« Respuesta #12 en: 19 de Mayo de 2008, 23:44:33 »

PD// Solucion: Insistir a que el ing. se apasione por el C y reciba el codigo fuente en C!!!  :mrgreen: pero esta muuuy dificil!!!!  :D


Ya sabes como dicen las malas lenguas MLO, "el que sabe ... sabe y el que no, es jefe!!!!!!"  :D :D

Siempre tuve el presentimiento de que mis empleados la usan muy a menudo  :D :D :D por algo será.

Saludos.
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: ASM desde C
« Respuesta #13 en: 19 de Mayo de 2008, 23:49:42 »
 :D  :D  :D
Muy buena esa Dr. Gonzalo!
Ese refrán como que es internacional no?  :D
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: ASM desde C
« Respuesta #14 en: 20 de Mayo de 2008, 11:35:45 »
 :-/ :-/ :-/ :-/

Manos a la obra !!! a desensamblar se ha dicho !!!!!
mucho mejor

Y no Gonzalo  :D :D !!!! el que sabe sabe y ya  ( al menos en tu caso aplica ) :D :D  !!!! los jefes son los jefes  :roll: jajajaja Menos mal el ing no es mi jefe, si no ya me hubieran hechado!!!!, porque ya llevo mas de una semana y bueeee...... :D  :D

Saludos

El papel lo aguanta todo


 

anything