![]() |
|
|
![]()
|
|
| 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 ************************ а вообще открой книгу . |
|||
|
||||
| ds29 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 15.3.2006 Репутация: 1 Всего: 2 |
||||
|
||||
| DoZENT |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 2.6.2006 Репутация: нет Всего: 1 |
А где скачать такую? Добавлено @ 19:26
Как я могу про это подумать, если я в этом еще не разбираюсь?? Поэтому и спрашиваю совета!
Зря так думаешь. Но работа с текстом в асме чуть более сложная, чем hello world, не находишь? -------------------- Какая боль, какая боль, Internet Explorer 5.0... |
||||||
|
|||||||
| ds29 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 15.3.2006 Репутация: 1 Всего: 2 |
в cети Internet.
Добавлено @ 19:39 DoZENT, цитировать по частям несколько неправильно, я выразил единую мысль о том, что если бы ты звшёл в Гугл, написал "hello world + Ассемблер" (http://www.google.com/search?client=opera&rls=en&q=hello+world+%2B+%D0%90%D1%81%D1%81%D0%B5%D0%BC%D0%B1%D0%BB%D0%B5%D1%80&sourceid=opera&ie=utf-8&oe=utf-8) , ты бы получил как минимум ответ на вопрос про строки , а так же ссылки на полезные вещи для новичка. если тебе трудно, на наводку "учебник + Assembler" (http://www.google.com/search?hs=OfY&hl=en&lr=&client=opera&rls=en&q=%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA+%2B+Assembler&btnG=Search) желаю удачи в изучении Ассемблера. |
|||
|
||||
| DoZENT |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 2.6.2006 Репутация: нет Всего: 1 |
Ты че меня будешь гуглом пользоваться учить? А если трудно отвечать на чужие вопросы, зачем тогда вообще на форум заходишь? -------------------- Какая боль, какая боль, Internet Explorer 5.0... |
|||
|
||||
| ds29 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 15.3.2006 Репутация: 1 Всего: 2 |
я отвечал.
ты просил ссылку - я дал. |
|||
|
||||
| rsm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: 1 Всего: 62 |
Это потому что компилятор MASM понятия не имеет, что значит "\n". Добавляй в конец строки эквивалентный код - 0Dh.
|
|||
|
||||
| ds29 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 15.3.2006 Репутация: 1 Всего: 2 |
хм. я же ответал на этот вопрос (http://forum.vingrad.ru/index.php?showtopic=98782&view=findpost&p=752230)
(и кстати "\n" = 0dh,0ah, , а не просто 0dh.) это номера символов 13 и 10 , т.е. перевод строки, и установка курсора в начало строки) |
|||
|
||||
| rsm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: 1 Всего: 62 |
||||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: 11 Всего: 18 |
DoZENT,
К сожалению, сейчас WASM.RU в лежку, но попробуй скачать пакет MASM32 (~35 мегабайт). Там куча примерофф и вообще (имхо) все, что нужно для WinASM (кроме отладчика (SoftIce) и дизассемблера(Hiew/IDA) ). -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| ds29 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 15.3.2006 Репутация: 1 Всего: 2 |
так книги нужны или инструменты?
вот официальная страничка MASM32: http://www.masm32.com/ Кстати, самая последняя версия (MASM32 Version 9) весит 3 Mb (установленная 22 Mb). p.s. Wasm снова упал. |
|||
|
||||
| DoZENT |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 2.6.2006 Репутация: нет Всего: 1 |
Спасибо всем, все понял, написал все как надо. Еще один вопрос: при выполнении кода
В winxp работает все как надо, т.е. в DrvBuffer оказывается C:\, но при работе в w2000 (виртуальная машина), где система расположенна в папке D:\WINNT, в DrvBuffer оказывается D:\w. Почему??? Добавлено @ 20:25 ответы лучше в личку: 219569083 -------------------- Какая боль, какая боль, Internet Explorer 5.0... |
|||
|
||||
| setty |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 8.6.2006 Где: Украина Репутация: нет Всего: нет |
[/QUOTE] вот, для новичков всамый раз туторы икселиона на руском http://archive.rin.ru/more/15162.html/ |
||||
|
|||||
| ds29 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 15.3.2006 Репутация: 1 Всего: 2 |
туториалы ICZELION'а следует читать после общего изучения ассемблера, а так же после изучения (хотя бы обзорного ) ассемблера под DOS. иначе под Win32 лучше писать на Си.
|
|||
|
||||
| setty |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 8.6.2006 Где: Украина Репутация: нет Всего: нет |
полностью с тобой согласен, однако надо признать некаждый готов потратить время на изучение сначала самого асма, а потом тонкостей его примененения в виндоуз, хотя я именно так и поступал... околого полугода поначалу кодил под дос...
|
|||
|
||||
| rsm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: 1 Всего: 62 |
||||
|
||||
| DoZENT |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 2.6.2006 Репутация: нет Всего: 1 |
Да, но результат тот же.. на win2k не работает, результатом является строка "D:\w". -------------------- Какая боль, какая боль, Internet Explorer 5.0... |
|||
|
||||
| DoZENT |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 2.6.2006 Репутация: нет Всего: 1 |
Неужели никто не знает, почему так происходит? Народ, help pls!!!
-------------------- Какая боль, какая боль, Internet Explorer 5.0... |
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |