girts 10 17 марта, 2023 Опубликовано 17 марта, 2023 · Жалоба IDA - наверное потому, что сам её и упомянул в первом посту... Ну а в IAR наверное механизм схожий. с простой заменой одного на другое. По идее если выключить все оптимизации, должно сойтись. И должно быть чётко по тексту - что написал, то и получил. ASM всё же! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 132 17 марта, 2023 Опубликовано 17 марта, 2023 · Жалоба 1 час назад, Aries сказал: Как влиять на это ??? Один и тот же результат операции может быть достигнут разными командами. Даже ассемблер пытается делать программу компактной и быстрой, а вы хотите делать ее большой и медленной (доля шутки). То есть заставить чистый ассемблер ставить неоптимальный код команды в одно конкретное место скорее всего будет невозможно. Единственное, что здесь может сработать - использовать связку ассемблер-компоновщик (линкер) и команду занесения в регистр неизвестной ассемблеру константы, подставляемой компоновщиком. Поскольку значение константы асссемблеру неизвестно - он будет вынужден поставить подходящий для произвольной константы более длинный и медленный код. И останется только надеяться, что компоновщик именно вашей версии IARа не умеет оптимизировать выходной код или эту оптимизацию можно принудительно отключить. Как это сделать конкретно в современном IAR я не знаю и присоединяюсь к совету jcxz почитать про раздельную компиляцию и работу компоновщика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 220 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 220 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 220 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 10 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба c IDA беда даже не в том, что она что то нерасшифровывает, беда начинается тогда, когда она явно косячит. И по идее из этого описания проца нужно было бы выкинуть к чёрту все эти ихние "упрощения" - всёравно это не на благо, а в тупик, задача то совсем иная если уж ею пользоватся. Писал когдато почти с нуля модуль под STM8.... Так и до конца неразобрался с ихним SDK. Что хорошо для одной версии, то смерть для другой. Ну а косяк 9S12 встроенного эмулятора, где при ADC carry всегда 0 - тяжелое наследие, которое править никто и несобирается. Кое как работает, да и ладно. Однако в луже сидели месяца два по этой причине. Мораль - полагатся нельзя. Но хорошо, что она есть! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aries 3 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба 12 часов назад, girts сказал: И по идее из этого описания проца нужно было бы выкинуть к чёрту все эти ихние "упрощения" - всёравно это не на благо, а в тупик, задача то совсем иная если уж ею пользоватся. Ух как забористо ! 🤣 А что то более конкретное по теме есть ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
girts 10 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_а видит это всё вот так, но как только я заменяю строку - линкер начинает ругаться. Подскажите либо ткните носом где прочитать. Оно работает и в таком виде, но как то не по фэн шую 🙃 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 132 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба 6 минут назад, Aries сказал: но как только я заменяю строку - линкер начинает ругаться. Как именно он начинает ругаться - нам предлагается угадать? К сожалению (на самом деле нет), на этом форуме викторины не проводятся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться