girts 9 17 марта, 2023 Опубликовано 17 марта, 2023 · Жалоба IDA - наверное потому, что сам её и упомянул в первом посту... Ну а в IAR наверное механизм схожий. с простой заменой одного на другое. По идее если выключить все оптимизации, должно сойтись. И должно быть чётко по тексту - что написал, то и получил. ASM всё же! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 17 марта, 2023 Опубликовано 17 марта, 2023 · Жалоба 1 час назад, Aries сказал: Как влиять на это ??? Один и тот же результат операции может быть достигнут разными командами. Даже ассемблер пытается делать программу компактной и быстрой, а вы хотите делать ее большой и медленной (доля шутки). То есть заставить чистый ассемблер ставить неоптимальный код команды в одно конкретное место скорее всего будет невозможно. Единственное, что здесь может сработать - использовать связку ассемблер-компоновщик (линкер) и команду занесения в регистр неизвестной ассемблеру константы, подставляемой компоновщиком. Поскольку значение константы асссемблеру неизвестно - он будет вынужден поставить подходящий для произвольной константы более длинный и медленный код. И останется только надеяться, что компоновщик именно вашей версии IARа не умеет оптимизировать выходной код или эту оптимизацию можно принудительно отключить. Как это сделать конкретно в современном IAR я не знаю и присоединяюсь к совету jcxz почитать про раздельную компиляцию и работу компоновщика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 17 марта, 2023 Опубликовано 17 марта, 2023 · Жалоба 12 часов назад, Aries сказал: Могу ли я как то указать IAR_у когда ему это следует делать а когда нет ? Не думаю, что такое возможно. Только описать команду макросом, который развернётся во вставку машинного кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aries 3 17 марта, 2023 Опубликовано 17 марта, 2023 · Жалоба 7 минут назад, jcxz сказал: Не думаю, что такое возможно. Только описать команду макросом, который развернётся во вставку машинного кода. Резюмируя всё выше сказанное, делаю для себя вывод - значит я правильно сделал, что в тексте asm_а просто вставил DC8 3Fh, 40h, 0, 0 тем самым заставляя принудительно поставить нужную команду MOV.W #0, R15 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 17 марта, 2023 Опубликовано 17 марта, 2023 · Жалоба 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 на что-то иное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aries 3 17 марта, 2023 Опубликовано 17 марта, 2023 · Жалоба 24 минуты назад, jcxz сказал: Остаётся только добиться, чтобы компоновщик не заменял этот 0 на что-то иное. Вот этого у меня и не получилось, поэтому плюнув на всё сделал проще, хотя и не по правилам. 🤣 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 17 марта, 2023 Опубликовано 17 марта, 2023 · Жалоба 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". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aries 3 17 марта, 2023 Опубликовано 17 марта, 2023 (изменено) · Жалоба 5 часов назад, jcxz сказал: Руководствуясь написанным мной выше, это сделать нетрудно...... PS: Вышеописанные манипуляции произведены при помощи "IAR Assembler V7.12.1.987/W32 for MSP430". Спасибо, попробую обязательно. У меня IAR тоже 7.12 P.S.- попробовал - получилось, спасибо ещё раз ! Просто не всё помещается в голове, старею однако 🤷♂️ Изменено 17 марта, 2023 пользователем Aries Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aries 3 20 марта, 2023 Опубликовано 20 марта, 2023 (изменено) · Жалоба Когда делал первый вариант прошивки, столкнулся с тем, что IDA не понимает отдельные команды. Пришлось дописывать их вручную. Как поправить модуль MSP430.py я не знал, да и сейчас не знаю, поэтому обходился чем мог 😀 На скрине как раз такой случай. Изменено 21 марта, 2023 пользователем Aries Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
girts 9 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба c IDA беда даже не в том, что она что то нерасшифровывает, беда начинается тогда, когда она явно косячит. И по идее из этого описания проца нужно было бы выкинуть к чёрту все эти ихние "упрощения" - всёравно это не на благо, а в тупик, задача то совсем иная если уж ею пользоватся. Писал когдато почти с нуля модуль под STM8.... Так и до конца неразобрался с ихним SDK. Что хорошо для одной версии, то смерть для другой. Ну а косяк 9S12 встроенного эмулятора, где при ADC carry всегда 0 - тяжелое наследие, которое править никто и несобирается. Кое как работает, да и ладно. Однако в луже сидели месяца два по этой причине. Мораль - полагатся нельзя. Но хорошо, что она есть! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aries 3 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба 12 часов назад, girts сказал: И по идее из этого описания проца нужно было бы выкинуть к чёрту все эти ихние "упрощения" - всёравно это не на благо, а в тупик, задача то совсем иная если уж ею пользоватся. Ух как забористо ! 🤣 А что то более конкретное по теме есть ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
girts 9 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба а что именно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aries 3 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба 4 часа назад, girts сказал: а что именно? Например как подправить MSP430.py ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aries 3 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба В 17.03.2023 в 13:13, jcxz сказал: Ничего сложного, если прочитать документацию на компилятор/компоновщик. День добрый. Имеется вот такая конструкция. Родной дизассемблер IAR_а видит это всё вот так, но как только я заменяю строку - линкер начинает ругаться. Подскажите либо ткните носом где прочитать. Оно работает и в таком виде, но как то не по фэн шую 🙃 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба 6 минут назад, Aries сказал: но как только я заменяю строку - линкер начинает ругаться. Как именно он начинает ругаться - нам предлагается угадать? К сожалению (на самом деле нет), на этом форуме викторины не проводятся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться