Wer kann Assembler?

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 06 11 2024  06:28:52      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte

Gehe zu Seite ( Vorherige Seite 1 | 2 )      


Autor
Wer kann Assembler?

    







BID = 366177

Ltof

Inventar



Beiträge: 9329
Wohnort: Hommingberg
 

  


Im Datenblatt steht im Register Summary vor ADMUX "$07 ($27)". Wofür stehen die zwei verschiedenen Adressen?

Ansonsten:
Einfach mal ein Miniproramm mit BASCOM schreiben und nachschauen, was der Compiler daraus macht. Vielleicht erkennt man etwas wieder.

edit: DonComi war schneller!

Gruß,
Ltof

_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)

[ Diese Nachricht wurde geändert von: Ltof am  3 Sep 2006 19:25 ]

BID = 366180

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

 

  

Hallo Ltof,

hmm, mit mir ist mal garnichts los. Man merkt das vermutlich auch aus meinen Postings .

@Fragensteller:

Ganz ehrlich, das Programm ist recht lang und der Kram gegen ende doch sehr merkwürdig (ich denke mal, einfacher Datenmüll oder evtl. Tabellen, mit denen man nichts anfagen kann).

Der Disassembler versucht dann, aus diesem Schrott wieder die Befehle samt Parametern zu dekodieren, was dann meistens schiefgeht. Denn der Disassembler kann Programmcode und "Benutzerdaten" nicht auseinanderhalten.


PS: Ich würds neuschreiben .

_________________

BID = 366716

robodriver

Stammposter

Beiträge: 217

Hi leute!

also ich habe mich jetzt mal intensievst mit dem Ding beschäftigt und die entsprechende Stelle gefunden und bin nun dabei alles auseinander zu nehmen. Dabei habe ich mal ein paar Fragen.
Zunächst einmal der Code wie er jetzt aussieht:


Code :


+000003A4: B987 OUT 0x07,R24 Out to I/O location ADMUX auf ADC1 setzen
+000003A5: D7AB RCALL +0x07AB Relative call subroutine gosub +00000B51
+000003A6: E6A0 LDI R26,0x60 Load immediate var26=96
+000003A7: E0B0 LDI R27,0x00 Load immediate var27=0
+000003A8: 939C ST X,R25 Store indirect x=var25
+000003A9: E6A0 LDI R26,0x60 Load immediate var26=96
+000003AA: E0B0 LDI R27,0x00 Load immediate var27=0
+000003AB: 910D LD R16,X+ Load indirect and postincrement var16=x, x=x+1
+000003AC: 911C LD R17,X Load indirect var17=x
+000003AD: 3802 CPI R16,0x82 Compare with immediate if var16<130 then c=1,else c=0
+000003AE: E050 LDI R21,0x00 Load immediate var21=0
+000003AF: 0715 CPC R17,R21 Compare with carry if var17<var21 then c=1, else c=0
+000003B0: C01D RJMP +0x001D Relative jump goto +000003CE


+000003CE: 919C LD R25,X Load indirect var25=x
+000003CF: E7A9 LDI R26,0x79 Load immediate var26=121
+000003D0: 938D ST X+,R24 Store indirect and postincrement ???
+000003D1: 939C ST X,R25 Store indirect x=var25
+000003D2: E6A0 LDI R26,0x60 Load immediate var26=96
+000003D3: E0B0 LDI R27,0x00 Load immediate var27=0
+000003D4: 910D LD R16,X+ Load indirect and postincrement var16=x, x=x+1
+000003D5: 911C LD R17,X Load indirect var17=x
+000003D6: 3000 CPI R16,0x00 Compare with immediate if var16<0 then c=1,else c=0
+000003D7: E050 LDI R21,0x00 Load immediate var21=0
+000003D8: E081 LDI R24,0x01 Load immediate var24=1



und so weiter und so fort... Das sind erstmal die wichtigsten entscheidenden Zeilen.
Nun meine Frage:

Ich versteh das hier nicht:


Code :


+000003A5: D7AB RCALL +0x07AB Relative call subroutine (gosub +00000B51)


dies bedeutet ja, das auf die Zeile B51 gesprungen wird (3A5+7AB+1)
und nun der Code ab B51:


Code :


+00000B51: 003A ??? Data or unknown opcode
+00000B52: 2020 AND R2,R0 Logical AND
+00000B53: 2020 AND R2,R0 Logical AND
+00000B54: 0000 NOP No operation
+00000B55: 0020 ??? Data or unknown opcode
+00000B56: 2043 AND R4,R3 Logical AND
+00000B57: 2020 AND R2,R0 Logical AND
+00000B58: 0000 NOP No operation
+00000B59: 4120 SBCI R18,0x10 Subtract immediate with carry
+00000B5A: 7A6E ANDI R22,0xAE Logical AND with immediate
+00000B5B: 6861 ORI R22,0x81 Logical OR with immediate
+00000B5C: 206C AND R6,R12 Logical AND
+00000B5D: 7453 ANDI R21,0x43 Logical AND with immediate
+00000B5E: 7261 ANDI R22,0x21 Logical AND with immediate
+00000B5F: 7374 ANDI R23,0x34 Logical AND with immediate
+00000B60: 2020 AND R2,R0 Logical AND
+00000B61: 2020 AND R2,R0 Logical AND
+00000B62: 2020 AND R2,R0 Logical AND
+00000B63: 0020 ??? Data or unknown opcode
+00000B64: 2020 AND R2,R0 Logical AND
+00000B65: 2020 AND R2,R0 Logical AND
+00000B66: 2020 AND R2,R0 Logical AND
+00000B67: 2020 AND R2,R0 Logical AND
+00000B68: 4520 SBCI R18,0x50 Subtract immediate with carry
+00000B69: 6E69 ORI R22,0xE9 Logical OR with immediate
+00000B6A: 0000 NOP No operation
+00000B6B: 6265 ORI R22,0x25 Logical OR with immediate
+00000B6C: 7561 ANDI R22,0x51 Logical AND with immediate
+00000B6D: 2074 AND R7,R4 Logical AND
+00000B6E: 6573 ORI R23,0x53 Logical OR with immediate
+00000B6F: 7469 ANDI R22,0x49 Logical AND with immediate
+00000B70: 2020 AND R2,R0 Logical AND
+00000B71: 3020 CPI R18,0x00 Compare with immediate
+00000B72: 2E31 MOV R3,R17 Copy register
+00000B73: 3130 CPI R19,0x10 Compare with immediate
+00000B74: 322E CPI R18,0x2E Compare with immediate
+00000B75: 3030 CPI R19,0x00 Compare with immediate
+00000B76: 2036 AND R3,R6 Logical AND
+00000B77: 2020 AND R2,R0 Logical AND
+00000B78: 2020 AND R2,R0 Logical AND
+00000B79: 2020 AND R2,R0 Logical AND
+00000B7A: 2020 AND R2,R0 Logical AND
+00000B7B: 2020 AND R2,R0 Logical AND
+00000B7C: 2020 AND R2,R0 Logical AND
+00000B7D: 2020 AND R2,R0 Logical AND
+00000B7E: 2020 AND R2,R0 Logical AND
+00000B7F: 2020 AND R2,R0 Logical AND


Hier vermisse ich irgendwie einen RET Befehl, das er wieder zur Zeile +000003A6 zurück springt. Aber sowas seh ich hier nicht, ab wann springt er also wieder zurück???

und meine zweite Frage: Was genau passiert in dieser Zeile:


Code :

+000003D0:   938D        ST      X+,R24           Store indirect and postincrement



und meine dritte und letzte Frage:
Was zum teufel soll das bringen:


Code :


+000003A6: E6A0 LDI R26,0x60 Load immediate
+000003A7: E0B0 LDI R27,0x00 Load immediate
+000003A8: 939C ST X,R25 Store indirect
+000003A9: E6A0 LDI R26,0x60 Load immediate
+000003AA: E0B0 LDI R27,0x00 Load immediate


kann man sich nicht das zweite beschreiben der Register sparen? Kann ich das ganze Ignorieren, ist das so ein Sinnloser fehler der beim Compilieren passiert ist oder hat das was mit dem ST X,R25 zu tun?

Währe toll wenn mir das jemand erklären könnte.

Ansonsten ist das schon ziemlich interessant

Vielen Dank schonmal

BID = 366740

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Wenn du keine Fehler gemacht hast, dann ist der Code schortt, denn ist ja wohl klar was

"Data or unknown opcode"

meint.

Die nächsten drei Befehle machen auch keinen Sinn, wird sich um einen Versuch des Disassemblers handeln, irgendwelche Daten als Befehl zu dekodieren.

>>+000003D0: 938D ST X+,R24 Store indirect and postincrement

Na, der Wert, der in R25 steht wird ins SRAM geschrieben, und zwar an die durch XL und XH adressierte Stelle. Danach wird das Adress-Doppelregister X inkrementiert (erhöht um 1).


Zum letzten:

Auch klar, dass der Compiler nicht immer den absolut am besten Code machen kann!

Hier wird erstmal die Adresse einer Variablen/einer Speicherzelle im RAM ins Doppelregister R26:R27 geladen, dann wird der Wert aus R25 ins RAM gepackt.

_________________

BID = 366776

robodriver

Stammposter

Beiträge: 217

also das mit dem Code:


Code :

+00000B51:   003A        ???                      Data or unknown opcode

+00000B52: 2020 AND R2,R0 Logical AND
+00000B53: 2020 AND R2,R0 Logical AND
+00000B54: 0000 NOP No operation
+00000B55: 0020 ??? Data or unknown opcode
+00000B56: 2043 AND R4,R3 Logical AND
+00000B57: 2020 AND R2,R0 Logical AND
+00000B58: 0000 NOP No operation
+00000B59: 4120 SBCI R18,0x10 Subtract immediate with carry
+00000B5A: 7A6E ANDI R22,0xAE Logical AND with immediate
+00000B5B: 6861 ORI R22,0x81 Logical OR with immediate
+00000B5C: 206C AND R6,R12 Logical AND
+00000B5D: 7453 ANDI R21,0x43 Logical AND with immediate
+00000B5E: 7261 ANDI R22,0x21 Logical AND with immediate
+00000B5F: 7374 ANDI R23,0x34 Logical AND with immediate
+00000B60: 2020 AND R2,R0 Logical AND
+00000B61: 2020 AND R2,R0 Logical AND
+00000B62: 2020 AND R2,R0 Logical AND
+00000B63: 0020 ??? Data or unknown opcode
+00000B64: 2020 AND R2,R0 Logical AND
+00000B65: 2020 AND R2,R0 Logical AND
+00000B66: 2020 AND R2,R0 Logical AND
+00000B67: 2020 AND R2,R0 Logical AND
+00000B68: 4520 SBCI R18,0x50 Subtract immediate with carry
+00000B69: 6E69 ORI R22,0xE9 Logical OR with immediate
+00000B6A: 0000 NOP No operation
+00000B6B: 6265 ORI R22,0x25 Logical OR with immediate
+00000B6C: 7561 ANDI R22,0x51 Logical AND with immediate
+00000B6D: 2074 AND R7,R4 Logical AND
+00000B6E: 6573 ORI R23,0x53 Logical OR with immediate
+00000B6F: 7469 ANDI R22,0x49 Logical AND with immediate
+00000B70: 2020 AND R2,R0 Logical AND
+00000B71: 3020 CPI R18,0x00 Compare with immediate
+00000B72: 2E31 MOV R3,R17 Copy register
+00000B73: 3130 CPI R19,0x10 Compare with immediate
+00000B74: 322E CPI R18,0x2E Compare with immediate
+00000B75: 3030 CPI R19,0x00 Compare with immediate
+00000B76: 2036 AND R3,R6 Logical AND
+00000B77: 2020 AND R2,R0 Logical AND
+00000B78: 2020 AND R2,R0 Logical AND
+00000B79: 2020 AND R2,R0 Logical AND
+00000B7A: 2020 AND R2,R0 Logical AND
+00000B7B: 2020 AND R2,R0 Logical AND
+00000B7C: 2020 AND R2,R0 Logical AND
+00000B7D: 2020 AND R2,R0 Logical AND
+00000B7E: 2020 AND R2,R0 Logical AND
+00000B7F: 2020 AND R2,R0 Logical AND



kam mir auch schon etwas komisch vor. aber angesichts dessen, dass das die aller letzten Zeilen im Programm sind, vermute ich mal, dass das nicht schlimm weiter ist, während des Programmes steht da eigentlich kein
"Data or unknown opcode"
und die ganzen AND Verknüpfungen werden somit, denk ich mal, nicht durchgegangen.

BID = 366847

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Muss nicht, nein.


Ich vermute, dass dort

- entweder Daten liegen, die z.b. als Wertetabelle dienten
- oder zufälliger Datenmüll, der nichts mit dem eigentlichen Programm zu tun hat und dann auch nicht ausgeführt wird (, wenn nicht, wie oben, dort hingehoppst wird, deswegen fand ich es auch etwas merkwürdig, dass ein rcall auf diesen Humbug gesetzt wurde.)

Ich sag mal so:
Ich würde mir hier keine weiteren Mühen machen, sondern das ganze neu programmieren. Das kann ja in Hochsprache nicht allzuschwer sein. Wenn man hochsprachenkompilierte Assembercodes hat, dann sind die nicht bis zu 100% optimiert, so, wie wenn ich direkt in Assemblersprache schreibe. Damit muss man halt leben und es geht ja auch wunderbar.

Dazu kommt halt, dass man sich nicht immer sicher sein kann, ob der Befehl, der da vor eiem steht jetzt so sein soll, oder ob man schon im Flashnirvana irgenwelchen Datenblödsinn vom Disassembler dekodiert bekommt. Logisch kann daraus nichts werden .

_________________


Vorherige Seite      
Gehe zu Seite ( Vorherige Seite 1 | 2 )
Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 24 Beiträge im Durchschnitt pro Tag       heute wurden bisher 2 Beiträge verfasst
© x sparkkelsputz        Besucher : 182289710   Heute : 533    Gestern : 4667    Online : 489        6.11.2024    6:28
0 Besucher in den letzten 60 Sekunden         ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0551488399506