# Cits ... >  HEX->ASM mikrokontrolleriem

## marizo

Vai ir tāds softs, kas var no mikrokontrollera nolasīto kodu pārveidot par asambleru?
Nu apmēram tā:

HEX .......................... bin ..........................asm
0185 ...................110000101      ..................                   clrf     5

bin var arī nebūt..

----------


## Delfins

Mhh.. neko nezinu par softiem... bet ja jau GCC (opensource) māk hexus PIC/AVR-iem taisīt, tātad arī var otrādi dabūt... reversā enginērija  ::

----------


## Vinchi

Esmu dzirdējis ka ir tāds softs, bet ir dzirdēts ka strādājot neprecīzi.

----------


## Farads

Ir tāds softs IDA PRO, cik noprotu tad tas varbūt varētu derēt.
http://www.datarescue.com/

----------


## 0xDEAD BEEF

Nu jus esat prosta smiekligi!  :: 
asm = hex! tas ir viens un tas pats. Protams - par mainigo nosaukumiem vari aizmirst un komentariem vel jo vairak, bet savadak - asm ir otra zemaka limena programesanas valoda! pirmaa ir drukat pa taisno hexa un nulta butu to darit ar perfokartem!
rekur prieksh pic
http://www.joescat.com/micro/picchip.htm

bet vispar disassembler + google un tu esi biznesa! Tikai pieraksti vel klat, ko gribi disasamblet, jo disasamblerim ir jabut tik pat gudram ka asamblerim. proti - jazin visas procesora instrukcijas!
Vispar - to var darit ari ar roku, jo instrukcijas ir pa wordiem!
Beefy

----------


## Delfins

ASM nav HEX ... 
ASM = programmēšanas valoda
HEX = binārā programma, ko izpildīs CPU (PIC/AVR/whatever)

valoda != programma

HEX nekādā gadījumā nav programmēšanas valoda un nekad arī nebūs...
HEX ir instrukciju datne procesoram.

ASM, kā jebkura cita progr. valoda, ir instrukciju datne kompilātoram/linkotājam (nevis procesoram), kurš pārveidos to priekš procesora.

Attiecīgi ja zin kādā veidā uztaisa pirmo no otrā un ar kādiem parametriem, ir iespējams dabūt otro no pirmā.

----------


## abergs

Piciem MPLAB IDEv7.5:
1. Import-hex,
2. View-Program Memory.

----------


## 0xDEAD BEEF

delfin, es parak rupji izteicos par asm, tas gan, BET, es tev varetu paradit, kaa var programet mikrokontrolieri pa taisno, atverot hex failu un drukajot ieksa 1niniekus un 0lites vai attiecigi hex ciparinus.
Tad hex ari ir programesanas valoda?  :: 
Beefy

----------


## Delfins

var, bet es šaubos ka tu to darīsi un vai spēsi izdarīt visu līdz galam pareizi.. :P

Tas man atgādina Radio žurnāla rakstus... iedod HEX sources, kurus jāklabina iekšā pašam  :: 

PS: nē, to nesauc par programmēšanu... tos sauc par kompilēšanu (galvā source, failā HEX rezultāts)

----------


## 0xDEAD BEEF

galva source? bet asm komanda = hex skaitlu virknite. kur tu kompile? asm ir primitivs. katra komanda parversas par 12bitu skailu virkniti.
ai.. lai nu paliek!  :: 
Beefy

----------


## marizo

Nu labi, var jau būt, ka es kaut ko ne tā uzrakstīju par ASM un HEX.
Kaut cik cerīgi liekas:



> Piciem MPLAB IDEv7.5:
> 1. Import-hex,
> 2. View-Program Memory.


 Nu un ja šitas neies cauri, tad nāksies pašam kaut paskālā rakstīt to progu. Zinu, ka to var izdarīt arī uz papīra, HEX skaitļus pārvēršot bin kodā un, izmantojot konkrētā PIC mikrokontrollera komandu sistēmu, iegūt ASM komandu un operandu. Nu un ja to var izdarīt uz papīra, tad to var arī dators.

----------


## abergs

Dizassembleris:
http://www.idapro.ru/description/proc/
Ārstēta versija (~80 MB arhīvs) : 
http://www.cracklab.ru/download.php?action=get&n=MjE1
Varbūt kāds ir iemēģinājis?

----------


## karloslv

> ASM nav HEX ... 
> valoda != programma
> 
> HEX nekādā gadījumā nav programmēšanas valoda un nekad arī nebūs...
> HEX ir instrukciju datne procesoram.
> 
> ASM, kā jebkura cita progr. valoda, ir instrukciju datne kompilātoram/linkotājam (nevis procesoram), kurš pārveidos to priekš procesora.


 Nu nu... un kas tad ir interpretētās valodas - pitons, perls, beisiks, u.tml.? Valodas vai programmas? Valoda ir jebkas, kam ir zināmi struktūras likumi. Arī mašīnkods ir valoda (ko, nevar Bekusa-Naura formā gramatiku uzrakstīt?). HEX ir tikai heksadecimālā sistēma, kurā pierakstīt skaitļus. Tas, ka lielākā daļa procesoru var interpretēt ("izpildīt") tikai mašīnkodu, ir jau cits stāsts, bet programma ir jebkas, kas satur instrukcijas.

----------


## abergs

Karloslv, ši ir veca diskusija.
Negribējās taisīt jaunu topiku...  ::

----------


## Texx

OFFtopic: Radio jau kuro gadu piedāvā tiem mikrokontrolieru projektiem ielādēt .hex failus no sava ftp. Kaut gan es uzskatu, ka nav jau nekas traks arī tās pārdesmit rindas pārrakstīt ar roku, ja vien ir lielāks entuziasma līmenis.

----------


## Velko

Ja nu reiz tēma pacelta - priekš AVR-iem, ar "GCC komplekta" līdzekļiem to var izdarīt šādi:

Vispirms ar _avr-objcopy_ pārveidojam no HEX atpakaļ uz ELF:


```
avr-objcopy -I ihex -O elf32-avr --rename-section .sec1=.text,contents,alloc,load,code test.hex test.elf
```

 _elf32-avr_ nozīmē faila formātu. Tam nav nekāda sakara ar to, ka pats kods ir 8-bit procim.

Pēc tam - disassemblējam ELF:


```
avr-objdump -d test.elf > test.asm
```

 Rezultāts gan nav uzreiz valīds ASM - kreisajā pusē rādās 3 kolonnas ar adresēm un opkodiem. Nu bet ja ir teksta redaktors ar "rectangle" rediģēšanas iespējām (piem. Emacs), tad tās aizvākt nav nekāda problēma. Iespējams, ka var arī ar kādiem switchiem tās 3 kolonnas atslēgt, bet neesmu pētījis.

----------


## Delfins

> HEX ir tikai heksadecimālā sistēma, kurā pierakstīt skaitļus. Tas, ka lielākā daļa procesoru var interpretēt ("izpildīt") tikai mašīnkodu, ir jau cits stāsts, bet programma ir jebkas, kas satur instrukcijas.


 tieši tā, instrukcijas nav "funkcijas". (Interpretētās) valodas ir abstraktais līmenis programmai. Uzskatu, ka saukt mašīnkodu par valodu ir nepareizi, jo mašīnkods nav vairs "jātulko", jo tas ir zemākais punkts pie HW, savukārt jebkuru citu koda "palagu" ir jākompilē. Tieši tāpēc ir uzgudrota shēma  programma-kompilētājs-kods, lai atvieglotu izstrādi. Tu vari rakstīt mašinkodu uzreiz, bet ja kāds palūgs nokompilēt citam procim - nāksies krietni pasvīst.

Pat tās pašas interpr. valodas ir jākompilē - tas, ka tos "koda palagus" var palaist "pataisno" nenozīmē ka tā ir programma, tā ir vnk tāda konsoles/OS/programmas īpatnības, sauktā par "skriptošanu" - programmu paveids.




> Valodas vai programmas?


 Nejauc 2 dažādus terminus - valoda ir semantika, programma ir fiziska vienība (fails vai informācija atmiņas apgabalā ar instrukcijām)

Texx, - viena lieta pārraksti kodu no vecā žurnāla vecam krievu procim, cit lieta sēdēt mājās un katru reizi rakstīt to pašam  ::

----------


## karloslv

> Pat tās pašas interpr. valodas ir jākompilē


 Oi, oi. Tas nu gan nav tiesa. http://en.wikipedia.org/wiki/Interpreted_language

Ko teiksi par procesoriem, kas uzreiz spēj izpildīt Javas baitkodu? Kas tur ir mašīnkods, kas ir valoda, kas ir funkcija, kas abstrakcija? Mēs vienkārši esam pieraduši/pieradināti domāt tajos klasisko aritmētikas/zarošanās instrukciju rāmjos, bet tas nenozīmē, ka nevar citādi. Kas ir programma analogajam skaitļotājam? Potenciometru uzstādījumi.

----------


## Delfins

> Ko teiksi par procesoriem, kas uzreiz spēj izpildīt Javas baitkodu? Kas tur ir mašīnkods, kas ir valoda, kas ir funkcija, kas abstrakcija?


 tāpēc ka tur ir VM HW/SW realizācija. un viss. un tas ir baitkods (savādāks/starp mašīnkods).

Var jau arī uzrakstīt FW priekš kāda ietilpīga proča, lai atpazīst komandas latviešu valodā no WAV/MP3 faila strīma un pilda komandas... tā teikt harwariskais speech-recognition... Ar šo nereti sci-fi filmās "spēlējās"  :: 

tas pats arī smadzenēm -  skaņa-gaiss-auss-nervi (signāla interpetēšana, pārvešana komandās - roku/kāju/etc kustība). Impulsi nervu sistēmā ir mašīnkods, kas arī savukārt var tikt "programmēti" pa taisno - pieslēdzot kādu impulsu avotu pie nerva  :: 

Vnk ir jānodala zemākais no augstākajiem/abstraktiem līmeņiem. Tāpēc jau kašķis sākās pie:



> delfin, es parak rupji izteicos par asm, tas gan, BET, es tev varetu paradit ....


 Tas, ka var, es zinu, bet ja vēlies mašīnkodu/etc saukt par programmēšanas valodu - lai tā būtu  ::

----------

