ALGUIEN HA USADO ALGUNA VEZ CODIGO MAQUINA??Solo cuando era estudiante, y era porque a los kit de desarrollo con 6800 había que ingresárselo así , en hexadecimal.
...Quise ir mas alla y empece a pedir programas en codigo maquina, sorprendentemente si me proporciono el codigo maquina, aunque, no resulto en ninguno, daba el programa en ensamblador, luego el codigo maquina, cabe decir que el programa era simplemente prender un led, osea poner un pin especifico en estado alto, aqui viene lo raro, el codigo que me daba y el que yo compilaba eran casi iguales, las lineas se diferenciaban en 6 letras o numeros de una linea del codigo, solo que el del chatgpt no funciona, marca error checksum,No tiene nada de raro, ChatGPT con las sumas es peor que Maduro.
... Intente "Educar" al chat gpt diciendole su error, pero nunca lo corrigio. Alguien ha intentado hacer algo parecido??En otros temas funciona, pero con lo que implicase matemáticas fue fracaso total, aunque debo reconocer que algo ha mejorado.
bueno aqui va lo que me da de error
este si funciona
:020000040000FA
:0C0000000128831600308600831286144D
:02400E00F13F80
:00000001FF
este no
:020000040000FA
:0C00000001861683018612831686
:02400E00F13F80
:00000001FF
el que funciona esta compilado con mplab y el otro lo da chat gpt, antes era fallo en las ultimas 6 letra de la linea 2, ahora se extendio
86144D
1861683018612831686
Vamos a desensamblar ambos códigos para convertirlos en instrucciones en ensamblador para el PIC16F84 y luego analizar la diferencia entre ellos.
Código que funciona:
0128 → MOVLW 0x28 ; Cargar literal 0x28 en W
8316 → MOVWF 0x16 ; Mover W a la dirección 0x16
0030 → CLRW ; Limpiar el registro W (W = 0)
8600 → MOVWF 0x00 ; Mover W (que ahora es 0) a la dirección 0x00
8312 → MOVWF 0x12 ; Mover W (que es 0) a la dirección 0x12
8614 → MOVWF 0x14 ; Mover W (que es 0) a la dirección 0x14Código: ASM
MOVLW 0x28 MOVWF 0x16 CLRW MOVWF 0x00 MOVWF 0x12 MOVWF 0x14
Código que no funciona:
0186 → MOVWF 0x86 ; Mover W al registro 0x86 (INDF con FSR = 6)
1683 → BSF 0x03, 6 ; Configurar bit 6 del registro STATUS (cambiar al banco 1)
0186 → MOVWF 0x86 ; Mover W al registro 0x86 (INDF con FSR = 6)
1283 → BCF 0x03, 6 ; Limpiar bit 6 del registro STATUS (volver al banco 0)
1686 → BSF 0x06, 6 ; Configurar bit 6 de FSR (en banco 0)Código: ASM
MOVWF 0x86 ; No tiene sentido aquí porque FSR no está configurado BSF 0x03, 6 ; Cambia al banco 1 MOVWF 0x86 ; Mueve W a 0x86 (INDF) pero FSR debería estar configurado BCF 0x03, 6 ; Vuelve al banco 0 BSF 0x06, 6 ; Configura bit 6 de FSR (pero ya estamos en banco 0)
Análisis de la Diferencia
En el primer código (el que funciona), las instrucciones son claras y tienen una secuencia lógica. Se carga un valor en W (MOVLW 0x28), se guarda en registros (MOVWF), y se limpian los registros necesarios.
En el segundo código (el que no funciona), las instrucciones están intentando operar con el registro 0x86, que es el registro INDF (Indirect Register), pero el registro FSR (que apunta a INDF) no está configurado correctamente, por lo que se apunta a una dirección indefinida o incorrecta.
Conclusión
El segundo código no funciona porque está realizando operaciones en un registro indirecto (INDF) sin haber configurado correctamente el puntero FSR. Además, las operaciones realizadas en el banco incorrecto hacen que las instrucciones no se ejecuten como se espera. Esto puede llevar a un comportamiento inesperado o fallos en el programa.
...
este no
:020000040000FA
:0C00000001861683018612831686
:02400E00F13F80
:00000001FF
...