|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.01.2014, 16:42 | #11 |
Пользователь
Регистрация: 21.01.2014
Сообщений: 12
|
Уважаемый. Речь идет о встроенном турбо ассемблере, который "удалить" не получится.
"Голая" система со свежеустановленным ЛЮБЫМ вариантом билдера (после BCB6). Если вдаваться в подробности - работает препроцессор, заменяющий макросы и прочие #define, затем компилер, который в зависимости от наличия asm (блоком или построчно) - передает голую неискаженную строку во встроенный тасм. А уж он (тасм) - получая юникод - возвращает статус ошибки с номером (Operand size mismatch) Последний раз редактировалось stslam; 22.01.2014 в 16:47. |
22.01.2014, 16:48 | #12 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
Ну хоть здесь есть ясность. Уважаемый. Теперь проясним дальше. Как по-твоему происходит компиляция? С-компилятор переводит программу в асм, а потом скармливает её встроенному tasm? А когда встречает вставки, то скармливает их вообще не трогая?
|
22.01.2014, 16:50 | #13 |
Пользователь
Регистрация: 21.01.2014
Сообщений: 12
|
Как работает "глубже" - не вникал.
Цепочка такова: Препроцессор - базовый компилер - ветвление на bcc dcc tasm и линкер ресурсов (чистых непарсеных строк) - обработка возвратов |
22.01.2014, 17:23 | #14 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
Так вот. Я утверждаю, что если работает компилятор С, то в tasm он ничего не передаёт. Он самостоятельно справляется со всеми вставками, без помощи tasm. А последний работает только в том случае, если в проекте присутствуют файлы "чистого" асма. Отсюда вывод, что опциями tasm ты проблему не решишь, ибо он, как компилятор ассемблера, вообще не используется. И можешь сколько угодно усмехаться.
А теперь по теме. Что будет, если использовать псевдопеременные? Т.е., заменить вставки на Код:
|
22.01.2014, 17:37 | #15 |
Пользователь
Регистрация: 21.01.2014
Сообщений: 12
|
Еще раз. Как только будет 'Ю' в теле asm вставки - так сразу больше байта. И тут как повезет - занесется или "не тот" байт, или выдаст ошибку operand size mismatch
К слову - я не говорил, что на чистый tasm32.exe передача идет. Идет на tasm участок кода в исполняемом парсера(в любом бинарном отладчике походи, там модулей дофигища - еще чуть и я за написание кряка готов сесть) Опции tasma работают и для сишного парсера, выборочно (уровень warning если поменять - видно). Но вцелом ты прав - нет там такой опции. Можно еще mak файл собрать - чтобы сначала asm генерило, а затем tasm - ило... Пока не проверял - что выдает, отложу "на потом". Можно выкрутиться массивом символов, числом, макроподстановкой.... Можно по-всякому. Но придется код переделывать сильно. А хотелось бы какую-нибудь спецпрагму или опцию найти. Убегаю. До завтра. |
23.01.2014, 10:05 | #16 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
Так ничего и не сказал про псевдопеременные. Вообще, странно всё это немного. Может, я что-то не допонимаю? У меня нет, к сожалению, XE, но "шестёрка" генерит абсолютно идентичный код на все варианты.
Код:
|
23.01.2014, 10:11 | #17 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
Кстати,
Код:
|
23.01.2014, 11:06 | #18 |
Пользователь
Регистрация: 21.01.2014
Сообщений: 12
|
FataLL
Оппаньки! Похоже у Вас где-то "сидит" правильная настройка (в опциях проекта) которой я по-скудоумию или невнимательности - не вижу (или настройки по-умолчанию у Вас другие). Можно кинуть мне Ваш проект для изучения? /*стучусь в аську*/ UPD. Кстати, про _AL я сразу не понял (приношу свои извинения за тупизну), - так работает - но разрывать _asm { ... } код неохота - там пролог/эпилог генерироваться начинает, ну и с AL - это был пример, конструкций поболее будет, не везде выкрутиться можно. Последний раз редактировалось stslam; 23.01.2014 в 13:02. |
23.01.2014, 20:54 | #19 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
Кодировка UTF8? BYTE('Ю') правильно берёт младший байт 0xAE [UTF8 код для буквы 'Ю' - 0xD0AE]. Может, достаточно перевести редактор в win1251?
|
24.01.2014, 11:55 | #20 |
Пользователь
Регистрация: 21.01.2014
Сообщений: 12
|
Так я сразу об этом и говорил.
Я бы с удовольствием перевел его в 1251. Но как... И опять-таки - только в asm - юникод попадает. В сишные конструкции - в зависимости от настройки _TCHAR maps to (если w_char - будет юникод, иначе - char) Обратите внимание - char c = 'Ю' заносит правильно... (если memcpy или lstrcpy в массив - тоже 1 правильный байт занесет)... |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Прошу помощи | Пупсончик | PHP | 11 | 12.01.2014 10:42 |
Прошу помощи, сам никак не могу понять как делать (строки на Си) | Роман64 | Помощь студентам | 0 | 14.12.2013 17:28 |
Символ и Байт | tonatas | Общие вопросы Delphi | 4 | 15.09.2010 00:54 |
[Делфи] Как сделать чтобы символ много раз повторялся (без массивов) | zotox | Помощь студентам | 4 | 01.05.2009 22:10 |
С паскалем как и у многих проблемы,прошу помощи. Две задачи: интегральная и графическая. | Loyal | Помощь студентам | 3 | 27.09.2007 09:46 |