ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
6 мая
121529 Топик полностью
psL (30.05.2008 20:49, просмотров: 467) ответил Cepгeй Бopщ на Ну уж в кейловском-то симуляторе пройти strstr по шагам и найти, откуда косяк - дело получаса.
Без микролиб однако работает. Дизасм библиотечного strstr в дебагере:  0x00000254 B430 PUSH {R4-R5} 0x00000256 E00D B 0x00000274 0x00000258 0003 LSL R3,R0,#0 ; смещение в фрагменте (R3) и указатель на фрагмент строки (R0) 0x0000025A 000A LSL R2,R1,#0 ; указатель на подстроку 0x0000025C E001 B 0x00000262 ; постинкремент 0x0000025E 1C5B ADD R3,R3,#1 ; ++ на следующий символ в фрагменте 0x00000260 1C52 ADD R2,R2,#1 0x00000262 781C LDRB R4,[R3,#0x00] ; загрузка символов 0x00000264 7815 LDRB R5,[R2,#0x00] 0x00000266 42AC CMP R4,R5 ; и сравнение 0x00000268 D101 BNE 0x0000026E ; выход из цикла если не равны 0x0000026A 2C00 CMP R4,#0x00 ; конец фрагмента строки? 0x0000026C D1F7 BNE 0x0000025E 0x0000026E 2A00 CMP R2,#0x00 ; конец подстроки? ! вот здесь ошибка, должно быть R5, имхо 0x00000270 D004 BEQ 0x0000027C 0x00000272 1C40 ADD R0,R0,#1 ; перейти на следующий фрагмент 0x00000274 7802 LDRB R2,[R0,#0x00] ; 0x00000276 2A00 CMP R2,#0x00 ; строка завершилась? 0x00000278 D1EE BNE 0x00000258 ; нет 0x0000027A 2000 MOV R0,#0x00 ; да, но ничего не найдено 0x0000027C BC30 POP {R4-R5} 0x0000027E 4770 BX LR Код при изменении уровня оптимизации всегда один.