|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 9, 2003 16:18:22 Так как все строки в ресурсах хранятся в кодировке unicode, то необходимо их так и записать. Проблемма в том, что текст программы находится в однобайтовой кодировке, а директива du просто запивывает в старший байт 0, то есть никакой перекодировки не осуществляется. Копированием строки в fasm занимается следующий кусок кода:
;file assembler.inc
mov ah,ah
copy_word_string:
lods byte [esi]
stos word [edi]
loop copy_word_string
Если между lodsb и stosw добавить код для перекодирования, то проблемма будет решена. Лучше всего будет если Tomasz Grysztar добавит в fasm директиву для загрузки таблицы перекодирования из бинарного файла. Может кто-нибудь поговорит с ним по этому поводу, а то я английского не знаю. |
|
|
Дата: Сен 9, 2003 16:28:42 Заместо mov нужно поставить xor |
|
|
Дата: Сен 9, 2003 16:31:12 Прошу прощения, в исходнике xor, просто я эту команду не скопировал, а так дописал. |
|
|
Дата: Сен 9, 2003 16:40:38 Лучше всего будет если Tomasz Grysztar добавит в fasm директиву для загрузки таблицы перекодирования из бинарного файла. А разве нельзя сделать это в виде макроса? |
|
|
Дата: Сен 9, 2003 17:55:10 Чтобы сделать макрос нам нужно в цикле перебрать символы переданной строки, и если это русская буква, то добавить к ней 350h. В tasm'е для этого были директивы, а в фасме таких директив нет. А объявлять строки как du 422h,435h,43ah,441h,442h,0 или du 'Т'+350h,'е'+350h,'к'+350h,'с'+350h,'т'+350h,0 очень утомительно, и как их в таком виде в макросы передавать? К тому же название этой директивы расшифровывается как Define Unicode, а так как принимает она строку байт, то должна превратить ее в unicode-строку. Вот если бы программы были написаны в unicode, и эта директива просто копировала бы символ из текста в выходной файл, то все было бы замечательно. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.049 |