Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   ASM y Microcontroladores (https://www.clubdelphi.com/foros/forumdisplay.php?f=44)
-   -   Desamblar código *.hex (https://www.clubdelphi.com/foros/showthread.php?t=58278)

REHome 15-07-2008 05:40:57

Desamblar código *.hex
 
Hola:

Aquí tengo un código que hice muy pequeño.
He intentado desamblar alguno pero grande y no soy capaz de saber que PIC usa, ni configuración, sólo las instrucciones.

Los dejo aquí el código que hice muy pequeño a ver si alguien sabe desamblarlo y hacerlo funcionar en el MPLAB, lo he probado con v8.14. Al menos saber que hace este programa que hice.
Código:

:020000040000FA
:1000000083168601FF308500831286018501051C59
:0E0010000C28061386170728061786130728E4
:02400E00F13F80
:00000001FF

Saludos.

JoseFco 15-07-2008 12:41:56

Cita:

Empezado por REHome (Mensaje 300523)
Hola:

Aquí tengo un código que hice muy pequeño.
He intentado desamblar alguno pero grande y no soy capaz de saber que PIC usa, ni configuración, sólo las instrucciones.

Los dejo aquí el código que hice muy pequeño a ver si alguien sabe desamblarlo y hacerlo funcionar en el MPLAB, lo he probado con v8.14. Al menos saber que hace este programa que hice.
Código:

:020000040000FA
:1000000083168601FF308500831286018501051C59
:0E0010000C28061386170728061786130728E4
:02400E00F13F80
:00000001FF

Saludos.

Hola ReHome, no estoy en mi computador y no te puedo decir exactamente que hace ese codigo pero te dire que contiene.
En la primera linea tenamos dos bytes de data:

:02 address 0000 04 extended linear address y 00 00 son los dos bytes de data en BCI51 esto es hacer nada. 00 hacer nada. ????

:10 aqui nos dice que tenemos 16 bytes de data y que comenzara a estar localizada en el address 0000 algo raro pues esa address en la linea anterior esta ocupada ?? 00 esto es data record a partir del address (0000) esta es la data > 83 16 86 01 FF 30 85 00 83 12 86 01 85 01 05 1C estos son los 16 bytes de data validos es la segunda linea.

A la tarde cuando llegue a la casa terminare de explicarte que veo en ese codigo y que hace en realidad eso.

Un Saludo.

REHome 15-07-2008 17:43:39

Ok, esperaré, lo que no se es como sabes lo que dices por la cara.

JoseFco 15-07-2008 17:50:40

Cita:

Empezado por REHome (Mensaje 300583)
Ok, esperaré, lo que no se es como sabes lo que dices por la cara.

Hola REHome un intelhex file no es dificil de interpretar si conoces su formato.Dejame te paso una url que lo explica y luego cuando este en la casa lo paso a asm y te digo que hace exactamente.

Un Saludo.

JoseFco 15-07-2008 17:54:56

Dale una miradita a este link:Intelhex.

Un Saludo.

JoseFco 15-07-2008 23:25:31

Hola REHome, Esto es lo que contiene ese intelhex en data a programar:

:020000040000FA
:1000000083168601FF308500831286018501051C59
:0E0010000C28061386170728061786130728E4
:02400E00F13F80
:00000001FF

Primera Linea:

Address 0000 Data 00
0001 00 // a esto no le veo sentido:confused:

Segunda Linea:
Address 0000 Data 83
0001 16
0002 86
0003 01
0004 FF
0005 30
0006 85
0007 00
0008 83
0009 12
000A 86
000B 01
000C 85
000D 01
000E 05
000F 1C

Tercera Linea:
Address 0010 Data 0C
0011 28
0012 06
0013 13
0014 86
0015 17
0016 07
0017 28
0018 06
0019 17
001A 86
001B 13
001C 07
001D 28

Cuarta Linea:
Address 400E Data F1
400F 3F
La ultima linea es "End of line", no tiene valor en data a programar.

Para que tipo de uC fue creado este file, no tengo idea.Pero puedes estar seguro que no es BCI-51. Por lo cual no te puedo ayudar en eso.Solo trabajo la familia 8051 y sus parientes.;)

Si me dices como generastes este file, a lo mejor te puedo ayudar un poco mas.

Un Saludo.

REHome 16-07-2008 02:17:51

Lo generé del PIC 16F84A con el MPLAB v8.14

JoseFco 16-07-2008 02:25:42

Cita:

Empezado por REHome (Mensaje 300717)
Lo generé del PIC 16F84A con el MPLAB v8.14

Por eso no entiendo esos instruction opcodes. Yo de PIC se lo mismo que de astronomia= 0 :D

Pero no esta complicado, ya que segun tengo entendido ese chip solo trae 35 instruciones.Es cosa de obtener el instruction set para ese chip.

Un Saludo.

PD: El intelhex formato es igual para todos los chips, es unica su metrica.pero a la hora de interpretarla un chip, pues tiene que estar escrita para el.

JoseFco 16-07-2008 02:48:35

OK aqui tienes la informacion para poder interpretar ese opcode.
PIC 16F84A. En la pagina #36 de ese documento estan las 35 instruciones de ese chip. Si te fijas el 16F84A es un chip que funciona con 14 bits de instruciones.Yo la verdad es la primera vez que miro la informacion de este PIC y se me hace curioso.;)
No se porque quieres ir por la forma mas dificil de interpretar ese code, tienen que existir descompilador para ese chip.de todas formas el codigo no es muy grande y se puede hacer byte por byte.


PD: a ver si entra algun amigo que trabaje estos PIC y te hecha una mano con ese codigo.


Un Saludo.

REHome 17-07-2008 06:35:54

Hola amigo, la verdad que busqué algo para descompilarno sin comlicarte la vida y salió esto.

Código:

bsf status,rp0        ; switch to bank 1
        clrf trisb
        movlw FF        ; d'255' b'11111111' a''
        movwf trisa
        bcf status,rp0        ; switch to bank 0
        clrf portb
        clrf porta
lbl_2        btfss porta,0
        goto lbl_1        ; lbl_1 = 0xC
        bcf portb,6
        bsf portb,7
        goto lbl_2        ; lbl_2 = 0x7
lbl_1        bsf portb,6
        bcf portb,7
        goto lbl_2
ORG 0x2007
        addlw F1        ; d'241' b'11110001' a''

Lo que estaba buscando está aquí.

http://www.geocities.com/dinceraydin...sm/djdasm.html

Para que lo sepan.

¿Entiendes este asm? Seguro que algo si. con esto controla cualquier periférico.
Saludos.

JoseFco 17-07-2008 09:10:27

Hola REHome, El codigo para los PIC es completamente diferente a los uC que yo trabajo y si algo puedo entender en este codigo.El otro dia estube dandole una miradita a las instruciones del 16F84A y a pesar de solo usar 35 instruciones es algo engorroza la configuracion de los mismos.
Aqui estan los instruction codes del 8051 para que tengas una idea lo diferente que son y a pesar de que son 256 instruciones, estan configuradas en forma tal que no es dificil trabajarlas y entenderlas.

Un Saludo.

REHome 17-07-2008 23:54:53

Hola mi muy distinguido amigo:

Gracias por el Links http://www.win.tue.nl/~aeb/comp/8051/set8051.html

Dices que los pobres sólos 35 instrucciones son engorrosas y ese enlace veo que es más engorroso. Este PIC de de gama media de 8 Bits, las de Gama alta son de 77 + (hasta 84 con instrucciones especiales para cada PIC), los la serie 18F, las de 32 Bits mejor ni nombrarlas, las instrucciones son diferentes hasta los nombres y forma de programar.

Voy echar un vistazo ese enlace.

Saludos.

JoseFco 18-07-2008 00:05:32

Hola REHome, usando ese programita del link que proporcionas y tu intelhex:

Cita:

0 1683 bsf status,rp0 ; switch to bank 1
1 186 clrf trisb
2 30FF movlw FF ; d'255' b'11111111' a''
3 85 movwf trisa
4 1283 bcf status,rp0 ; switch to bank 0
5 186 clrf portb
6 185 clrf porta
7 1C05 lbl_2 btfss porta,0
8 280C goto lbl_1 ; lbl_1 = 0xC
9 1306 bcf portb,6
A 1786 bsf portb,7
B 2807 goto lbl_2 ; lbl_2 = 0x7
C 1706 lbl_1 bsf portb,6
D 1386 bcf portb,7
E 2807 goto lbl_2
ORG 0x2007
2007 3FF1 addlw F1 ; d'241' b'11110001' a''
Si te fijas estan los bytes de data que te dije anteriormente, solo que en el PIC como se programa modo serie de dos bytes en dos bytes (por aquello de las instruciones de 14 bits) pues entran primero el menos significante byte en el caso de los dos primeros bytes del codigo en la segunda linea 83 16 el resultado final es 16 83.;)
Lo que decia de la primera line que no le encontraba sentido, se pierde ( no deja rastro en el codigo final);)

Esta buena esa web y pues una herramienta muy util a los 16F84A.

Un Saludo.

JoseFco 18-07-2008 01:01:30

Cita:

Empezado por REHome (Mensaje 301187)
Hola mi muy distinguido amigo:

Gracias por el Links http://www.win.tue.nl/~aeb/comp/8051/set8051.html

Dices que los pobres sólos 35 instrucciones son engorrosas y ese enlace veo que es más engorroso. Este PIC de de gama media de 8 Bits, las de Gama alta son de 77 + (hasta 84 con instrucciones especiales para cada PIC), los la serie 18F, las de 32 Bits mejor ni nombrarlas, las instrucciones son diferentes hasta los nombres y forma de programar.

Voy echar un vistazo ese enlace.

Saludos.

Engorrosas para tratar de crear el ASM sin ayuda de un programa, a mano o a cara como te refieres.(con un papel ,un lapiz,tus ojos y usando tu mente)El codigo para un PIC 16F84A es una locura y un reto para cualguier experimentado.Alguien que lea este post dira y que sentido tiene tratar de hacer algo que un programita lo hace en unos segundos? mucha razon en eso.Pero existen algunos locos y me incluyo en esa lista que nos gustan estas cosas.Yo aprendi uC metiendo codigo hex dentro de ellos a mano 30 89 FD asi, el primer copilador fue uno de Systronic en Basico y ya para ese entonces era un experimentado en los 8051.
Los instruction codes para el 8051 tu los vez mas engorrosos y es lo que me pasa si trato de leer algo escrito en Chino(como es el caso de los PIC, no quiere decir que porque yo no entienda ese idioma es feo o no es bueno, simplemente que no puedo entender lo que no se.)Pero el codigo del 8051 a pesar de ser 256 funciones diferentes ,unas de ellas de 8 bits, 16 bits y 24 bits.Estan escritas en forma directa y usas todos los bits de un byte de instrucion.esto no pasa en el caso del 16F84A que no todos los bits de una instrucion son usados.Yo puedo ver un intelhex file escrito para un 8051 y sin la ayuda de un programa, pasarlo a ASM sin mucho problema.Esto como decia no es una practica comun, pero tiene sus ventajas tu poder leer el idioma que finalmente interpretan los uC y es que mirando un HEX te puedes dar cuenta de algun error.
Si algun dia incurcionas en los 8051 y sus parientes como lo son los Atmel 89xx te daras cuenta de lo que digo.;)

Un Saludo.

REHome 18-07-2008 04:09:05

Los AVR de Atmel, PIC de Microchip, Motorola ahora Freescale, la verdad todos microcontroladores de diferentes tecnologías que pueden hacer lo mismo si lo deseas. Aunque hay unos mejores que otros.

El 16F84A es ya anticuado, si caso es mejor el 16F88 o 16F876 o 16F876 de gama media, los de gama alta 18F2550, 18F4550 están muy bien y preparados para lenguajes como el C.

Los PIC se programa con un editor oficial gratuito, ahora ya por la v8.14, ahí puedes analizar el código paso por paso.

Ah, la primera vez lo vi engorroso y nunca pensaba que iba a manejar los PIC porque me parecían verdaderamente complicados, pero estudiando con un buen libro www.pic16F84a.com entenderás que puedes hacer mil cosas, eso si, el 8051 es mejor, el 16F84 es para aprender a entender, después eliges lo que quieras.

MPLAB por si siente curiosidad.

REHome 18-07-2008 04:11:31

Para que sepa como lo programé y d qué va.

Cita:


;************************************** PIC16F84A.asm ************************************
;Si el puerto A está activo o a 1, se desactiva el PORTB,6 y se activa PORTB,7
;Si el puerto o PORTA,0 está a 0, ocurre lo contrario.
; ZONA DE DATOS **********************************************************************

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ; Configuración para el
; grabador.
LIST P=16F84A ; Procesador.
INCLUDE <P16F84A.INC> ; Definición de los operandos utilizados.

; ZONA DE CÓDIGOS ********************************************************************

ORG 0 ; El programa comienza en la dirección 0 de memoria de
Inicio ; programa.
bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
clrf PORTB ; Las líneas del Puerto B se configuran como salidas.
movlw b'11111111'
movwf PORTA ; Las líneas del Puerto A se configuran como entradas.
bcf STATUS,RP0 ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
clrf PORTB
clrf PORTA

Principal
btfss PORTA,0 ; ¿Bit 0 del PORTA es "1"?
goto hola
bcf PORTB,6 ; Desactiva el bit 6 del PORTB
bsf PORTB,7 ; activa el bit 7 del PORTB
goto Principal
hola
bsf PORTB,6 ; activa el bit 6 del PORTB
goto Principal
bcf PORTB,7
goto Principal ; Crea un bucle cerrado.
END ; Fin del programa.

donald shimoda 18-07-2008 05:35:41

Cita:

Empezado por REHome (Mensaje 301241)
El 16F84A es ya anticuado, si caso es mejor el 16F88 o 16F876 o 16F876 de gama media, los de gama alta 18F2550, 18F4550 están muy bien y preparados para lenguajes como el C.

Para pics tienes un potente compilador pascal mikropascal, muy recomendable. Para programas de hasta 2K en flash es gratuito.

En cuanto a que los 8051 son mejores, depende.Toda la línea de productos de mi emprea se maneja con PICS desde gama baja a alta y la calidad es excelente. Nunca tuvimos que reemplazar un pic a pesar de tener mas de 500 placas en la calle.

Saludos.

JoseFco 18-07-2008 06:56:51

Cita:

Empezado por REHome (Mensaje 301242)
Para que sepa como lo programé y d qué va.

Aqui en estas dos lineas de tu codigo:


Código PHP:

movlw b'11111111'
movwf PORTA Las líneas del Puerto A se configuran como entradas

movlw b'11111111' // aqui cargas el w (acumulador con el binario 11111111 todos los bits a 1

movwf PORTA // aqui mueves el contenido del acumulador (w) al puerto A, como dices pones el puerto A como entrada, al hacerle pullup interno al mismo.

En un codigo para 8051 esto seria:

MOV A, FFh o si lo deceas MOV A, b'11111111' es lo mismo pero en bin.

MOV P0, A // aqui movemos el contenido del acumulador (A) al puerto 0

Ya te digo yo creo mis programas en asm y solo uso un copilador para generar mi file intelhex. La mayoria de las veces solo uso un notepad y salvo mi file en .asm luego al copilarlo genero el .hex

Puede ser muy dificil para algunos y mirarce impocible para otros, es cuestion de practica.Yo creo una rutina en mi mente y la ruedo en ella, como si estubiera en un micro y si en mi mente funcionar, ten la seguridad de que en el micro rueda.;)


Un Saludo.

donald shimoda 18-07-2008 07:08:55

Cita:

Empezado por JoseFco (Mensaje 301253)
Aqui en estas dos lineas de tu codigo:
Código PHP:

movlw b'11111111'
movwf PORTA Las l&#237;neas del Puerto A se configuran como entradas. 

movlw b'11111111' // aqui cargas el w (acumulador con el binario 11111111 todos los bits a 1

movwf PORTA // aqui mueves el contenido del acumulador (w) al puerto A, como dices pones el puerto A como entrada, al hacerle pullup interno al mismo.

En realidad no. En los pics existe un registro de dirección (para el caso del puerto A seria TRISA) y un registro del puerto en sí (en este caso PORTA).

Ambos estan en la misma posición del banco 0 y 1, entonces como bien muestra el código para modificar el registro de dirección de las líneas (si serán de entrada o salida) lo que haces es acceder al banco 1.
Código:

bsf        STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
Luego el código dice PORTA porque en realidad es el mismo valor (desplazado al banco 1) , pero el registro en realidad es el TRISA.

Nada tiene que ver el pullup interno.

Saludos.

JoseFco 18-07-2008 07:26:02

Cita:

Empezado por donald shimoda (Mensaje 301255)
En realidad no. En los pics existe un registro de dirección (para el caso del puerto A seria TRISA) y un registro del puerto en sí (en este caso PORTA).

Ambos estan en la misma posición del banco 0 y 1, entonces como bien muestra el código para modificar el registro de dirección de las líneas (si serán de entrada o salida) lo que haces es acceder al banco 1.
Código:

bsf    STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
Luego el código dice PORTA porque en realidad es el mismo valor (desplazado al banco 1) , pero el registro en realidad es el TRISA.

Nada tiene que ver el pullup interno.

Saludos.

jajajajajaja TRISA es lo que tienes en los dedos cada vez que escribes algo compadre. Yo de PIC se lo mismo que de astronomia lo comente en un post anterior pero en el caso del 16F84 W es el registro acumulador y en esta instrucion( movlw b'11111111') esta cargando el acumulador con el valor FF hex o 11111111 bin para posteriormente cargar el porta con el valor del acumulador.(movwf PORTA )

eso mismo en codigo para un 8051 seria asi:

MOV A, #FFh
MOV PORT0, A

Te podre una tareita si la contesta seguimos hablando de micros:

Tarea: Usando instruciones para el 8051 creame el siguiente asm:

00110000 10001001 11111101 tienes tres bytes aqui con eso dime que asm se crearia en instruction opcode para un 8051?

Si me contestas eso seguimos hablando de micros.

Un Saludo.




La franja horaria es GMT +2. Ahora son las 20:02:46.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi