Цитата(defunct @ Apr 1 2009, 16:23)

Ээээ, простите, какая версия Keil'а и для какого процессора генерирует неэффективный код постинкремента?
uVision3 V3.00
C51.exe V7.20
1.
Код
603 1 while(*pstr != 0)
604 1 {
605 2 if(!PrintChar(*pstr++))
606 2 return 0;
607 2 }
Код
0008 ?C0115:
; SOURCE LINE # 603
0008 8D82 MOV DPL,R5
000A 8C83 MOV DPH,R4
000C E4 CLR A
000D 93 MOVC A,@A+DPTR
000E 6011 JZ ?C0116
; SOURCE LINE # 604
; SOURCE LINE # 605
0010 0D INC R5
0011 ED MOV A,R5
0012 7001 JNZ ?C0137
0014 0C INC R4
0015 ?C0137:
0015 14 DEC A
0016 F582 MOV DPL,A
0018 E4 CLR A
0019 93 MOVC A,@A+DPTR
001A FF MOV R7,A
001B 120000 R LCALL _PrintChar
001E 40E8 JC ?C0115
; SOURCE LINE # 606
0020 22 RET
; SOURCE LINE # 607
0021 ?C0116:
2.
Код
603 1 while(*pstr != 0)
604 1 {
605 2 if(!PrintChar(*pstr))
606 2 return 0;
607 2 ++pstr;
608 2 }
Код
0008 ?C0115:
; SOURCE LINE # 603
0008 8D82 MOV DPL,R5
000A 8C83 MOV DPH,R4
000C E4 CLR A
000D 93 MOVC A,@A+DPTR
000E FF MOV R7,A
000F 600D JZ ?C0116
; SOURCE LINE # 604
; SOURCE LINE # 605
0011 120000 R LCALL _PrintChar
0014 4001 JC ?C0117
; SOURCE LINE # 606
0016 22 RET
0017 ?C0117:
; SOURCE LINE # 607
0017 0D INC R5
0018 BD0001 CJNE R5,#00H,?C0137
001B 0C INC R4
001C ?C0137:
; SOURCE LINE # 608
001C 80EA SJMP ?C0115