![]() |
|
|
![]()
|
|
| DoZENT |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 2.6.2006 Репутация: нет Всего: 1 |
Извиняюсь сразу за глупый вопрос, только учусь...
Есть строка в формате "arg1,arg2,arg3" (без кавычек) Как каждую arg записать в свою переменную? Заранее спасибо! -------------------- Какая боль, какая боль, Internet Explorer 5.0... |
|||
|
||||
| ds29 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 15.3.2006 Репутация: 1 Всего: 2 |
сканируешь строку на запятую (в конце строки, по идее 0), запоминаешь позицию (сначала она = 0), и каждый раз от позиции до запятой загоняй посимвольно в свою переменную.
|
|||
|
||||
| ds29 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 15.3.2006 Репутация: 1 Всего: 2 |
вот примерный код:
.data string 'arg1,arg2,arg3',0 v1 10 dup(?) v2 10 dup(?) v3 10 dup(?) .code lea esi, string xor eax,eax mov dl,1 ; номер переменной start_s: mov bl,byte ptr [esi] cmp bl,0 je exit_s ;------ cmp dl,1 jne n_1 inc dl lea edi,v1 n_1: cmp dl,2 jne n_2 inc dl lea edi,v2 n_2: ;остаётся 3-я lea edi,v3 zicl: ; цикл по перессылки из главной строки в подстроки cmp bl,',' je next_s mov byte ptr [edi],bl ; записыва ю в одну из подстрок inc edi inc esi mov bl, byte ptr [esi] ; загружаю следующий из главной строки jmp zicl ;*** ;------ next_s: inc esi jmp start_s exit_s: p.s. возможны ошибки, код не проверен и придуман за пару минут, так же не капли не оптимизирован, просто пример) Добавлено @ 01:08 (Win32) |
|||
|
||||
| sgi1981 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 16.3.2006 Репутация: 2 Всего: 10 |
Это сообщение отредактировал(а) sgi1981 - 2.6.2006, 20:30 -------------------- Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства. |
|||
|
||||
| DoZENT |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 2.6.2006 Репутация: нет Всего: 1 |
Блин, не работает...
Попробую написать поподробнее Есть строка novaPDF Pro v3,winspool,NVP3: Если юзать ваш алгоритм, то v1,v2,v3 остаются пустыми. mov esi,offset str1 заменил на lea esi, buf, где buf это LOCAL buf[1024] : BYTE Теперь с v2,v3 все нормально, а v1 почуме-то равен novaPDF Prwinspool В чем может проблема? P.S. Еще один вопрос: как заюзать EnumPrinters в ассемблере? -------------------- Какая боль, какая боль, Internet Explorer 5.0... |
|||
|
||||
| sgi1981 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 16.3.2006 Репутация: 2 Всего: 10 |
На каком ассемблере пишешь ?
Что это за странный прием и чем он лучше предыдущего? -------------------- Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства. |
||||
|
|||||
| DoZENT |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 2.6.2006 Репутация: нет Всего: 1 |
MASM
С предыдущим все v* вообще были пустыми -------------------- Какая боль, какая боль, Internet Explorer 5.0... |
||||
|
|||||
| DoZENT |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 2.6.2006 Репутация: нет Всего: 1 |
Дело тут в длинне строки, только вот как исправить?..
-------------------- Какая боль, какая боль, Internet Explorer 5.0... |
|||
|
||||
| sgi1981 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 16.3.2006 Репутация: 2 Всего: 10 |
Просто я не думал, что вы не сможете об этом догадаться
Вот так это исправляется. А
заменить на
не пробовали ? А то я просто забыл, что идентификатор другой у строки. -------------------- Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства. |
||||||
|
|||||||
| rsm |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: 1 Всего: 62 |
ИМХО, для такой задачи было бы неплохо написать специально обученную функцию:
Тогда для твоего случая код будет такой:
Это сообщение отредактировал(а) rsm - 2.6.2006, 21:14 Присоединённый файл ( Кол-во скачиваний: 3 )
strcopy.zip 1,28 Kb |
||||
|
|||||
| sgi1981 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 16.3.2006 Репутация: 2 Всего: 10 |
Ну, так тоже можно. Только заранее неизвестно - сколько аргументов всего присутствует.
Сделано 3 вызова функции, а может нужно 4 сделать ? И флаг направления direction flag командой cld нужно сбросить в ноль, а вдруг он содержит 1 и тогда адрес будет не увеличиваться, а уменьшаться. -------------------- Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства. |
|||
|
||||
| ds29 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 15.3.2006 Репутация: 1 Всего: 2 |
можно и рекурсию
|
|||
|
||||
| rsm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: 1 Всего: 62 |
В аттаче пример, работающий с любым количеством аргументов.
В идеале - да, непременно нужно сбросить. В своих программах можно и не сбрасывать - с АСМом ты контролируешь каждый байт и знаешь, что, где и когда увеличивается или уменьшается |
|||
|
||||
| DoZENT |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 2.6.2006 Репутация: нет Всего: 1 |
Я же говорю, только учусь, это моя первая программа на асме. Спасибо, rsm, все работает! Еще вопрос один: как вывести MessageBox с несколькими строками? Добавление \n к концу каждой строки не помогает... В Delphi было еще #13#10, здесь нет естественно.. -------------------- Какая боль, какая боль, Internet Explorer 5.0... |
|||
|
||||
| ds29 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 15.3.2006 Репутация: 1 Всего: 2 |
var db 'text',0
а для перевода строки var db 'line1',0dh,0ah db 'line2',0 или var db 'line1',0dh,0ah, \ 'line2',0 или , можно и всё в строку var db 'line1',0dh,0ah , 'line2',0 ************************ а вообще открой книгу . |
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |