ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
27 апреля
80731 Топик полностью
AVR (09.02.2007 19:48, просмотров: 1) ответил AVR на Дружок, грязью я тебя пока еще не полил, и оскорбить не попытался. А вот в умственных способностях действительно приходится усомниться - уж извини за горькую правду
Ну и туда же твой код в версии int, чтобы ты больше граблями не махал Код: <c> void main(void) { char *rslt; unsigned int val=0xFFFF; int len=5; rslt[len]=0; while((--len)>=0) { rslt[len]=(val % 10)+'0'; val /=10; } }</c> Листинг: <asm> .DSEG .ORG 0x88 ; 1 ; 2 void main(void) ; 3 { .CSEG _main: ; 4 char *rslt; ; 5 unsigned int val=0xFFFF; ; 6 int len=5; ; 7 ; 8 rslt[len]=0; ; *rslt -> R16 ; val -> R17,R18 ; len -> R19,R20 000033 ef1f LDI R17,255 000034 ef2f LDI R18,255 000035 e035 LDI R19,5 000036 e040 LDI R20,0 000037 2fe3 MOV R30,R0x13 000038 2ff4 MOV R31,R0x14 000039 0fe0 ADD R30,R16 00003a 2fae MOV R26,R30 00003b e0e0 LDI R30,LOW(0) 00003c 93ec ST X,R30 ; 9 while((--len)>=0) _0x3: 00003d 2fe3 MOV R30,R0x13 00003e 2ff4 MOV R31,R0x14 00003f 9731 SBIW R30,1 000040 2f3e MOV R0x13,R30 000041 2f4f MOV R0x14,R31 000042 01df MOVW R26,R30 000043 9710 SBIW R26,0 000044 f0b4 BRLT _0x5 ; 10 { ; 11 rslt[len]=(val % 10)+'0'; 000045 2fe3 MOV R30,R0x13 000046 2ff4 MOV R31,R0x14 000047 0fe0 ADD R30,R16 000048 93ef PUSH R30 000049 2fa1 MOV R26,R0x11 00004a 2fb2 MOV R27,R0x12 00004b e0ea LDI R30,LOW(10) 00004c e0f0 LDI R31,HIGH(10) 00004d 940e 006f CALL __MODW21U 00004f 96f0 ADIW R30,48 000050 91af POP R26 000051 93ec ST X,R30 ; 12 val /=10; 000052 2fa1 MOV R26,R0x11 000053 2fb2 MOV R27,R0x12 000054 e0ea LDI R30,LOW(10) 000055 e0f0 LDI R31,HIGH(10) 000056 940e 005c CALL __DIVW21U 000058 2f1e MOV R0x11,R30 000059 2f2f MOV R0x12,R31 ; 13 } 00005a cfe2 RJMP _0x3 _0x5: ; 14 } __DIVW21U: 00005c 2400 CLR R0 00005d 2411 CLR R1 00005e e190 LDI R25,16 __DIVW21U1: 00005f 0faa LSL R26 000060 1fbb ROL R27 000061 1c00 ROL R0 000062 1c11 ROL R1 000063 1a0e SUB R0,R30 000064 0a1f SBC R1,R31 000065 f418 BRCC __DIVW21U2 000066 0e0e ADD R0,R30 000067 1e1f ADC R1,R31 000068 c001 RJMP __DIVW21U3 __DIVW21U2: 000069 60a1 SBR R26,1 __DIVW21U3: 00006a 959a DEC R25 00006b f799 BRNE __DIVW21U1 00006c 01fd MOVW R30,R26 00006d 01d0 MOVW R26,R0 00006e 9508 RET __MODW21U: 00006f dfec RCALL __DIVW21U 000070 01fd MOVW R30,R26 000071 9508 RET </asm> 63 слова кода (в 1.3 раза хуже, чем у меня), время исполнения (при любом N) - 2519 тактов (в 16 раз хуже, чем у меня). Обтекай.