ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 апреля
80728 Топик полностью
AVR (09.02.2007 19:15, просмотров: 1) ответил д__ на Я не обязан доказывать бредовость твоих идей, уж лучше ты докажи что ты прав с конкретным количеством тактов затраченных на операцию
Дружок, грязью я тебя пока еще не полил, и оскорбить не попытался. А вот в умственных способностях действительно приходится усомниться - уж извини за горькую правду Тебе же было предложено самостоятельно скомпилировать твой и мой код и, заглянув в профилировщик, убедиться в том, что твой (с делениями) исполняется за время в десятки раз большее, чем мой (без делений), не так ли? Вместо этого ты требуешь доказательств - значит, почему-то не способен сделать это самостоятельно, что отнюдь не делает чести твоим умственным способностям. А "площадное хамство и хулиганские манеры поведения в общественных местах" тебе, позволь узнать, в чем привиделись - только, пожалуйста, с конкретными фактами на руках и не тряся бубном, взывая к профкому, парткому и месткому. Ждем-с. И для охолонутия вот тебе мои факты супротив твоего пиздобольства: Мой исходник: <c> char asc[5]; void main(void) { unsigned int temp,val=59999; char binc,atemp; atemp='0'; temp=10000; while(val >= temp) {atemp++; val-=temp;};*(asc+0)=atemp; atemp='0'; temp=1000; while(val >= temp) {atemp++; val-=temp;};*(asc+1)=atemp; atemp='0'; temp=100; while(val >= temp) {atemp++; val-=temp;};*(asc+2)=atemp; atemp='0'; binc=(char)val; while(binc >= 10) {atemp++; binc-=10;};*(asc+3)=atemp; binc+='0';*(asc+4)=binc; } </c> Листинг компилятора: <asm> ;CodeVisionAVR C Compiler V1.24.5 Standard ;(C) Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l. ;http://www.hpinfotech.com ;e-mail:office@hpinfotech.com ;Chip type : ATmega16 ;Program type : Application ;Clock frequency : 4.000000 MHz ;Memory model : Tiny ;Optimize for : Speed ;(s)printf features : int ;(s)scanf features : int, width ;External SRAM size : 0 ;Data Stack size : 40 byte(s) ;Heap size : 0 byte(s) ;Promote char to int : No ;char is unsigned : Yes ;8 bit enums : Yes ;Word align FLASH struct: No ;Enhanced core instructions : On ;Automatic register allocation : On ;Use AVR Studio 3 Terminal I/O : No .DSEG .ORG 0x88 ; 1 char asc[5]; _asc: 000088 .BYTE 0x5 ; 2 ; 3 void main(void) ; 4 { .CSEG _main: ; 5 unsigned int temp,val=59999; ; 6 char binc,atemp; ; 7 ; 8 atemp='0'; temp=10000; while(val >= temp) {atemp++; val-=temp;};*(asc+0)=atemp; ; temp -> R16,R17 ; val -> R18,R19 ; binc -> R20 ; atemp -> R21 000033 e52f LDI R18,95 000034 ee3a LDI R19,234 000035 e350 LDI R21,LOW(48) 000036 e100 LDI R0x10,LOW(0x2710) 000037 e217 LDI R0x11,HIGH(0x2710) _0x3: 000038 1720 CP R0x12,R0x10 000039 0731 CPC R0x13,R0x11 00003a f020 BRLO _0x5 00003b 5f5f SUBI R21,-1 00003c 1b20 SUB R0x12,R0x10 00003d 0b31 SBC R0x13,R0x11 00003e cff9 RJMP _0x3 _0x5: 00003f 9350 0088 STS _asc+0x0,R0x15 ; 9 atemp='0'; temp=1000; while(val >= temp) {atemp++; val-=temp;};*(asc+1)=atemp; 000041 e350 LDI R21,LOW(48) 000042 ee08 LDI R0x10,LOW(0x3e8) 000043 e013 LDI R0x11,HIGH(0x3e8) _0x6: 000044 1720 CP R0x12,R0x10 000045 0731 CPC R0x13,R0x11 000046 f020 BRLO _0x8 000047 5f5f SUBI R21,-1 000048 1b20 SUB R0x12,R0x10 000049 0b31 SBC R0x13,R0x11 00004a cff9 RJMP _0x6 _0x8: 00004b 9350 0089 STS _asc+0x1,R0x15 ; 10 atemp='0'; temp=100; while(val >= temp) {atemp++; val-=temp;};*(asc+2)=atemp; 00004d e350 LDI R21,LOW(48) 00004e e604 LDI R0x10,LOW(0x64) 00004f e010 LDI R0x11,HIGH(0x64) _0x9: 000050 1720 CP R0x12,R0x10 000051 0731 CPC R0x13,R0x11 000052 f020 BRLO _0xB 000053 5f5f SUBI R21,-1 000054 1b20 SUB R0x12,R0x10 000055 0b31 SBC R0x13,R0x11 000056 cff9 RJMP _0x9 _0xB: 000057 9350 008a STS _asc+0x2,R0x15 ; 11 atemp='0'; binc=(char)val; while(binc >= 10) {atemp++; binc-=10;};*(asc+3)=atemp; 000059 e350 LDI R21,LOW(48) 00005a 2f42 MOV R20,R18 _0xC: 00005b 304a CPI R20,10 00005c f018 BRLO _0xE 00005d 5f5f SUBI R21,-1 00005e 504a SUBI R20,LOW(10) 00005f cffb RJMP _0xC _0xE: 000060 9350 008b STS _asc+0x3,R0x15 ; 12 binc+='0';*(asc+4)=binc; 000062 5d40 SUBI R20,-LOW(48) 000063 9340 008c STS _asc+0x4,R0x14 </asm> 49 слов кода, наихудшее время исполнения (при N = 59999) = 277 тактов, наилучшее (при N = 0..9) = 39 тактов, среднее = (277+39)/2 = 158 тактов. ----------------------------------------------------------- Теперь твой код: <c> void main(void) { char *rslt; long val=65535; int len=5; rslt[len]=0; while((--len)>=0) { rslt[len]=(val % 10)+'0'; val /=10; } } </c> Твой листинг компилятора: <asm> .DSEG .ORG 0x88 ; 1 void main(void) ; 2 { .CSEG _main: ; 3 char *rslt; ; 4 long val=65535; ; 5 int len=5; ; 6 ; 7 rslt[len]=0; 000035 9724 SBIW R28,4 000036 e084 LDI R24,4 000037 e0a0 LDI R26,LOW(0) 000038 e0b0 LDI R27,HIGH(0) 000039 e5e4 LDI R30,LOW(_0x3*2) 00003a e0f0 LDI R31,HIGH(_0x3*2) 00003b 940e 00cd CALL __INITLOCB ; *rslt -> R16 ; val -> Y+0 ; len -> R17,R18 00003d e015 LDI R17,5 00003e e020 LDI R18,0 00003f 2fe1 MOV R30,R0x11 000040 2ff2 MOV R31,R0x12 000041 0fe0 ADD R30,R16 000042 2fae MOV R26,R30 000043 e0e0 LDI R30,LOW(0) 000044 93ec ST X,R30 ; 8 while((--len)>=0) _0x4: 000045 2fe1 MOV R30,R0x11 000046 2ff2 MOV R31,R0x12 000047 9731 SBIW R30,1 000048 2f1e MOV R0x11,R30 000049 2f2f MOV R0x12,R31 00004a 01df MOVW R26,R30 00004b 9710 SBIW R26,0 00004c f11c BRLT _0x6 ; 9 { ; 10 rslt[len]=(val % 10)+'0'; 00004d 2fe1 MOV R30,R0x11 00004e 2ff2 MOV R31,R0x12 00004f 0fe0 ADD R30,R16 000050 93ef PUSH R30 000051 81a8 LDD R26,Y+0x0 000052 81b9 LDD R27,Y+0x0+1 000053 818a LDD R24,Y+0x0+2 000054 819b LDD R25,Y+0x0+3 000055 e0ea LDI R30,LOW(0xa) 000056 e0f0 LDI R31,HIGH(0xa) 000057 e060 LDI R22,BYTE3(0xa) 000058 e070 LDI R23,BYTE4(0xa) 000059 940e 00a6 CALL __MODD21 00005b 5de0 SUBI R30,LOW(-0x30) 00005c 4fff SBCI R31,HIGH(-0x30) 00005d 4f6f SBCI R22,BYTE3(-0x30) 00005e 4f7f SBCI R23,BYTE4(-0x30) 00005f 91af POP R26 000060 93ec ST X,R30 ; 11 val /=10; 000061 81a8 LDD R26,Y+0x0 000062 81b9 LDD R27,Y+0x0+1 000063 818a LDD R24,Y+0x0+2 000064 819b LDD R25,Y+0x0+3 000065 e0ea LDI R30,LOW(0xa) 000066 e0f0 LDI R31,HIGH(0xa) 000067 e060 LDI R22,BYTE3(0xa) 000068 e070 LDI R23,BYTE4(0xa) 000069 940e 00a1 CALL __DIVD21 00006b 83e8 STD Y+0x0,R30 00006c 83f9 STD Y+0x0+1,R31 00006d 836a STD Y+0x0+2,R22 00006e 837b STD Y+0x0+3,R23 ; 12 } 00006f cfd5 RJMP _0x4 _0x6: ; 13 } 000070 9624 ADIW R28,4 __ANEGD1: 000072 95e0 COM R30 000073 95f0 COM R31 000074 9560 COM R22 000075 9570 COM R23 000076 5fef SUBI R30,-1 000077 4fff SBCI R31,-1 000078 4f6f SBCI R22,-1 000079 4f7f SBCI R23,-1 00007a 9508 RET __DIVD21U: 00007b 933f PUSH R19 00007c 934f PUSH R20 00007d 935f PUSH R21 00007e 2400 CLR R0 00007f 2411 CLR R1 000080 2733 CLR R19 000081 2744 CLR R20 000082 e250 LDI R21,32 __DIVD21U1: 000083 0faa LSL R26 000084 1fbb ROL R27 000085 1f88 ROL R24 000086 1f99 ROL R25 000087 1c00 ROL R0 000088 1c11 ROL R1 000089 1f33 ROL R19 00008a 1f44 ROL R20 00008b 1a0e SUB R0,R30 00008c 0a1f SBC R1,R31 00008d 0b36 SBC R19,R22 00008e 0b47 SBC R20,R23 00008f f428 BRCC __DIVD21U2 000090 0e0e ADD R0,R30 000091 1e1f ADC R1,R31 000092 1f36 ADC R19,R22 000093 1f47 ADC R20,R23 000094 c001 RJMP __DIVD21U3 __DIVD21U2: 000095 60a1 SBR R26,1 __DIVD21U3: 000096 955a DEC R21 000097 f759 BRNE __DIVD21U1 000098 01fd MOVW R30,R26 000099 01bc MOVW R22,R24 00009a 01d0 MOVW R26,R0 00009b 2f83 MOV R24,R19 00009c 2f94 MOV R25,R20 00009d 915f POP R21 00009e 914f POP R20 00009f 913f POP R19 0000a0 9508 RET __DIVD21: 0000a1 d018 RCALL __CHKSIGND 0000a2 dfd8 RCALL __DIVD21U 0000a3 f40e BRTC __DIVD211 0000a4 dfcd RCALL __ANEGD1 __DIVD211: 0000a5 9508 RET __MODD21: 0000a6 94e8 CLT 0000a7 ff97 SBRS R25,7 0000a8 c009 RJMP __MODD211 0000a9 95a0 COM R26 0000aa 95b0 COM R27 0000ab 9580 COM R24 0000ac 9590 COM R25 0000ad 5faf SUBI R26,-1 0000ae 4fbf SBCI R27,-1 0000af 4f8f SBCI R24,-1 0000b0 4f9f SBCI R25,-1 0000b1 9468 SET __MODD211: 0000b2 fd77 SBRC R23,7 0000b3 dfbe RCALL __ANEGD1 0000b4 dfc6 RCALL __DIVD21U 0000b5 01fd MOVW R30,R26 0000b6 01bc MOVW R22,R24 0000b7 f40e BRTC __MODD212 0000b8 dfb9 RCALL __ANEGD1 __MODD212: 0000b9 9508 RET __CHKSIGND: 0000ba 94e8 CLT 0000bb ff77 SBRS R23,7 0000bc c002 RJMP __CHKSD1 0000bd dfb4 RCALL __ANEGD1 0000be 9468 SET __CHKSD1: 0000bf ff97 SBRS R25,7 0000c0 c00b RJMP __CHKSD2 0000c1 2400 CLR R0 0000c2 95a0 COM R26 0000c3 95b0 COM R27 0000c4 9580 COM R24 0000c5 9590 COM R25 0000c6 9611 ADIW R26,1 0000c7 1d80 ADC R24,R0 0000c8 1d90 ADC R25,R0 0000c9 f800 BLD R0,0 0000ca 9403 INC R0 0000cb fa00 BST R0,0 __CHKSD2: 0000cc 9508 RET __INITLOCB: __INITLOCW: 0000cd 0fac ADD R26,R28 __INITLOC0: 0000ce 9005 LPM R0,Z+ 0000cf 920d ST X+,R0 0000d0 958a DEC R24 0000d1 f7e1 BRNE __INITLOC0 0000d2 9508 RET </asm> 158 слов кода (в 3 раза хуже, чем у меня), время исполнения (при любом 16-битном N) - 7746 тактов (в 49 раз хуже, чем у меня), при любом 32-битном N - 15692 такта. Еще вопросы (обиды, наезды и т.д.) будут?