PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVRATUDIO DISASSAMBLER



Looser
29.10.2005, 15:50
Hallo Leute
Ich bin ein Anfänger in der Assambler-Sprache. Mir liegt Bascom eher.
Ich habe ein Hex-File welches ich mir im AVRSTUDIO-Disassembler angeschaut habe. Nur habe ich da nichts verstanden. Aber Lernen ist immer gut !!! Diese Program gibt 3 Byte aus.
Wo kann ich das finden ?
Mit welcher Anweisung wird dies gemacht ?
Kann man das auf ein Byte reduzieren (LETZTE BYTE) ?

Vielen Dank im Voraus

Das ist ein Teil der DISASSABLERansicht:

+00000114: C013 RJMP PC+0x0014 Relative jump
+00000115: CEFB RJMP PC-0x0104 Relative jump
+00000116: 6130 ORI R19,0x10 Logical OR with immediate
+00000117: D083 RCALL PC+0x0084 Relative call subroutine
+00000118: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+00000119: C004 RJMP PC+0x0005 Relative jump
+0000011A: D072 RCALL PC+0x0073 Relative call subroutine
+0000011B: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+0000011C: C00B RJMP PC+0x000C Relative jump
+0000011D: CEF3 RJMP PC-0x010C Relative jump
+0000011E: D07C RCALL PC+0x007D Relative call subroutine
+0000011F: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+00000120: CEF0 RJMP PC-0x010F Relative jump
+00000121: D06B RCALL PC+0x006C Relative call subroutine
+00000122: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+00000123: C00C RJMP PC+0x000D Relative jump
+00000124: D068 RCALL PC+0x0069 Relative call subroutine
+00000125: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+00000126: C013 RJMP PC+0x0014 Relative jump
+00000127: CEE9 RJMP PC-0x0116 Relative jump
+00000128: 6038 ORI R19,0x08 Logical OR with immediate
+00000129: D071 RCALL PC+0x0072 Relative call subroutine
+0000012A: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+0000012B: C004 RJMP PC+0x0005 Relative jump
+0000012C: D060 RCALL PC+0x0061 Relative call subroutine
+0000012D: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+0000012E: C00B RJMP PC+0x000C Relative jump
+0000012F: CEE1 RJMP PC-0x011E Relative jump
+00000130: D06A RCALL PC+0x006B Relative call subroutine
+00000131: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+00000132: CEDE RJMP PC-0x0121 Relative jump
+00000133: D059 RCALL PC+0x005A Relative call subroutine
+00000134: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+00000135: C00C RJMP PC+0x000D Relative jump
+00000136: D056 RCALL PC+0x0057 Relative call subroutine
+00000137: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+00000138: C013 RJMP PC+0x0014 Relative jump
+00000139: CED7 RJMP PC-0x0128 Relative jump
+0000013A: 6034 ORI R19,0x04 Logical OR with immediate
+0000013B: D05F RCALL PC+0x0060 Relative call subroutine
+0000013C: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+0000013D: C004 RJMP PC+0x0005 Relative jump
+0000013E: D04E RCALL PC+0x004F Relative call subroutine
+0000013F: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+00000140: C00B RJMP PC+0x000C Relative jump
+00000141: CECF RJMP PC-0x0130 Relative jump
+00000142: D058 RCALL PC+0x0059 Relative call subroutine
+00000143: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+00000144: CECC RJMP PC-0x0133 Relative jump
+00000145: D047 RCALL PC+0x0048 Relative call subroutine
+00000146: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+00000147: C00D RJMP PC+0x000E Relative jump
+00000148: D044 RCALL PC+0x0045 Relative call subroutine
+00000149: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+0000014A: C009 RJMP PC+0x000A Relative jump
+0000014B: CEC5 RJMP PC-0x013A Relative jump
+0000014C: 6032 ORI R19,0x02 Logical OR with immediate
+0000014D: D04D RCALL PC+0x004E Relative call subroutine
+0000014E: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+0000014F: C005 RJMP PC+0x0006 Relative jump
+00000150: D03C RCALL PC+0x003D Relative call subroutine
+00000151: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+00000152: C001 RJMP PC+0x0002 Relative jump
+00000153: CEBD RJMP PC-0x0142 Relative jump
+00000154: 6031 ORI R19,0x01 Logical OR with immediate
+00000155: E042 LDI R20,0x02 Load immediate
+00000156: BB48 OUT 0x18,R20 Out to I/O location
+00000157: 2F41 MOV R20,R17 Copy register
+00000158: D020 RCALL PC+0x0021 Relative call subroutine
+00000159: 2F42 MOV R20,R18 Copy register
+0000015A: D01E RCALL PC+0x001F Relative call subroutine
+0000015B: 2F43 MOV R20,R19 Copy register
+0000015C: D01C RCALL PC+0x001D Relative call subroutine
+0000015D: D02F RCALL PC+0x0030 Relative call subroutine
+0000015E: E040 LDI R20,0x00 Load immediate
+0000015F: BB48 OUT 0x18,R20 Out to I/O location
+00000160: E84B LDI R20,0x8B Load immediate
+00000161: 1334 CPSE R19,R20 Compare, skip if equal
+00000162: C006 RJMP PC+0x0007 Relative jump
+00000163: E04A LDI R20,0x0A Load immediate
+00000164: BB48 OUT 0x18,R20 Out to I/O location
+00000165: D01C RCALL PC+0x001D Relative call subroutine
+00000166: E040 LDI R20,0x00 Load immediate
+00000167: BB48 OUT 0x18,R20 Out to I/O location
+00000168: CEA8 RJMP PC-0x0157 Relative jump
+00000169: E040 LDI R20,0x00 Load immediate
+0000016A: 1314 CPSE R17,R20 Compare, skip if equal
+0000016B: CEA5 RJMP PC-0x015A Relative jump
+0000016C: E045 LDI R20,0x05 Load immediate
+0000016D: 1324 CPSE R18,R20 Compare, skip if equal
+0000016E: CEA2 RJMP PC-0x015D Relative jump
+0000016F: E340 LDI R20,0x30 Load immediate
+00000170: 1334 CPSE R19,R20 Compare, skip if equal
+00000171: CE9F RJMP PC-0x0160 Relative jump
+00000172: E04A LDI R20,0x0A Load immediate
+00000173: BB48 OUT 0x18,R20 Out to I/O location
+00000174: D00D RCALL PC+0x000E Relative call subroutine
+00000175: E040 LDI R20,0x00 Load immediate
+00000176: BB48 OUT 0x18,R20 Out to I/O location
+00000177: CE99 RJMP PC-0x0166 Relative jump
+00000178: CE98 RJMP PC-0x0167 Relative jump
+00000179: 9B5D SBIS 0x0B,5 Skip if bit in I/O register set
+0000017A: CFFE RJMP PC-0x0001 Relative jump
+0000017B: B94C OUT 0x0C,R20 Out to I/O location
+0000017C: 9508 RET Subroutine return
+0000017D: 954A DEC R20 Decrement
+0000017E: F7F1 BRNE PC-0x01 Branch if not equal
+0000017F: 0000 NOP No operation
+00000180: 0000 NOP No operation
+00000181: 9508 RET Subroutine return
+00000182: 2777 CLR R23 Clear Register
+00000183: E74D LDI R20,0x7D Load immediate
+00000184: E76D LDI R22,0x7D Load immediate
+00000185: 9563 INC R22 Increment
+00000186: F7F1 BRNE PC-0x01 Branch if not equal
+00000187: ED6C LDI R22,0xDC Load immediate
+00000188: 9573 INC R23 Increment
+00000189: F7D9 BRNE PC-0x04 Branch if not equal
+0000018A: 9543 INC R20 Increment
+0000018B: F7C9 BRNE PC-0x06 Branch if not equal
+0000018C: 9508 RET Subroutine return
+0000018D: EC78 LDI R23,0xC8 Load immediate
+0000018E: EE4F LDI R20,0xEF Load immediate
+0000018F: 9573 INC R23 Increment
+00000190: F7F1 BRNE PC-0x01 Branch if not equal
+00000191: 9543 INC R20 Increment
+00000192: F7E1 BRNE PC-0x03 Branch if not equal
+00000193: 9508 RET Subroutine return
+00000194: E674 LDI R23,0x64 Load immediate
+00000195: EF40 LDI R20,0xF0 Load immediate
+00000196: 9573 INC R23 Increment
+00000197: F7F1 BRNE PC-0x01 Branch if not equal
+00000198: 9543 INC R20 Increment
+00000199: F7E1 BRNE PC-0x03 Branch if not equal
+0000019A: 9508 RET Subroutine return
+0000019B: 9BB2 SBIS 0x16,2 Skip if bit in I/O register set
+0000019C: CFFE RJMP PC-0x0001 Relative jump
+0000019D: DFF6 RCALL PC-0x0009 Relative call subroutine
+0000019E: 9508 RET Subroutine return
+0000019F: ED0F LDI R16,0xDF Load immediate
+000001A0: BF0D OUT 0x3D,R16 Out to I/O location
+000001A1: CE5F RJMP PC-0x01A0 Relative jump

albundy
29.10.2005, 16:10
Diese Program gibt 3 Byte aus.
Wo kann ich das finden ?


OUT 0x18,... sind Ausgaben auf Portb

uwegw
29.10.2005, 16:17
bei -hex-dateinen den disassembler zu nehmen, ist was für sehr weit fortgeschrittene. das programm hier wurde ja offensichtlich von einnem hochsprachen-compiler erstellt, und die produzieren halt kaum lesbaren assemblercode, natürlich ohne kommentare. das ganze kaum zu verstehen, wenn man nciht schritt für schritt einzeln nachvollzieht und nachrechnet. statt eine hex-datei zu disassemblieren, um zu sehen wie ein programm läuft, von dem man nur die .hex hat, ist es meiner meinung anch weniger aufwand, das programm komplett neu selbst zu schreiben.

wenn du aber einfach nur assemble lernen möchtest, empfehle ich die diese seite:
http://www.avr-asm-tutorial.net/avr_de/index.html
da gibt ein echt gutes asm-tutorial für avrs.
und wenn man nen asm-programm selbst schreibt, dann liest und schreibt sich das wesentlich einfacher als ne .hex-datei aussieht.

Looser
29.10.2005, 20:06
DANKE DANKE für die schnellen Antworten.
Ich hatte vergessen zu schreiben, das die Ausgabe,welche diese 3 Byte ausgiebt , PORT D1 ist. An PortB ist nur eine LED.
Lässt sich diese Ausgabe irgentwie ändern ? zB mit einem Hex-Editor ?

uwegw
29.10.2005, 20:27
es würde wohl schneller gehen, das programm in einen hochsprache oder meinetwegen auch in asm komplett neu zu schreiben... was macht eigentlich der rest vom programm? sind das verzögerungssschleifen, ergibt sich also eine art blinkfolgengenerator? sowas hätte man in hochsprache in 5 minuten fertig...