girts 1 Friday at 06:40 AM Posted Friday at 06:40 AM · Report post IDA - наверное потому, что сам её и упомянул в первом посту... Ну а в IAR наверное механизм схожий. с простой заменой одного на другое. По идее если выключить все оптимизации, должно сойтись. И должно быть чётко по тексту - что написал, то и получил. ASM всё же! Quote Share this post Link to post Share on other sites More sharing options...
Сергей Борщ 45 Friday at 06:44 AM Posted Friday at 06:44 AM · Report post 1 час назад, Aries сказал: Как влиять на это ??? Один и тот же результат операции может быть достигнут разными командами. Даже ассемблер пытается делать программу компактной и быстрой, а вы хотите делать ее большой и медленной (доля шутки). То есть заставить чистый ассемблер ставить неоптимальный код команды в одно конкретное место скорее всего будет невозможно. Единственное, что здесь может сработать - использовать связку ассемблер-компоновщик (линкер) и команду занесения в регистр неизвестной ассемблеру константы, подставляемой компоновщиком. Поскольку значение константы асссемблеру неизвестно - он будет вынужден поставить подходящий для произвольной константы более длинный и медленный код. И останется только надеяться, что компоновщик именно вашей версии IARа не умеет оптимизировать выходной код или эту оптимизацию можно принудительно отключить. Как это сделать конкретно в современном IAR я не знаю и присоединяюсь к совету jcxz почитать про раздельную компиляцию и работу компоновщика. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 41 Friday at 09:04 AM Posted Friday at 09:04 AM · Report post 12 часов назад, Aries сказал: Могу ли я как то указать IAR_у когда ему это следует делать а когда нет ? Не думаю, что такое возможно. Только описать команду макросом, который развернётся во вставку машинного кода. Quote Share this post Link to post Share on other sites More sharing options...
Aries 1 Friday at 09:18 AM Posted Friday at 09:18 AM · Report post 7 минут назад, jcxz сказал: Не думаю, что такое возможно. Только описать команду макросом, который развернётся во вставку машинного кода. Резюмируя всё выше сказанное, делаю для себя вывод - значит я правильно сделал, что в тексте asm_а просто вставил DC8 3Fh, 40h, 0, 0 тем самым заставляя принудительно поставить нужную команду MOV.W #0, R15 Quote Share this post Link to post Share on other sites More sharing options...
jcxz 41 Friday at 09:19 AM Posted Friday at 09:19 AM · Report post 2 часа назад, girts сказал: что написал, то и получил. ASM всё же! Так всё-же - как следует воспринимать такой фрагмент листинга MSP430: LogsCR5(COL_RED "Bus error!"); 3C40.... MOV.W #`?<Constant "\\\\RBus error!">`, R12 0B3C JMP ??AosongEnd_2 Внимательно смотрим на 3C40.... Что такое по вашему - это 4-точие? Что будет на выходе компилятора по этому адресу? Как именно работает компоновщик? Что он делает? Что такое "relocatable expressions" из документации на компилятор уже уяснили? И что подставляется в код при компиляции такого выражения? Можете нам рассказать? Увидим мы объяснения по делу? 19 минут назад, Aries сказал: значит я правильно сделал, что в тексте asm_а просто вставил DC8 3Fh, 40h, 0, 0 тем самым заставляя принудительно поставить нужную команду MOV.W #0, R15 Можно ещё попробовать грузить в регистр перемещаемое выражение (relocatable expression). Которое впоследствии компоновщиком будет заменено нулём. Так как выражение - вычисляемое на этапе компоновки, то компилятор не может его заменить на более короткую команду CLR R15, а значит оставит полный вариант команды MOV #0, R15. Остаётся только добиться, чтобы компоновщик не заменял этот 0 на что-то иное. Quote Share this post Link to post Share on other sites More sharing options...
Aries 1 Friday at 09:49 AM Posted Friday at 09:49 AM · Report post 24 минуты назад, jcxz сказал: Остаётся только добиться, чтобы компоновщик не заменял этот 0 на что-то иное. Вот этого у меня и не получилось, поэтому плюнув на всё сделал проще, хотя и не по правилам. 🤣 Quote Share this post Link to post Share on other sites More sharing options...
jcxz 41 Friday at 10:13 AM Posted Friday at 10:13 AM · Report post 34 минуты назад, Aries сказал: Вот этого у меня и не получилось, поэтому плюнув на всё сделал проще, хотя и не по правилам. 🤣 Руководствуясь написанным мной выше, это сделать нетрудно. В asm-файле пишем: RSEG .proba:DATA:ROOT proba1 DS8 1 RSEG CODE16:CODE:ROOT CODE MOV #0DADAh, R15 MOV #0DADAh, R15 MOV #proba1, R15 RET В командном файле компоновщика добавляем фиктивный сегмент ".proba": -Z(CONST).proba=0-7F Компилим (IAR), получаем .lst: 000000 RSEG .proba:DATA:ROOT 000000 proba1 DS8 1 000000 RSEG CODE16:CODE:ROOT 000000 CODE 000000 3F40DADA MOV #0DADAh, R15 000004 3F40DADA MOV #0DADAh, R15 000008 3F40.... MOV #proba1, R15 00000C 3041 RET Открываем результирующий загрузочный .hex-файл. Находим в нём указанный фрагмент (по добавленным для поиска 0DADAh): Цитата ... :10ED5C00C73FB01222F7741730413F40DADA3F4018 :10ED6C00DADA3F40000030410C413C80001F0624A1 ... Как видим - в коде получили такую желанную MOV #0, R15. Ничего сложного, если прочитать документацию на компилятор/компоновщик. PS: Вышеописанные манипуляции произведены при помощи "IAR Assembler V7.12.1.987/W32 for MSP430". Quote Share this post Link to post Share on other sites More sharing options...
Aries 1 Friday at 02:33 PM Posted Friday at 02:33 PM (edited) · Report post 5 часов назад, jcxz сказал: Руководствуясь написанным мной выше, это сделать нетрудно...... PS: Вышеописанные манипуляции произведены при помощи "IAR Assembler V7.12.1.987/W32 for MSP430". Спасибо, попробую обязательно. У меня IAR тоже 7.12 P.S.- попробовал - получилось, спасибо ещё раз ! Просто не всё помещается в голове, старею однако 🤷♂️ Edited Friday at 04:12 PM by Aries Quote Share this post Link to post Share on other sites More sharing options...
Aries 1 Yesterday at 09:27 AM Posted yesterday at 09:27 AM (edited) · Report post Когда делал первый вариант прошивки, столкнулся с тем, что IDA не понимает отдельные команды. Пришлось дописывать их вручную. Как поправить модуль MSP430.py я не знал, да и сейчас не знаю, поэтому обходился чем мог 😀 На скрине как раз такой случай. Edited 6 hours ago by Aries Quote Share this post Link to post Share on other sites More sharing options...
girts 1 Yesterday at 12:56 PM Posted yesterday at 12:56 PM · Report post c IDA беда даже не в том, что она что то нерасшифровывает, беда начинается тогда, когда она явно косячит. И по идее из этого описания проца нужно было бы выкинуть к чёрту все эти ихние "упрощения" - всёравно это не на благо, а в тупик, задача то совсем иная если уж ею пользоватся. Писал когдато почти с нуля модуль под STM8.... Так и до конца неразобрался с ихним SDK. Что хорошо для одной версии, то смерть для другой. Ну а косяк 9S12 встроенного эмулятора, где при ADC carry всегда 0 - тяжелое наследие, которое править никто и несобирается. Кое как работает, да и ладно. Однако в луже сидели месяца два по этой причине. Мораль - полагатся нельзя. Но хорошо, что она есть! Quote Share this post Link to post Share on other sites More sharing options...
Aries 1 12 hours ago Posted 12 hours ago · Report post 12 часов назад, girts сказал: И по идее из этого описания проца нужно было бы выкинуть к чёрту все эти ихние "упрощения" - всёравно это не на благо, а в тупик, задача то совсем иная если уж ею пользоватся. Ух как забористо ! 🤣 А что то более конкретное по теме есть ? Quote Share this post Link to post Share on other sites More sharing options...
girts 1 7 hours ago Posted 7 hours ago · Report post а что именно? Quote Share this post Link to post Share on other sites More sharing options...
Aries 1 2 hours ago Posted 2 hours ago · Report post 4 часа назад, girts сказал: а что именно? Например как подправить MSP430.py ? Quote Share this post Link to post Share on other sites More sharing options...