Привет эксперты! Отвечу на кое-какие ваши вопросы и продолжу эту тему: Zloy: Привет эксперты! Почему при работе приложения1 всё выводится нормально, а при приложении2 какая-то кракозяба ??? Использую BC++ 5.02. Отвечает dmi Приветствую Вас, Zloy! А в чем ты пишешь - пробовал твой код в VC++ - вообще не пошел :( Я сам суже второй месяц страдаю над тем, как в _asm объявить переменную типа msg db 'Hello world!$'. Если че найдешь - может напишешь как это на самом деле делается? Заранее трям. Bye! Привет dmi! В VC++ он и не должен идти, обратил внимание на int 21h и то, что я написал, что пользуюсь BC++ 5.02 Отвечает Pablo Добрый день, Zloy! Даа ошибка конечно круто непонятная....а что при отладке происходит?! Привет Pablo! При отладке происходит следующее: в обоих случаях в dx пихаем 0000,
но в 1-ом случае там Hello world!$, а во втором его там нет ??? Открыл я второй exe в тексте и нашёл там Hello..., но перелопатил весь сегмент данных - его нет!!! (хотя могу ошибаться, не бог)
Отвечает vitya Добрый день, Zloy! Не знаю если честно, но скорее всего не иницилизуруются какие-нибудь библиотеки. Привет vitya! Я тоже не знаю, поэтому и спросил :)) Библиотеки тут очевидно не причём, ведь это же асм, который не должен зависеть от библиотек С.
Отвечает Sensey Добрый день, Zloy! Не знаю, как в BC 5.02, но в 3.1 код в приложении работает... Но я его немного модифицировал :) так как не помню как настроить, чтобы твой вариант понял - это где-то в настройках ковырятся надо, а мне лень :) Привет Sensey! Помнится мне в ВС 3.1 нельзя скобку от слова асм отделять, т.е. писать так: asm{ А твоя модификация:) не помогла
(и не могла помочь:)))
Так вот в продолжение: решил я заняться этим траболом на работе. Поставил себе на комп BC, набрал программу, нажал Ctrl+F9 ... Ошибка типа unable to find tasm.exe (точно не помню, но смысл тот). Я решил, что дистрибутив битый, установил себе bp 7.1 в autoexec прописал PATH=C:BPBIN и скомпилил всё заново... Представьте моё удивление, когда оба варианта сработали :)) Полез в TD: сегмент данных начинается как во 2 случае (он не работал), но потом (0090h) идёт Hello world!$ (в обоих). И вот, что я думаю: может у меня (да и не только) дома стоит битый TASM ??? Хотя в него я эту прогу (ессно на асме) загонял - всё ок! Большая просьба всем экспертам - попробуйте этот код у себя!
Доброе время суток, Zloy! Мда видно у меня тоже нету tasmа в дистрибутиве, т.к. он у меня не установился. Нада по сидюкам своим порыскать чтоб tasm найти! Ответ отправлен: 23.07.2002, 22:21 Отправитель: Pablo Отвечает Sinner
Здравствуйте, Zloy! Я уже отвечал по этому поводу, что в таких случаях хорошо бы для своего асм-кода проинициализировать ds, а потом вернуть его как было (после своего кода, ессно). Ответ отправлен: 25.07.2002, 04:18 Отправитель: Sinner
Вопрос № 131
Уважаемые эксперты, покажите, пожалуйста, где я ошибся: ниже пример из Страустрапа из 5 главы, 2-связный список. в комментариях то, что я не понял т.е зачем настраивать suc в только что созданном классе, если еще неизвестно, будет ли этот следующий? да и вообще, указатели какие-то неправильные :) надеюсь на скорый ответ
Доброе время суток, bik! Ты не прав. Вот смотри. У тебя есть список. Берем элемент (в любом месте). И делаем append. Тогда имеем следующую картину: наш список имеет вид: [1]<->[2]<->...<->[this]<->[next]<->...[end] И новый элемент списка [p], добавляемый после [this]. В результате должны получить следующее: [1]<->[2]<->...<->[this]<->[p]<->[next]<->...[end] Т.е., если по полям, то все выглядит так: До: this.suc = next next.pre (=this.suc.pre) = this После: this.suc = p next.pre (=this.suc.pre) = p p.pre = this p.suc = next (=this.suc) Если посмотреть на код, то там ровно это и записано: p->suc = suc (т.е. p->suc = this->suc, т.е. next) p->pre = this (тут без вопросов) suc->pre (т.е. this->suc->pre = next ->pre) = p suc (т.е. this->suc) = p Вот собственно и все. Рекомендую при построении динамических структур
рисовать такие же диаграммки - сразу же голова просветляется, какой указатель куда сунуть... Ответ отправлен: 24.07.2002, 19:13 Отправитель: Ayl Отвечает Dzik
Приветствую Вас, bik! Цикл циклический, вот указатель suc сразу и настраиваем!
Ответ отправлен: 24.07.2002, 18:13 Отправитель: Dzik Отвечает Sinner
Доброе время суток, bik! В конечном итоге получается: list_head->suc=b; a->pre=b; b->suc=a; b->pre=list_head;
Ответ отправлен: 25.07.2002, 05:25 Отправитель: Sinner Отвечает vitya
Доброе время суток, bik! весь прикол в том, что ты думаешь, что он добавляет список в конец, а он всовывает его в середину. (а указывает на б); а<->b, теперь вставляем c, а<->c<->b, теперь, нужно обновить как указатели b так и а, поэтому b->pre = c; c->suc = suc; suc = p; и т.д. Ответ отправлен: 25.07.2002, 08:27 Отправитель: vitya Отвечает Артём Шегеда
Доброе время суток, bik!
Маленький комментарий к ответам экпертов. Судя по вопросу, читатель не знаком с терминологией или не понял сути предмета. "указатель нового класса на следующий ставится на следующий текущего ..." - это неправильно. Неправильно применён термин "класс". Надо было сказать "экземпляр класса" или "объект". bik, будь добр, почитай ещё разок книгу Страустрапа. Я уверен, станет легче. Тем более, что списки в ООП - не самое сложное.
С уважением, Артём. Ответ отправлен: 25.07.2002, 12:58 Отправитель: Артём Шегеда
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.