|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.01.2014, 18:11 | #1 |
Пользователь
Регистрация: 21.01.2014
Сообщений: 12
|
asm вставка, прошу помощи (1 байт воспринимается как много, кириллический символ)
Вопрос необычный.
На старом (BCB 6 Professional) ассемблерные вставки работали прекрасно Перешли на XE - и начался кошмар портирования. asm MOV AL, 'Z' //воспринимает нормально asm MOV AL, 'Ю' //воспринимает как юникод (больше одного байта) Смысл в следующем - при компиляции подлый IDE расценивает кириллицу как юникод и шлет ассемблеру 2(4) байта вместо одного. Как сказать "хочу работать с однобайтовыми символами"? Ошибку на кволити централ я ежегодно выкладываю - но воз и ныне там. Саппорт тоже больше полугода говорит, что "в работе". ПРОСЬБА - не предлагать вводить числа вместо букв - очень большой объем исходников. |
22.01.2014, 12:39 | #2 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
В любом случае предстоит правка исходников, так что вариант "числа вместо букв" имеет место быть. Можно наваять программулину, которая бы выискивала в коде вставки на асме и меняла бы 'Ю' на 222 // 'Ю' или (char)'Ю'. Ну или или поиском-заменой, но по-очереди...
|
22.01.2014, 12:48 | #3 |
Пользователь
Регистрация: 21.01.2014
Сообщений: 12
|
Ясно, значит опций для tasm'a нет? Или Вы их не знаете?
Для си ведь опция "_TCHAR maps to" - подходит. Мне кажется, что решение есть. Только сокрыто от непросвещенных Кстати, если Вы напишете в ассемблерной вставке char('Ю') или (char)'Ю' - ассемблер вам не простит и выдаст ошибку. |
22.01.2014, 14:59 | #4 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
Ну, с (char) я прогнал, признаюсь. Но надо помнить, что асмовские вставки обрабатывает компилятор С, а не tasm [поэтому и никакие опции tasm не помогут]. Следовательно, синтаксис используется именно С. Например, синтаксис асма
Код:
Код:
|
22.01.2014, 15:20 | #5 |
Пользователь
Регистрация: 21.01.2014
Сообщений: 12
|
Да-а-а?
Код:
Иначе - белиберду. Именно поэтому - в опциях проекта есть вкладка со свойствами tasm'a А вот как ему сказать аналогичное (_TCHAR maps to char)? Я ведь пример привел - упрощенный. В реальных условиях - в десятках мегабайт исходников (речь ТОЛЬКО про ассемблерные вставки в проекте, размер которого в исходниках превышает 5 гиг) - автоматика невозможна, в принципе. А ручной труд приводит к неизбежным ошибкам. |
22.01.2014, 15:21 | #6 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
А если a будет CHAR то засунет что?
А кстати, в MOV инструкции указан регистр AL - как вообще в него можно засунуть 2/4 байта? Последний раз редактировалось waleri; 22.01.2014 в 15:24. |
22.01.2014, 15:26 | #7 |
Пользователь
Регистрация: 21.01.2014
Сообщений: 12
|
А Вы в курсе, что такое "неяное приведение типов"?
Учитывая, что BYTE - это typedef от unsigned char? если char a написать - будет то же самое, только рассматриваемый байт станет знаковым. sizeof(BYTE) и sizeof(char) - это (в нашем случае) единица! |
22.01.2014, 15:35 | #8 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
stslam
Ты вообще просто умничаешь или проблему решаешь? Хотя бы проверяешь или просто теоретизируешь? Попробуй Код:
|
22.01.2014, 16:20 | #9 |
Пользователь
Регистрация: 21.01.2014
Сообщений: 12
|
Нет, я не умничаю. Я просто не понимаю, как можно абстрактно кидать непроверенные идеи - поэтому вынужден указывать на некоторые огрехи в понимании того, кто пишет. Да, мне хотелось бы решить проблему. Скажу больше - я уверен, что существует какой-то допключ для tasma в опциях проекта (или что-то иное), но про это я нигде не нашел. А в кволити централ - молчат (ежегодно вопрос репорчу - почти что с каждой новой версией )
По поводу вышесказанного (BYTE('Ю')). За такой трюк - спасибо, конечно... Но я его знал (это первое, что я попробовал сделать) - ошибку выдавать перестанет, но в AL занесется другой байт от юникодовского символа (в моем случае с 'Ю' - там окажется 0xAE вместо 0xDE) т.к. сработает парсер tasm'a. А в рядом стоящую конструкцию Код:
|
22.01.2014, 16:33 | #10 |
Форумчанин
Регистрация: 29.01.2013
Сообщений: 319
|
stslam
Насчёт "огрехов", "указать" и прочей важняцкой иронии. Удали куда-нибудь tasm и скомпилируй проект со вставками. Компилируется? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Прошу помощи | Пупсончик | 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 |