Du warst zu schnell, wollte noch zur Info den gesamten Bascom-Assembler posten für die drei Zeilen:
For N = 0 To 10000000
A = 5 * 2
Next
das sind dann 26 Words in der SchleifeCode:; For N = 0 To 10000000
+00000043: E080 LDI R24,0x00 Load immediate
+00000044: E090 LDI R25,0x00 Load immediate
+00000045: E6A1 LDI R26,0x61 Load immediate
+00000046: E0B0 LDI R27,0x00 Load immediate
+00000047: 938D ST X+,R24 Store indirect and postincrement
+00000048: 939C ST X,R25 Store indirect
loc_49:
+00000049: E840 LDI R20,0x80 Load immediate
+0000004A: E956 LDI R21,0x96 Load immediate
+0000004B: E968 LDI R22,0x98 Load immediate
+0000004C: E070 LDI R23,0x00 Load immediate
+0000004D: E6A1 LDI R26,0x61 Load immediate
+0000004E: E0B0 LDI R27,0x00 Load immediate
+0000004F: 910D LD R16,X+ Load indirect and postincrement
+00000050: 911D LD R17,X+ Load indirect and postincrement
+00000051: FB17 BST R17,7 Bit store from register to T
+00000052: F41E BRTC PC+0x04 Branch if T flag cleared
+00000053: EF2F SER R18 Set Register
+00000054: EF3F SER R19 Set Register
+00000055: C002 RJMP loc_58 Relative jump
loc_56:
+00000056: 2722 CLR R18 Clear Register
+00000057: 2733 CLR R19 Clear Register
loc_58:
+00000058: 940E0090 CALL 0x00000090 Call subroutine
+0000005A: F01C BRLT loc_5E Branch if less than, signed ;Adr=
+0000005B: F011 BREQ loc_5E Branch if equal
+0000005C: 940C0067 JMP loc_67 Jump
; A = 5 * 2
loc_5E:
+0000005E: E08A LDI R24,0x0A Load immediate
+0000005F: 93800060 STS 0x0060,R24 Store direct to data space
10: Next
+00000061: E6A1 LDI R26,0x61 Load immediate
+00000062: E0B0 LDI R27,0x00 Load immediate
+00000063: 940E006F CALL loc_6F Call subroutine
+00000065: 940C0049 JMP loc_49 Jump
loc_67:
+00000067: ; SCHLEIFENENDE -> WEITER IM CODE
; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
loc_6F:
+0000006F: 91ED LD R30,X+ Load indirect and postincrement
+00000070: 91FC LD R31,X Load indirect
+00000071: 9631 ADIW R30,0x01 Add immediate to word
+00000072: 93FC ST X,R31 Store indirect
+00000073: 93EE ST -X,R30 Store indirect and predecrement
+00000074: 9508 RET Subroutine return
und jetzt mal in WinAVR:
uint32_t n;
uint8_t a;
for (n=0; n < 10000000; n++)
{
a=TCNT0; //damit der Compiler es nicht wegoptimiert
}
das sind dann 12 Words in der SchleifeCode:; for (n=0; n < 10000000; n++)
+0000005C: E020 LDI R18,0x00 Load immediate
+0000005D: E030 LDI R19,0x00 Load immediate
+0000005E: E040 LDI R20,0x00 Load immediate
+0000005F: E050 LDI R21,0x00 Load immediate
; a=TCNT0;
loc_60:
+00000060: B782 IN R24,0x32 In from I/O location
+00000061: 5F2F SUBI R18,0xFF Subtract immediate
+00000062: 4F3F SBCI R19,0xFF Subtract immediate with carry
+00000063: 4F4F SBCI R20,0xFF Subtract immediate with carry
+00000064: 4F5F SBCI R21,0xFF Subtract immediate with carry
+00000065: 3820 CPI R18,0x80 Compare with immediate
+00000066: E986 LDI R24,0x96 Load immediate
+00000067: 0738 CPC R19,R24 Compare with carry
+00000068: E988 LDI R24,0x98 Load immediate
+00000069: 0748 CPC R20,R24 Compare with carry
+0000006A: E080 LDI R24,0x00 Load immediate
+0000006B: 0758 CPC R21,R24 Compare with carry
+0000006C: F398 BRCS loc_60 Branch if carry set