Цитата
Вроде нигде не промахнулся...
Таки немного промахнулся. Вообщем, примерно вот так надо делать (правда, только IAR под рукой, он конечно, зажыгает)
Код
165 char rrr(void)
\ rrr:
166 {
167 unsigned int i=((unsigned int)rand()/(((unsigned int)RAND_MAX+1)/256))&255;
\ 00000000 ........ CALL rand
\ 00000004 0F00 LSL R16
\ 00000006 2F01 MOV R16, R17
\ 00000008 1F00 ROL R16
168 i=i+i+i;
169 i>>=8;
170 return (char)i;
\ 0000000A E023 LDI R18, 3
\ 0000000C 9F20 MUL R18, R16
\ 0000000E 2D01 MOV R16, R1
\ 00000010 9508 RET
Без аппаратного умножения тоже все в порядке
Код
4 unsigned int i=((unsigned int)rand()/(((unsigned int)RAND_MAX+1)/256))&255;
\ 00000000 .... RCALL rand
\ 00000002 0F00 LSL R16
\ 00000004 2F01 MOV R16, R17
\ 00000006 1F00 ROL R16
\ 00000008 E010 LDI R17, 0
5 i=i+i+i;
6 i>>=8;
7 return (char)i;
\ 0000000A 2F20 MOV R18, R16
\ 0000000C E030 LDI R19, 0
\ 0000000E 0F00 LSL R16
\ 00000010 1F11 ROL R17
\ 00000012 0F02 ADD R16, R18
\ 00000014 1F13 ADC R17, R19
\ 00000016 2F01 MOV R16, R17
\ 00000018 9508 RET
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин