Вт апр 07, 2015 17:07:52
Аlex писал(а):Почему этот вопрос именно при переходе на char у вас возник ?
Вы вообще в курсе чем они отличаются ?
Вт апр 07, 2015 19:17:00
Ср апр 08, 2015 16:52:20
Пт дек 24, 2021 12:35:20
unsigned char a, buf[5];
unsigned int x; // тут наше число
for( a=0; a<5; a++ ) buf[a] = '0';
while( x>10000 ) { buf[0]++; x = x-10000; }
while( x>1000 ) { buf[1]++; x = x-1000; }
while( x>100 ) { buf[2]++; x = x-100; }
while( x>10 ) { buf[3]++; x = x-10; }
buf[4] = x;
Пт дек 24, 2021 12:54:18
Пт дек 24, 2021 13:15:10
Пт дек 24, 2021 14:35:21
Ср янв 25, 2023 18:55:25
unsigned char a, buf[5];
unsigned int x; // тут наше число
for( a=0; a<5; a++ ) buf[a] = '0';
while( x>10000 ) { buf[0]++; x = x-10000; }
while( x>1000 ) { buf[1]++; x = x-1000; }
while( x>100 ) { buf[2]++; x = x-100; }
while( x>10 ) { buf[3]++; x = x-10; }
buf[4] = x;
Ср янв 25, 2023 21:24:20
Чт янв 26, 2023 20:57:50
Чт янв 26, 2023 22:29:48
Чт янв 26, 2023 22:39:53
Пт янв 27, 2023 00:22:35
Ср фев 08, 2023 06:26:36
display_symbols[3] = display_u / 1000;
display_u = display_u % 1000;
display_symbols[4] = display_u / 100;
display_u = display_u % 100;
display_symbols[5] = display_u / 10;
Это код функции, поэтому display_u уже в регистрах r25:r24
display_symbols[3] = display_u / 1000;
210: 68 ee ldi r22, 0xE8 ; 232 --- 1000
212: 73 e0 ldi r23, 0x03 ; 3
214: 0e 94 4f 10 call 0x209e ; 0x209e <__udivmodhi4>
218: 60 93 61 01 sts 0x0161, r22
display_u = display_u % 1000;
display_symbols[4] = display_u / 100;
21c: 64 e6 ldi r22, 0x64 ; 100
21e: 70 e0 ldi r23, 0x00 ; 0
220: 0e 94 4f 10 call 0x209e ; 0x209e <__udivmodhi4>
224: 60 93 62 01 sts 0x0162, r22
display_u = display_u % 100;
display_symbols[5] = display_u / 10;
228: 6a e0 ldi r22, 0x0A ; 10
22a: 70 e0 ldi r23, 0x00 ; 0
22c: 0e 94 4f 10 call 0x209e ; 0x209e <__udivmodhi4>
230: 60 93 63 01 sts 0x0163, r22
234: 08 95 ret
0000209e <__udivmodhi4>:
209e: aa 1b sub r26, r26
20a0: bb 1b sub r27, r27
20a2: 51 e1 ldi r21, 0x11 ; 17
20a4: 07 c0 rjmp .+14 ; 0x20b4 <__udivmodhi4_ep>
000020a6 <__udivmodhi4_loop>:
20a6: aa 1f adc r26, r26
20a8: bb 1f adc r27, r27
20aa: a6 17 cp r26, r22
20ac: b7 07 cpc r27, r23
20ae: 10 f0 brcs .+4 ; 0x20b4 <__udivmodhi4_ep>
20b0: a6 1b sub r26, r22
20b2: b7 0b sbc r27, r23
000020b4 <__udivmodhi4_ep>:
20b4: 88 1f adc r24, r24
20b6: 99 1f adc r25, r25
20b8: 5a 95 dec r21
20ba: a9 f7 brne .-22 ; 0x20a6 <__udivmodhi4_loop>
20bc: 80 95 com r24
20be: 90 95 com r25
20c0: bc 01 movw r22, r24
20c2: cd 01 movw r24, r26
20c4: 08 95 ret
//display_symbols[3] = display_u / 1000;
//display_u = display_u % 1000;
//display_symbols[4] = display_u / 100;
//display_u = display_u % 100;
//display_symbols[5] = display_u / 10;
while( display_u>1000 ) { display_symbols[3]++; display_u = display_u - 1000; }
while( display_u>100 ) { display_symbols[4]++; display_u = display_u - 100; }
while( display_u>10 ) { display_symbols[5]++; display_u = display_u - 10; }
Это код функции, поэтому display_u уже в регистрах r25:r24
210: 20 91 61 01 lds r18, 0x0161
214: 31 e0 ldi r19, 0x01 ; 1
216: 32 0f add r19, r18
while( display_u>1000 ) { display_symbols[3]++; display_u = display_u - 1000; }
218: 89 3e cpi r24, 0xE9 ; 233
21a: 43 e0 ldi r20, 0x03 ; 3
21c: 94 07 cpc r25, r20
21e: 20 f0 brcs .+8 ; 0x228 <display_U+0x8a>
220: 88 5e subi r24, 0xE8 ; 232
222: 93 40 sbci r25, 0x03 ; 3
224: 23 2f mov r18, r19
226: f6 cf rjmp .-20 ; 0x214 <display_U+0x76>
228: 20 93 61 01 sts 0x0161, r18
22c: 20 91 62 01 lds r18, 0x0162
230: 31 e0 ldi r19, 0x01 ; 1
232: 32 0f add r19, r18
while( display_u>100 ) { display_symbols[4]++; display_u = display_u - 100; }
234: 85 36 cpi r24, 0x65 ; 101
236: 91 05 cpc r25, r1
238: 20 f0 brcs .+8 ; 0x242 <display_U+0xa4>
23a: 84 56 subi r24, 0x64 ; 100
23c: 91 09 sbc r25, r1
23e: 23 2f mov r18, r19
240: f7 cf rjmp .-18 ; 0x230 <display_U+0x92>
242: 20 93 62 01 sts 0x0162, r18
246: 20 91 63 01 lds r18, 0x0163
24a: 31 e0 ldi r19, 0x01 ; 1
24c: 32 0f add r19, r18
while( display_u>10 ) { display_symbols[5]++; display_u = display_u - 10; }
24e: 8b 30 cpi r24, 0x0B ; 11
250: 91 05 cpc r25, r1
252: 18 f0 brcs .+6 ; 0x25a <display_U+0xbc>
254: 0a 97 sbiw r24, 0x0a ; 10
256: 23 2f mov r18, r19
258: f8 cf rjmp .-16 ; 0x24a <display_U+0xac>
25a: 20 93 63 01 sts 0x0163, r18
25e: 08 95 ret
Ср фев 08, 2023 16:29:11
да, подпрограмма деления тоже делается способом сложения-вычитания, только ты, видимо, забыл, что там сложения-вычитания у тебя делаются 17 (семнадцать) раз.pavel2000 писал(а):если оно делается всё тем же способом сложения-вычитания?
Ср фев 08, 2023 21:23:27
Ср фев 08, 2023 22:22:26
а то, что оператор деления использует циклы, ты опять забыл? так посмотри свой представленный код с делением.pavel2000 писал(а):строгой необходимости использования именно цикла вместо оператора деления в общем случае я не вижу.
так что, использование оператора деления также будет говнокодом, так как оператор деления использует циклы. даже говнокодом в квадрате против вычитания и сложения, так как работает медленнее, чем вычитания и сложения.pavel2000 писал(а):использование циклов для решения задачи всё равно остается говнокодом
Ср фев 08, 2023 22:23:16
Ср фев 08, 2023 23:37:13
Чт фев 09, 2023 00:12:40