 |

|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 07 13, 03:13. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » AVR *.hex Disasembleraivimas
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
 |
 |
 |
AVR *.hex Disasembleraivimas |
Parašytas: 2015 04 29, 16:28 |
|
|
|
Svieki. Švietimo tikslais priireikė panagrinėt svetima programą. Surco nėra. Skirtas atmegai 8
hex
http://s000.tinyupload.com/index.php?file_id=00591333084473762974
Bandau su įvairiom Avr studio versijom
Avr studio v.3.56
Gaunam Kaip ir ASM kodą
+00000000: C03A RJMP +0x003A ; Destination: 0x00003B
+00000001: CFFE RJMP -0x0002 ; Destination: 0x000000
+00000002: CFFD RJMP -0x0003 ; Destination: 0x000000
+00000003: CFFC RJMP -0x0004 ; Destination: 0x000000
+00000004: C1C3 RJMP +0x01C3 ; Destination: 0x0001C8
+00000005: CFFA RJMP -0x0006 ; Destination: 0x000000
+00000006: CFF9 RJMP -0x0007 ; Destination: 0x000000
+00000007: C1B6 RJMP +0x01B6 ; Destination: 0x0001BE
+00000008: C1B0 RJMP +0x01B0 ; Destination: 0x0001B9
+00000009: C0A9 RJMP +0x00A9 ; Destination: 0x0000B3
+0000000A: CFF5 RJMP -0x000B ; Destination: 0x000000
+0000000B: CFF4 RJMP -0x000C ; Destination: 0x000000
+0000000C: CFF3 RJMP -0x000D ; Destination: 0x000000
+0000000D: CFF2 RJMP -0x000E ; Destination: 0x000000
+0000000E: C05B RJMP +0x005B ; Destination: 0x00006A
+0000000F: CFF0 RJMP -0x0010 ; Destination: 0x000000
+00000010: CFEF RJMP -0x0011 ; Destination: 0x000000
+00000011: CFEE RJMP -0x0012 ; Destination: 0x000000
+00000012: CFED RJMP -0x0013 ; Destination: 0x000000
+00000013: 307E CPI R23,0x0E ; 0x0E = 0b00001110 = 14
+00000014: 796D ANDI R22,0x9D ; 0x9D = 0b10011101 = 157
+00000015: 5B33 SUBI R19,0xB3 ; 0xB3 = 0b10110011 = 179
+00000016: 705F ANDI R21,0x0F ; 0x0F = 0b00001111 = 15
+00000017: 7B7F ANDI R23,0xBF ; 0xBF = 0b10111111 = 191
+00000018: 4F00 SBCI R16,0xF0 ; 0xF0 = 0b11110000 = 240
+00000019: 0F05 ADD R16,R21
+0000001A: 471F SBCI R17,0x7F ; 0x7F = 0b01111111 = 127
+0000001B: 4E01 SBCI R16,0xE1 ; 0xE1 = 0b11100001 = 225
+0000001C: 670E ORI R16,0x7E ; 0x7E = 0b01111110 = 126
+0000001D: 3E3D CPI R19,0xED ; 0xED = 0b11101101 = 237
+0000001E: 0D77 ADD R23,R7
+0000001F: 3715 CPI R17,0x75 ; 0x75 = 0b01110101 = 117
+00000020: 0908 SBC R16,R8
+00000021: 0049 NOP
+00000022: 0015 NOP
+00000023: 14F9 CP R15,R9
+00000024: F800 BLD R0,0
+00000025: 0013 NOP
+00000026: 00F3 NOP
+00000027: 0000 NOP
+00000028: 0001 NOP
+00000029: 0001 NOP
+0000002A: 00A0 NOP
+0000002B: 0000 NOP
+0000002C: 0000 NOP
+0000002D: 0000 NOP
+0000002E: 0002 NOP
+0000002F: 0002 NOP
+00000030: 004E NOP
+00000031: 0001 NOP
+00000032: 017C MOVW R14,R24
+00000033: 0050 NOP
+00000034: 0001 NOP
+00000035: 01C3 MOVW R24,R6
+00000036: 0052 NOP
+00000037: 0008 NOP
+00000038: 0004 NOP
+00000039: 0054 NOP
+0000003A: 0000 NOP
+0000003B: 94F8 CLI
+0000003C: 27EE CLR R30
+0000003D: BBEC OUT 0x1C,R30
+0000003E: E0F1 LDI R31,0x01 ; 0x01 = 0b00000001 = 1
+0000003F: BFFB OUT 0x3B,R31
+00000040: BFEB OUT 0x3B,R30
+00000041: BFE5 OUT 0x35,R30
......
Kodas ne visas tik pati pradžia . Kaip matom pradžia interupai, po to kruva nesamoniu, matyt duomenų lentėlė .. iki +0000003C: reseto jumpo adreso, po to kodas pradeda turėt kažkiokia logiką . Viskas butu kaip ir nieko bet benagrinėjant koda pastebėjau šiokių tokiu nesamoniu...
pvz atsekus vieno ir taimerių interupą randam
;Timer/Counter0 Overflow interup
+000000B3: 920A ST -Y,R0 ;SAVE REGISTERS
+000000B4: 921A ST -Y,R1
+000000B5: 936A ST -Y,R22
+000000B6: 937A ST -Y,R23
+000000B7: 938A ST -Y,R24
+000000B8: 939A ST -Y,R25
+000000B9: 93AA ST -Y,R26
+000000BA: 93BA ST -Y,R27
+000000BB: 93EA ST -Y,R30
+000000BC: 93FA ST -Y,R31 ;SAVE REGISTERS
+000000BD: B7EF IN R30,0x3F ;SAVE SREG
+000000BE: 93EA ST -Y,R30
+000000BF: E0E6 LDI R30,0x06 ; 0x06 = 0b00000110 = 6
+000000C0: BFE2 OUT 0x32,R30 ;Timer/Counter0 (8 Bits)
+000000C1: 91A00197 LDS R26,0x0197
+000000C3: 5FAF SUBI R26,0xFF ; 0xFF = 0b11111111 = 255
+000000C4: 93A00197 STS 0x0197,R26
+000000C6: 31A9 CPI R26,0x19 ; 0x19 = 0b00011001 = 25
+000000C7: F009 BREQ +0x01
...............
Pridėjau savo komentarų . Pradžia regsitru saugojimas, SREG saugojimas . viskas kaip ir logiška bet teis adresu +000000C1: pasidaro kaž kas netaip kur adresas +000000C2: ? Iš kart eina +000000C4: ..
Dar vienas pvz
Paprogramė saugot ADC duomenis į SRAM
.........
+00000080: 1FBF ADC R27,R31
+00000081: B1E4 IN R30,0x4 ;ADCL
+00000082: B1F5 IN R31,0x5 ;ADCH
+00000083: 93ED ST X+,R30 ;SAVE ADC TO SRAM
+00000084: 93FC ST X,R31
+00000085: 91A00194 LDS R26,0x0194
+00000087: 5FAF SUBI R26,0xFF ; 0xFF = 0b11111111 = 255
+00000088: 93A00194 STS 0x0194,R26
....................
po adreso +00000085: iš kart eina +00000087: . dingo +00000087:
Nu jo Avr studio v.3.56 košmariškai sena bet...
Bandžiau ir aukštesnes AVR studio versijas 4,13
...
+00000000: C03A RJMP PC+0x003B Relative jump
+00000001: CFFE RJMP PC-0x0001 Relative jump
+00000002: CFFD RJMP PC-0x0002 Relative jump
+00000003: CFFC RJMP PC-0x0003 Relative jump
+00000004: C1C3 RJMP PC+0x01C4 Relative jump
+00000005: CFFA RJMP PC-0x0005 Relative jump
+00000006: CFF9 RJMP PC-0x0006 Relative jump
...
Kodas dar šlikščiau skaitomas kur dingo absoliutūs adresai ? Užtenka tik komentarų... Kažkaip iš naujesnės versijos tikėjaus daugiau ... lyrinis nukrypimas ...
Problema ta pati. Programų atminties adresai neina išeilės. Kaip manot ? Pametamos komandos ar teisiog suadresuota neteisingai nors pati programa neva yra tvarkinga ir veikia gerai ?
Gal kas gali išbandyt su savo AVR studijo aukštesnėmversijom . Nežinau ar yra daugiau tokiu pamestuku, bet +000000C2: ir +00000087: nėra ...
Ir šeip gal kas gali parekomenduot kokį avr disasemblerį
 |
|
|
|
|
 |
 |
AVR *.hex Disasembleraivimas |
Parašytas: 2015 04 29, 16:43 |
|
|
|
pabandyk IDA disasembleri
as pameginau viskas gerai atrodo ir visi kometarai automatisdkai sudedami apie registru paskirtis |
|
|
|
|
 |
AVR *.hex Disasembleraivimas |
Parašytas: 2015 04 29, 17:37 |
|
|
|
As visiskai pamirses ASM, bet lyg ir atrodo, kad i adresa rasant 16 bitu reiksme iskart uzpildomi du adresai. Visgi mikrovaldiklis 8bit. Cia gal disasemblerio gudrybe, o ne pacio AVR'o. |
|
|
|
|
 |
AVR *.hex Disasembleraivimas |
Parašytas: 2015 04 29, 18:46 |
|
|
|
Douch . Gi rimtas ne visos komandos vienodo ilgio, kai atsimerkiau matos komandų LDS,STS opcodą ilgesni . Logikos yra... kaim adresuot antra puse komandos ( ar rodyt komandos antros pusės adresą)... Ačiū už idėja ... O IDA disasembleri reiks pažiurėt kas per padaras ... |
|
|
|
|
 |
AVR *.hex Disasembleraivimas |
Parašytas: 2015 05 02, 17:05 |
|
|
|
1) kaikurios komandos ilgesnes nei 1 atminties zodis
2) relative jump gali buti naudojamas switch/case atveju, kai kelioms switch reiksmems tinka tas pat case
nenusimink, kada nors ismoksi dar to assemblerio, jei tik tau to tikrai reikia |
|
|
|
|
|
 |
Google paieška forume |
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
 |
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
 |
Football Training Kit
Football Training Equipment,
Football Skills,
Football Training |
|

|
 |