Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 310
от 06.07.2002, 19:10

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 665
Отправлено ответов: 1808
Активность: 271.8 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе]


 Список экспертов, ответы которых опубликованы в данном выпуске

Broken Sword
Статус: Профессиональный
Общий рейтинг: 143.14
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 160.93
[Подробней >>]
Alex
Статус: Опытный
Общий рейтинг: 112.03
URL: За здравие замолвите словечко и БУДЬТЕ ЗДОРОВЫ!
Телефон: (0332) 77-08-56
[Подробней >>]
 
Александр
Статус: Опытный
Общий рейтинг: 114.3
[Подробней >>]
freeseacher
Статус: Опытный
Общий рейтинг: 111.28
Телефон: 8(3832)366362
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 115.94
[Подробней >>]
 
igorash
Статус: Опытный
Общий рейтинг: 121.17
[Подробней >>]
kvINT
Статус: Опытный
Общий рейтинг: 113.74
[Подробней >>]
kostik
Статус: Профессиональный
Общий рейтинг: 114.45
URL: Все о программистах и для программистов
Телефон: (4212)393-276
[Подробней >>]
 
Sensey
Статус: Профессиональный
Общий рейтинг: 139.89
Телефон: +38 (0572) 41-76-04 дом.
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 128.99
[Подробней >>]
Spike
Статус: Доверительный
Общий рейтинг: 123
[Подробней >>]
 
Shal
Статус: Доверительный
Общий рейтинг: 106.55
[Подробней >>]
Guess Who
Статус: Доверительный
Общий рейтинг: 104.8
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 600. Привет. Кто-нибудь знает, что это такое: Задачка (ныне известная как "pancake flipping problem&... (ответов: 2)
Вопрос № 601. День добрый. Вопросик не по Асму, но решается, видимо, его средствами. С "мамой" был диск.... (ответов: 2)
Вопрос № 602. Здравствуйте, господа эксперты!!! У меня вопрос, на который вы возможно уже отвечали, так что я сраз... (ответов: 4)
Вопрос № 603. По поводу моей задачки. masquer: я тебя и до того уважал, мне интересно было пива попить, а тебя уго... (ответов: 2)
Вопрос № 604. Всем снова привет! Спасибо эксперту Broken Sword за ответ на вопрос об L2. 1. Кэшируются ли в L2 то,... (ответов: 5)
Вопрос № 605. Извините за оффтопик, но в разделе по *nix вас, экспертов, всего 14... Если у кого есть хорошие книг... (ответов: 1)
Вопрос № 606. Привет. Если интересно, то вот, что я нашел по вопросу "переворота блинов": Когда Пападими... (ответов: 1)
Вопрос № 607. Спасибо Всем, кто постарался ответить на мой вопрос (599), но у меня все равно не получается. Поэтом... (ответов: 3)
Вопрос № 608. Здравствуйте,уважаемые эксперты. У меня такой вопрос... При создании EXE - файла необходимо указыват... (ответов: 5)
Вопрос № 609. Дополнение к вопросу №594. Напомню его содержание:Привет всем экспертам! Помогите пожалуйс... (ответов: 2)
Вопрос № 610. Здравствуйте экспкрты! Помогите пожалуйста найти и решить ошибки в этой программке(см.ниже) PS Пож... (ответов: 6)

Вопросов: 11, ответов: 33


 Вопрос № 600

Привет.
Кто-нибудь знает, что это такое:
Задачка (ныне известная как "pancake flipping problem") такая:
Представьте, что у вас есть стопка из n блинов разного диаметра. Разрешается взять верхнюю "подстопку" из к блинов (k - любое) и перевернуть ее. Требуется за минимальное число таких переворотов отсортировать блины в стопке согласно их диаметру.



Вопрос отправлен: 02.07.2002, 01:10
Отправитель: Andy BitOff

[Следующий вопрос >>] [Список вопросов]

Отвечает Broken Sword

Добрый день, Andy BitOff!
без вникания и раздумий сразу могу сказать что:
минимум - один переворот (если они отсортированы в обратном порядке)
максимум - 2k-1 раз.

Ответ отправлен: 02.07.2002, 05:45
Отправитель: Broken Sword


Отвечает masquer

Добрый день, Andy BitOff!
мне кажется быстрая сортировка здесь как раз подойдет

Ответ отправлен: 02.07.2002, 01:51
Отправитель: masquer


 Вопрос № 601

День добрый.
Вопросик не по Асму, но решается, видимо, его средствами.
С "мамой" был диск. На нем есть NU. Ставил три раза с форматированием диска. Теперь мне VBox сообщает типа "хватит - попользовался".
Вопрос: куда он себя прописал, и как этого супостата извести, что бы еще поставить?



Вопрос отправлен: 02.07.2002, 01:52
Отправитель: Nick (nickolai@mail.iks.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Alex

Здравствуйте, Nick!
Это ты форматировал системный диск и переустанавливал полностью Винду? Тогда никак не извести, по крайней мере я не знаю. А иначе - снеси диск С: и поставь всё ПО заново...

Ответ отправлен: 02.07.2002, 08:01
Отправитель: Alex


Отвечает masquer

Приветствую Вас, Nick!
Мало форматировал, теперь попробуй сжечь монитор, процессор, память, разломай видеокарту, а в это время нужно прыгать вокруг компьюьера с бубном, если не поможет - меняй последовательность.
Короче, здесь не кракерский форум и помогать тебя здесь никто не будет, скажу только что VBox себя в виде длл прописал, и снять его можно, только у тебя не получится 8-[]

Ответ отправлен: 02.07.2002, 02:41
Отправитель: masquer


 Вопрос № 602

Здравствуйте, господа эксперты!!!
У меня вопрос, на который вы возможно уже отвечали, так что я сразу прошу не ругаться, просто у меня время в Net'e ограничено, только на получение почты.
Итак вопрос.
Можно ли как-нибудь узанть какие функции находяться в dll'ке (знаю что можно, напишити какими программами пользоваться и как) и какие параметры нужны для этих функций (конечно не их назначение, а их типы . вроде числовой или строковый и т.д.)
Гадеюсь. что написал корректно, и вы поймете то, о чем я вас прошу.
Заранее благодарен.
Анас.



Вопрос отправлен: 02.07.2002, 07:03
Отправитель: Анас (ahmetov_anas@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Александр

Добрый день, Анас!
Параметры функций можно узнать кажется только дизассемблированием, хотя я наверное отстал от жизни. А вот имена экспортируемых функций... В Borland C++ 3.1 есть мааленькая(32936 байт) программа impdef.exe - то что тебя интересует. Хоят что-то подобное есть наверное в любом языке. Только называется по разному.


Ответ отправлен: 05.07.2002, 15:55
Отправитель: Александр


Отвечает masquer

Доброе время суток, Анас!
возможно есть более специализированные утилиты для этого, хотя с параметрами, врядли. Так вот для решения проблемы, подобно твоей я пользуюсь дизассемблером ИДА и мозгами, просто экспорт можно посмотреть хотя бы вручную, находишь секцию экспорта, смотри ее raw offset и все. В Визуал Студии Dependency walker программа есть.

Ответ отправлен: 02.07.2002, 07:48
Отправитель: masquer


Отвечает freeseacher

Доброе время суток, Анас!
Можно! но зачем тебе программки когда:
1. про стандартные dll можно узнать в msdn
2. а про не стандартные только у авторов! но обычно принято называть функции по тому что они делают. поэтому берешь файл читаешь его как текстовый. конкретно тебе нужна секция экспорта(импорта) там все написано.
Про то какие параметры нужны либо опытным путем либо у самих авторов!

Ответ отправлен: 02.07.2002, 17:19
Отправитель: freeseacher


Отвечает vitya

Приветствую Вас, Анас!
Значит так. В пакете с MSVC поставляется программа dumpbin, может она есть и с MASM-ом, но не знаю. Итак, после ее вызова dumpbin /exports my.dll она напишет все экспортуруемые функции, однако если для них нету спец имени, к ним будет добавлен хвостик из непонятных букв и слов. Это ничего используя фунцию UnDecorateSymbolName вы можете получить не только ее имя, но и ее параметры.
Ну вроде все.

Ответ отправлен: 02.07.2002, 08:14
Отправитель: vitya


 Вопрос № 603

По поводу моей задачки.
masquer: я тебя и до того уважал, мне интересно было пива попить, а тебя угораздило жить в Николаеве :)
Теперь, как masquer уже знает, а остальные, наверное, нет,- там возможно много решений, и все они правильные. Расскажи, чем пользовался? Я думаю, что это ломается либо при помощи софтайса, либо эмулирующим отладчиком (мой любимый - edb от Сержа Пачковского, лежит у меня на сайте да и еще в куче мест в инете), по крайней мере, когда я в 1993 году впервые столкнулся с такой защитой (дема Second Reality, кодер PSI/Future Crew), я потратил месяц :))))
Народ, пиво все еще в силе, присылайте фрагмент кода, который вычисляет ключ
PS проходить ее пошагово можно точно месяц, так что не стОит:)



Вопрос отправлен: 02.07.2002, 10:22
Отправитель: Beeblebrox (beeblbrx@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает masquer

Приветствую Вас, Beeblebrox!
Не дописал, пользовался ntice (DS 2.6). Использование турбо дебугера - безнадежный вариант, наверное убедились уже. Используется самомодифицирующийся код. Если бы иметь возможность дампить раскриптованый код, немного проще будет - у меня не получилось. Ди и при попытке пошаговой трассировки всей расшифровки уменя либо айс вырубался, либо программа - так что это серьезная защита для досовских программ.
Блин, хотелось бросить работу и ехать пиво распивать :)))
Успехов всем, тот кто дойдет до конца будет приятно удивлен.

Ответ отправлен: 02.07.2002, 11:22
Отправитель: masquer


Отвечает igorash

Доброе время суток, Beeblebrox!
Раскодированный keygen отправил на мыло, работаю над прогой обратной keygen'у.


Ответ отправлен: 02.07.2002, 22:50
Отправитель: igorash


 Вопрос № 604

Всем снова привет!
Спасибо эксперту Broken Sword за ответ на вопрос об L2.
1. Кэшируются ли в L2 то, что push'иться ?
2. Я, наверное, перегрелся, но у меня не выходит скомпилить прогу:
Пишу: D:MASM611BIN>ml.exe 22.asm /AT
Microsoft (R) Macro Assembler Version 6.11
Copyright (C) Microsoft Corp 1981-1993. All rights reserved.
Assembling: 22.asm
22.asm(7): error A2085: instruction or register not accepted in current CPU mode
22.asm(11): error A2085: instruction or register not accepted in current CPU mode
Ни под вынь98, ни в Досе.


Приложение:


Вопрос отправлен: 02.07.2002, 10:53
Отправитель: -=TT=-

[Следующий вопрос >>] [Список вопросов]

Отвечает kvINT

Приветствую Вас, -=TT=-!
.386 или выше

Ответ отправлен: 02.07.2002, 22:28
Отправитель: kvINT


Отвечает masquer

Здравствуйте, -=TT=-!
Дык для тех инструкций, что тебе Sword сказал, процессор нужно указывать, что-то вроде .686.
Почитай про работу кеша в интеловских мануалах

Ответ отправлен: 02.07.2002, 11:33
Отправитель: masquer


Отвечает freeseacher

Добрый день, -=TT=-!
1. да, если скажешь будет, а так нет
2. ему str не нравиться поменяй на что-нить другое!
и перечитай зарезервированные слова!

Ответ отправлен: 02.07.2002, 16:55
Отправитель: freeseacher


Отвечает igorash

Приветствую Вас, -=TT=-!
Возможно ругается на название переменной
попробуй что-то типа str1.
У меня в ТАСМе и то, что ты прислал нормально откомпилилось и даже F%ck! выдало. :)


Ответ отправлен: 02.07.2002, 11:17
Отправитель: igorash


Отвечает Broken Sword

Доброе время суток, -=TT=-!
я, опять же, повторюсь: я в этом полный ноль, в официальном руководстве есть девятая глава полностью посвященная данной проблеме. Установил для себя то, что ничто так не меняется в Intel-ах от модели к модели, как кэш. Причем, различия в корне принципильные. Для PIII PIV (того что тебе нада) есть специальные отдельные главы. Пропустив пару листов с высказываниями на тему "coherent memory" (когерентность памяти ;), естественно не найдя информации на тему "кэшируется ли то что пушится :)", набрел на таблицу, в которой (в зависимости от битов CD и NW регистра CR0) указаны реакции кэша на ту или иную возникшую ситуацию.
Лично мое сугубо личное мнение - push-и кэшируются как никто другие (ведь, очевидно - если есть push, то дето поблизости будет pop), а иначе зачем кэщ ? :)
вообщем, по моему пора прекращать излагать умную мысль... )
2. Насчет МАСМ-а не знаю, никогда не игрался с ним, но судя по минимум 100 ответам на данную тему в данной рассылке..., короче помнится мне что там все зависит от регистра букв (параметров) :)


Ответ отправлен: 02.07.2002, 22:34
Отправитель: Broken Sword


 Вопрос № 605

Извините за оффтопик, но в разделе по *nix вас, экспертов, всего 14...
Если у кого есть хорошие книги по Linux (пользователю, админу, программеру - все что есть)в эл. виде - дайте, пожалуйста: _archive@mail.ru
Или ссылкой порадуйте...



Вопрос отправлен: 02.07.2002, 14:13
Отправитель: Александр (_archive@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает kostik

Здравствуйте, Александр!
Советую прогуляться по адресам www.linux.ru,а также
www.linux.chat.ru


Ответ отправлен: 06.07.2002, 13:24
Отправитель: kostik


 Вопрос № 606

Привет.
Если интересно, то вот, что я нашел по вопросу "переворота блинов":
Когда Пападимитриу только "выпустился" и приступил к преподавательской деятельности в Гарварде, он задал студентам задачку, которая казалась ему не особо сложной, но тем не менее сразу ему не далась. И пообещал тому, кто ее решит, поставить по своему курсу А (5 по-нашему). Задачка (ныне известная как "pancake flipping problem") такая:
Представьте, что у вас есть стопка из n блинов разного диаметра. Разрешается взять верхнюю "подстопку" из к блинов (k - любое) и перевернуть ее. Требуется за минимальное число таких переворотов отсортировать блины в стопке согласно их диаметру.
Никакой ответной реакции со стороны студентов не последовало, и только в конце семестра к Пападимитриу подошел студент, который сказал, что не знает как решить эту задачу, но у него есть кое-какие идеи. После совместного обсуждения эти идеи вылились в статью
W.H.Gates, C.H. Papadimitriou "Bounds for sorting by prefix reversals". -
Discrete Mathematics, 27:47-57, 1979.
По имени вы догадались, кто был тем студентом ;-)
Кстати, через некоторое время после выхода статьи Пападимитриу позвонил профессор из другого университета и сказал, что он только что познакомился со статьей, она произвела на него сильное впечатление, и он хотел бы пригласить "этого студента" на собеседование на (не помню какую) должность. На что
Пападимитриу ему ответил, что студент избрал неправильный путь: бросил учебу и организовал компанию Microsoft...
P.S. Кстати, pancake flipping problem до сих пор является открытой проблемой.
(С) Nikolay A. Panov, http://www.allhumour.ru, niksite@mail.ru, ICQ: 122-40-8888



Вопрос отправлен: 02.07.2002, 14:50
Отправитель: Andy BitOff

[Следующий вопрос >>] [Список вопросов]

Отвечает Sensey

Добрый день, Andy BitOff!
Ну я тоже подписан на эту рассылку...
Я думал ты серьезно спрашиваешь...


Ответ отправлен: 02.07.2002, 15:08
Отправитель: Sensey


 Вопрос № 607

Спасибо Всем, кто постарался ответить на мой вопрос (599), но у меня все равно не получается. Поэтому уточняю вопрос. Работаю я с Borland Tasm 5.0, в командной строке набираю:
"tasm /zi MyPrg.asm , , ," и смотрю, что сформировалось в файле MyPrg.lst. В MyPrg.asm задаю макрос, приведенный в приложении. В листинге ожидается, согласно всем учебникам, push ax ... push dx. А получается 4 раза push rgx. Если написать push &rg x, то получается push a x ... push d x.
Такое впечатление, что почему-то директива & одновременно не работает как указатель и как знак конкатенации. Не пойму почему.


Приложение:


Вопрос отправлен: 02.07.2002, 14:59
Отправитель: АлекСандр (abeh@kfk.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Sensey

Приветствую Вас, АлекСандр!
Попробуй
ffff macro
irpc rg,
push &rg&x
endm
endm

Если надо описание из книги - пришли персональный вопрос, оотсканирую...



Ответ отправлен: 02.07.2002, 15:18
Отправитель: Sensey


Отвечает Ayl

Доброе время суток, АлекСандр!
И правильно, что не работает.
Если просто в тексте программы набирать, то тогда надо писать push rg&x.
А вот когда это оформляется в виде макроса, то знак амперсанда нужно повторить два раза. Первый будет "снят" макросом, а второй непосредственно irpc.

Приложение:

Ответ отправлен: 02.07.2002, 15:39
Отправитель: Ayl


Отвечает Spike

Доброе время суток, АлекСандр!
У тебя ошибка в макросе, нужно сделать так:
ffff macro
irpc rg,
push rg&&x
endm
endm
Первый амперсанд заменяет RG на A,B,C,D, а второй соединяет с X.
Spike.

Ответ отправлен: 02.07.2002, 22:57
Отправитель: Spike


 Вопрос № 608

Здравствуйте,уважаемые эксперты. У меня такой вопрос...
При создании EXE - файла необходимо указывать модели памяти.
Опишите, пожалуйста, хотя бы самые основные особенности моделей.
Заранее благодарен!



Вопрос отправлен: 02.07.2002, 16:59
Отправитель: Dm

[Следующий вопрос >>] [Список вопросов]

Отвечает Ayl

Добрый день, Dm!
Ну, не только экзешников...
А моделей памяти для программ под DOS существует всего 6:
1. TINY - единственная модель, позволяющая создавать программы типа COM. Характеризуется тем, что все объекты программы (код, данные и стек) занимают один общий сегмент. Что не мешает в самой программе использовать всю доступную память.
2. SMALL - в программе допускается формирование одного сегмента для кода, одного для данных и одного для стека.
3. COMPACT - модель памяти, в которой можно создать только один сегмент кода и несколько сегментов данных. (Возможно, я путаю ее со следующей моделью, но не суть важно).
4. MEDIUN - в отличии от предыдущей, может быть несколько сегментов кода и один сегмент данных.
5. LARGE - нет ограничений на количество сегментов кода и данных. Программы на Borland Pascal компилируются именно в этой модели памяти.
6. HUGE - тоже самое, что и LARGE, только дальние указатели представляются в нормализованном виде (смещение от 0 до 15), что исключает некоторые ошибки при работе с памятью, которые возможны в модели LARGE.


Ответ отправлен: 02.07.2002, 17:30
Отправитель: Ayl


Отвечает Shal

Доброе время суток, Dm!
Для exe используются сл.модели:
.small(код программы и код данных находятся в разных сегментах данных),.hugeб.large(и код и данные могут занимать несколько сегментов),.medium(код-в нескольких сегментах, а данные толкь в одном)
Для com используются только .tiny(код программы и код данных находятся в одном сегементе).


Ответ отправлен: 02.07.2002, 20:44
Отправитель: Shal


Отвечает Spike

Приветствую Вас, Dm!
TINY - код, данные и стек размещаются в одном и том же сегменте размером до 64Кб;
SMALL - код размещается в одном сегменте, а данные и стек в другом;
COMPACT - код размещается в одном сегменте, а для данных могут использоваться несколько сегментов, для обращения к данным нужно указывать сегмент и смещение (данные дальнего типа);
MEDIUM - код размещается в нескольких сегментах, а данные в одном, для вызова процедур используется тип FAR;
LARGE и HUGE - и код и данные могут занимать несколько сегментов;
FLAT - то же, что и TINY, но используются 32-битные сегменты, так называемая "плоская" модель памяти;
Spike.

Ответ отправлен: 02.07.2002, 22:57
Отправитель: Spike


Отвечает kvINT

Доброе время суток, Dm!
tiny - код и данные объединены в одну группу. Для создания прогамм .com
small - код в одном сегменте, данные объединены в одну группу. Для большинства программ на асме.
medium - код занимает несколько сегментов, по одному на каждый объединяемый программный модуль. Данные в одной группе, ссылки на них near.
compact - код в одном сегменте, ссылки на данные far.
large - код в нескольких сегментах, ссылки на данныу far.
flat - код и данные в одном 32-битном сегменте(плоская модель памяти)

Ответ отправлен: 03.07.2002, 18:35
Отправитель: kvINT


Отвечает Александр

Приветствую Вас, Dm!
.tiny - близкие вызовы, близкие данные, вся программа вместе с данными ограничена единственным сегментом. Используется для com-файлов.
.small - близкие вызовы, близкие данные, для кода и данных различные сегменты.
.large
.huge
.flat - плоская модель, она и в африке плоская. Используется в Windows. Сегменты как таковые отсутствуют. Программируется в защищённом режиме...


Ответ отправлен: 05.07.2002, 15:56
Отправитель: Александр


 Вопрос № 609

Дополнение к вопросу №594. Напомню его содержание:Привет всем экспертам! Помогите пожалуйста. Я сделал простенькую програмульку которая читает файл текстовой) и выводит его на экран. Все было бы хорошо, но только вот 0Dh,0Ah так портит мне жизнь :) Если просто текст выводить то все нормально получаеться. А вот если форматированый (я умею ввиду с 0Ah,0Dh) то проблемка. С 0Ah можно еще разобраться просто вывести на экран пробел, а вот с переводом строки я не знаю что делать. Помогите что надо сделать?
Теперь само дополнение. Спасибо эксперту Ayl за ответ, но се равно у меня ничего не получаеться, для 2 строк в файле все идет ладком, а для 3 уже 3 затирает 2. Надо будет еще подумать над этим. Если есть, черкни ответик.
2 kvINT: Вы хоть сырец смотрели. Я же использую ПРЯМОЙ ВЫВОД на экран. Т.е все 13,10 будут отражены на экране. Можно просто вместо их ничего не выводить, но мне хочеться придать тексту форматированость. А использовать int 29, f.0eh/int 10 это не то что я хочу. Если их использовать, то текст и будет выведен так как он есть с переводом строки и т.д А мне хочеться это сделать вручную.
2 BrokenSword: Я то понял что я написал. Я имел в виду, что при встречи в тексте Oah,0dh мести ностки и прямоугольничка вывести пробел на экран. Вот и все %)


Приложение:


Вопрос отправлен: 02.07.2002, 18:49
Отправитель: Andy

[Следующий вопрос >>] [Список вопросов]

Отвечает Ayl

Здравствуйте, Andy!
Ты сам-то понял, что написал:
"Я же использую ПРЯМОЙ ВЫВОД на экран. Т.е все 13,10 будут отражены на экране. Можно просто вместо их ничего не выводить, но мне хочеться придать тексту форматированость. А использовать int 29, f.0eh/int 10 это не то что я хочу. Если их использовать, то текст и будет выведен так как он есть с переводом строки и т.д А мне хочеться это сделать вручную."?
Что ты хочешь? Сам сгенерировать перевод строки? Или по-новому сыорматировать текст, не взирая на то, как он сохранен? Или еще что-то? Причем здесь пробел вместо кодов CR и LF?
По поводу того, как перейти на новую строку я тебе написал. Только не забудь там обновить адрес начала строки в видеобуфере. Тогда и с кодом CR проблем не будет.
А по поводу того, что у тебя 3-я строка затирает 2-ю... Ну, тут либо ты не корректируешь адрес начала строки после кода LF, либо у тебя вторая строка больше 80-ти символов, а ты этого не учел.
На самом деле, адрес начала строки можно вычислить и по текущему значению указателя видеобуфера. Но мне что-то простой алгоритм не придумать :-( Может, кто из экспертов подскажет?
А если ты просто вместо них хочешь пробел вывести - так вообще никаких проблем нет. Определяешь, что это твой код - и выводишь...


Ответ отправлен: 03.07.2002, 11:46
Отправитель: Ayl


Отвечает Guess Who

Доброе время суток, Andy!
Вот, накидал на скорую руку. Программа не юзает досовских функций и выводит файл на экран, даже с форматированием, но только при куче условий(сами догадайтесь, каких:)) остальное додумайте сами. Я вроде как идею подал.:) Если не разберетесь, то пишите(хотя там все просто).

Приложение:

Ответ отправлен: 03.07.2002, 02:05
Отправитель: Guess Who


 Вопрос № 610

Здравствуйте экспкрты!
Помогите пожалуйста найти и решить ошибки в этой программке(см.ниже)
PS
Пожалуйста объясните подробно строки отмеченные знаком '?'(а то я знаю что так писать надо,но почему).
Заранее Всем ОГРОМНОЕ спасибо!


Приложение:


Вопрос отправлен: 02.07.2002, 19:01
Отправитель: R@ptor (Spinosaur@narod.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает masquer

Приветствую Вас, R@ptor!
mov Handle,ax
mov bx,ax
mov ah,3fh
mov cx,0FF00h ; - сколько прочитать байт хочешь
mov dx,offset Buffer ; - адрес, куда попадут прочитанные байты
int 21h
mov ah,3eh
mov bx,Handle ; без этого можно обойтись, там и так хендл остался
int 21h
mov dx,offset ok
exit:
mov ah,9h
int 21h
int 20h
Error:
mov dx,offset mess
jmp exit
Handle dw 0 ; хранилище (переменная) размером со слово
ok db 'load.$'
mess db 'Not load.$'
File db 'command.com', 0 ;
buffer db 65280 dup(?) ; сам буфер, можно так

Ответ отправлен: 02.07.2002, 20:13
Отправитель: masquer


Отвечает Broken Sword

Здравствуйте, R@ptor!
"...знаю что так писать надо, но почему"
мда. интересно конечно.
Ошибки:
1. command.com не обязательно должен валяться в корне, его хватает и в windows, а у некоторых (у меня) вообще нет )
2. какие то лишние дерганья. Например, вся конструкция
;------------------------------------
jc error
...
exit:
mov ah,9h
int 21h
...
error:
mov dx,offset mess
jmp exit
;------------------------------------
легко заменяется на
mov dx,offset mess
jc exit
...
exit:
mov ah,9h
int 21h
или еще - значение bx после чтения из файла не меняется, поэтому манипуляции и поползновения с handle вообще излишни.
3. К чему ты влепил после command.com восклицательный знак? до него никогда дело не дойдет все равно.
Теперь насчет знаков вопросов (по-порядку):
1.mov cx,0FF00h ; сколько байт читать из файла в оперативу
2.mov dx,offset Buffer ; а вот это как раз КУДА читать те самые FF00h байт из файла
3.mov bx,Handle ; bx должен содержать хэндл файла, но опять же ввод переменной - излишество и непозволительная роскошь. bx не меняет в данном случае свое значение
4. handle - и есть хэндл файла, как еще сказать можно?
5. command.com - это наверно то что ты хочешь открыть для чтения
6. buffer equ $ - с этого места в память лягут FF00h байт из command.com


Ответ отправлен: 02.07.2002, 22:34
Отправитель: Broken Sword


Отвечает Shal

Здравствуйте, R@ptor!
1.buffer equ $ ;?
Директива equ присваивает метке значение.$-текущий адрес.
2.File db 'command.com,0,$!' ;?
Определяем файл в памяти, с которым мы будем работать.
3.mov ah,3fh
mov cx,0FF00h ;?
mov dx,offset Buffer ;?
int 21h
Это ввод с клавиатуры в буфер.mov dx,offset Buffer - помещаем в регистр dx смещение метки buffer относительно начала сегмента данных.


Ответ отправлен: 02.07.2002, 20:44
Отправитель: Shal


Отвечает Guess Who

Здравствуйте, R@ptor!
В программе нет ничего сложного, просто надо было посмотреть что каждая функция делает и какие значения куда возвращает и что требует для работы. Скачайте этот
справочник, он на анлийском, но там есть все ответы на ваш вопрос.


Приложение:

Ответ отправлен: 02.07.2002, 22:58
Отправитель: Guess Who


Отвечает Spike

Здравствуйте, R@ptor!
Я не запускал эту прогу на выполнение, но если теоретически, то в строке с ошибкой (см. приложение) должно быть так: buffer db ?.
Spike.


Приложение:

Ответ отправлен: 02.07.2002, 23:21
Отправитель: Spike


Отвечает Александр

Приветствую Вас, R@ptor!
mov cx,0FF00h ;Ну мы говорим чтобы он попытался загрузить из файла 64000 байт.
mov dx,offset Buffer ;Ну а куда грузить-то будем? - В буфер!
mov bx,Handle ; Handle - он же дескриптор файла, его номер по которому его помнит операционная система. Мы его запомнили когда файл открывали.
Handle dw 0 ; Handle - он же дескриптор файла, на самом деле просто число длинной в слово.
Ну из возможных ошибок - это использование для выхода из программы функции int 20h. Правильнее использовать
mov Ah,4Ch
int 21h
При компиляци без параметров будет орать о том что у тебя используются forward reference, что лечится включением как минимум 2-х проходной компиляции( параметр -m2). Я имею в виду TASM.

Ответ отправлен: 05.07.2002, 15:56
Отправитель: Александр



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (51)
C / C++ (31)
Perl (9)
Delphi (14)
Pascal (27)
Basic / VBA (12)
Java / JavaScript (6)
PHP (6)
MySQL / MSSQL (8)
Пользователю
Windows 95/98/Me (44)
Windows NT/2000/XP (32)
"Железо" (38)
Поиск информации (18)
Администратору
Windows NT/2000/XP (17)
Linux / Unix (14)
Юристу
Гражданское право (6)
Семейное право (3)
Трудовое право (5)
КоАП (2)

Отправить вопрос всем экспертам выбранной рассылки.




be number one Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное