ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
80874 Топик полностью
д__ (11.02.2007 16:06, просмотров: 1) ответил AVR на Дружок, грязью я тебя пока еще не полил, и оскорбить не попытался. А вот в умственных способностях действительно приходится усомниться - уж извини за горькую правду
Поздравляю соврамши в 5 раз Как я уже говорил, что для сравнения коды нужно поставить в равные условия, никто не говорил, что это необходимо делать повсеместно на лонгах, был продемонстрирован способ получения результата. Если эти два куска кода привести в равные условия, дорогой вы наш передергиватель(компилер ты выбрал специально самый г"№%нный), то получим нижеследующие результаты: длина кода 39 слов, время выполнения в наихудшем случае около 2000 тактов(у меня нет времени заниматься лизанием, но я думаю можно раза в два подсократить прямо в сях). Ну и стоило так кликушествовать?
2:        void main(void)
3:        {
+00000046:   2C24        MOV     R2,R4            Copy register
+00000047:   01BD        MOVW    R22,R26          Copy register pair
+00000048:   019C        MOVW    R18,R24          Copy register pair
5:        unsigned int val=65535;
+00000049:   EF8F        SER     R24              Set Register
+0000004A:   EF9F        SER     R25              Set Register
8:        rslt[len]=0;
+0000004B:   E4A0        LDI     R26,0x40         Load immediate
+0000004C:   E0B1        LDI     R27,0x01         Load immediate
+0000004D:   E000        LDI     R16,0x00         Load immediate
+0000004E:   01FD        MOVW    R30,R26          Copy register pair
+0000004F:   8305        STD     Z+5,R16          Store indirect with displacement
+00000050:   9614        ADIW    R26,0x04         Add immediate to word
+00000051:   E006        LDI     R16,0x06         Load immediate
+00000052:   2E40        MOV     R4,R16           Copy register
+00000053:   C00E        RJMP    PC+0x000F        Relative jump
11:           rslt[len]=(val % 10)+'0';
+00000054:   018C        MOVW    R16,R24          Copy register pair
+00000055:   E04A        LDI     R20,0x0A         Load immediate
+00000056:   E050        LDI     R21,0x00         Load immediate
+00000057:   940E007D    CALL    0x0000007D       Call subroutine
+00000059:   5D40        SUBI    R20,0xD0         Subtract immediate
+0000005A:   934C        ST      X,R20            Store indirect
12:           val /=10;
+0000005B:   018C        MOVW    R16,R24          Copy register pair
+0000005C:   E04A        LDI     R20,0x0A         Load immediate
+0000005D:   E050        LDI     R21,0x00         Load immediate
+0000005E:   940E007D    CALL    0x0000007D       Call subroutine
+00000060:   01C8        MOVW    R24,R16          Copy register pair
+00000061:   9711        SBIW    R26,0x01         Subtract immediate from word
9:          while((--len)>=0)
+00000062:   944A        DEC     R4               Decrement
+00000063:   F781        BRNE    PC-0x0F          Branch if not equal
14:       }
+00000064:   01C9        MOVW    R24,R18          Copy register pair
+00000065:   01DB        MOVW    R26,R22          Copy register pair
+00000066:   2C42        MOV     R4,R2            Copy register
+00000067:   9508        RET                      Subroutine return
@00000068: ?C_FUNCALL
---- No Source ------------------------------------------------------------------------------------
@0000007D: ?US_DIVMOD_L02
+0000007D:   2400        CLR     R0               Clear Register
+0000007E:   2411        CLR     R1               Clear Register
+0000007F:   E0EF        LDI     R30,0x0F         Load immediate
@00000080: _..X_RSTACK_BASE
+00000080:   1F00        ROL     R16              Rotate Left Through Carry
+00000081:   1F11        ROL     R17              Rotate Left Through Carry
+00000082:   1C00        ROL     R0               Rotate Left Through Carry
+00000083:   1C11        ROL     R1               Rotate Left Through Carry
+00000084:   1604        CP      R0,R20           Compare
+00000085:   0615        CPC     R1,R21           Compare with carry
+00000086:   F010        BRCS    PC+0x03          Branch if carry set
+00000087:   1A04        SUB     R0,R20           Subtract without carry
+00000088:   0A15        SBC     R1,R21           Subtract with carry
+00000089:   95EA        DEC     R30              Decrement
+0000008A:   F7AA        BRPL    PC-0x0A          Branch if plus
+0000008B:   1F00        ROL     R16              Rotate Left Through Carry
+0000008C:   1F11        ROL     R17              Rotate Left Through Carry
+0000008D:   01A0        MOVW    R20,R0           Copy register pair
+0000008E:   9500        COM     R16              One's complement
+0000008F:   9510        COM     R17              One's complement
+00000090:   9508        RET                      Subroutine return
@00000091: ?Register_R4_is_cg_reg
+00000091:   E001        LDI     R16,0x01         Load immediate
+00000092:   9508        RET                      Subroutine return