Ну и туда же твой код в версии 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 раз хуже, чем у меня).
Обтекай.