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

Ассемблер? Это просто! Учимся программировать (FAQ)


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Ассемблер? Это просто! Учимся программировать (FAQ)
______________________________________

Выпуск N 080

Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"

Дата выхода: 2001-09-01


Вопрос №736

Экспертам.
Изучаю ассемблер только месяц и возник такой
небольшой вопросик.
Сделал рисунок. Затем захотел переместить его в центр.
Пришлось увеличивать координаты. Напр:

было
mov cx,3

после каждой подобной координаты добавил
add cx,number

Был ли более экономный способ?
Можно ли эти две команды записать одной строкой?

С уважением ...

Ответ

Здравствуйте, Alex12!
Дык сразу пиши mov cx,{3+number}, где вместо {3+n}- число. Странный какой-то вопрос... А может я его и не понял...


Отправил эксперт: DM
Эксперт отправил ответов (всего): 7

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №737

Экспертам.
Спасибо, ребята!
Вылечился. Второй был SCAM32.EXE.

Тогда в нагрузку еще вопрос (может кто знает).
При выключении комп проверяет диск А:
С чем это может быть связано?

С уважением ...

Ответ

Здравствуйте, Alex12!
Обычно это делает антивирус, чтобы проверить, есть ли в загрузочном секторе дискеты вирус. Т.е. чтобы не было "оставил дискету в драйве - загрузился - гипс". Но в твоём случае это может быть черти что...


Отправил эксперт: DM
Эксперт отправил ответов (всего): 8

Экспертная группа: Пользовательская работа с Windows

Вопрос №736

Экспертам.
Изучаю ассемблер только месяц и возник такой
небольшой вопросик.
Сделал рисунок. Затем захотел переместить его в центр.
Пришлось увеличивать координаты. Напр:

было
mov cx,3

после каждой подобной координаты добавил
add cx,number

Был ли более экономный способ?
Можно ли эти две команды записать одной строкой?

С уважением ...

Ответ

Здравствуйте, Alex12!
Чего то я не полностью втыкнулся в твой вопрос, но одно сказать точно могу:)
при рисовании не используй прерывание биос, так как это занимает много времени, копируй сразу в видеопамять, и перемещай соответственно, вот тогда получится действительно быстро.., ну а точнее по поводу твоего вопроса смогу сказать, если прогу увижу..


Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 58

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №730

Здравствуйте эксперты.
У меня такой вопрос: Как можно искать файлы не только в заданной папке, с помощью ф-ций 4Eh и 4Fh но и например в на диске C со всеми вложенными папками.

Ответ

Здравствуйте, Алексей!
Чувак, ты знаешь что есть рекурсия? Классика. (Коли не знаешь слушай сюда, пише процедуру ищущую файлы в нужном каталоге, после этого ищешь каталоги в данном каталоге, нашел - заходишь и выполняешь процедуру для данного каталога (типа рекурсия если не знаешь это когда ты процедура вызывается сама из себя).


Отправил эксперт: Painbringer
Эксперт отправил ответов (всего): 77

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №733

Привет коллеги!
Вопрос по Exsel
Есть два документа
Слышал, но не знаю как, что
Можно сравнить эти документы по столбцу А и ести ячейки в столбце А совпадают, то обновить соответствующие строки из второго документа
Для примера-обновление цен на комплектующие

Ответ

Здравствуйте, Sensey!
Попробуй слить документы в один.


Отправил эксперт: Painbringer
Эксперт отправил ответов (всего): 78

Экспертная группа: Пользовательская работа с Windows

Вопрос №737

Экспертам.
Спасибо, ребята!
Вылечился. Второй был SCAM32.EXE.

Тогда в нагрузку еще вопрос (может кто знает).
При выключении комп проверяет диск А:
С чем это может быть связано?

С уважением ...

Ответ

Здравствуйте, Alex12!
ХреНортон антивирус стоит?


Отправил эксперт: Painbringer
Эксперт отправил ответов (всего): 81

Экспертная группа: Пользовательская работа с Windows

Вопрос №737

Экспертам.
Спасибо, ребята!
Вылечился. Второй был SCAM32.EXE.

Тогда в нагрузку еще вопрос (может кто знает).
При выключении комп проверяет диск А:
С чем это может быть связано?

С уважением ...

Ответ

Здравствуйте, Alex12!

Раньше были дисководы на 40 и 80 дорожек. И, чтобы определить,
сколько дорожек поддерживает дисковод, BIOS пытается перейти на 80-ю
дорожку, а затем возвращает головку на нулевую.

Нынче, все дисководы поддерживают 80 дорожек и эта фича не требуется..
Чтобы её отключить смотри BIOS Setup..
Ищи что-нибудь вроде Bootup Floppy Seek. Должно быть Off.

Или, второй вариант, что BIOS ищет в первом флопе загрузочную дискету.
Это тоже последствия времён, когда не было ни винтов, ни загрузочных
CD-ROM'ов (и CD-ROM'ов вообще :( ).
Чтобы это отключить ищи либо First Boot Device, либо
Boot sequence в BIOS Setup.


Отправил эксперт: Nik
Эксперт отправил ответов (всего): 89

Экспертная группа: Пользовательская работа с Windows

Вопрос №739

Где трабл (см. программу)? Компилируется нормально. Из командной строки запускается тоже нормально. Если же запустить из FAR Manager'а писать можно будет только до Enter'а. Жмешь Enter и все! Система виснет НАМЕРТВО. Причем второй раз я резидент не запускаю (курсор перемещаю на другой файл).

Ответ

Здравствуйте, Snake!
Во-первых, ты забыл прерывания разрешить, вообще удивляюсь, как она даже запускалась, во-вторых намного эффективнее использовать для резидентов ком-проги, меньше в памяти места занимают, а в третьих лучше пользоваться прерываниями дос для определения адреса обработчика..


Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 59

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №738

Ну вот.. Опять я :-)

Вот какой вопрос: купил я себе TV-Tuner. Поставил драва,
перезагрузился и... "Программа msgsrv32 выполнила недопустимую
операцию и будет закрыта". Далее винды не грузятся.. Как я
понял, msgsrv32 инициализирует девайсы. (Винды 98 SE)

Так вот... Гружусь в Safe-моде, открывают список девайсов и...
у меня появилось 2 контроллЈра DMA, 4 контроллЈра ACPI IRQ Holding Steer, 3 винта (физически, он у меня один), 2 клавиатуры и 3 монитора (2 конфликтующих Default Monitor, и
не конфликтующий с ними Samsung SyncMaster 750s). После их
удаления и перезагрузки винды находят эти же девайсы в
полном объеме (см. выше). Переустановка не помогла. Попробовал
поставить WinME - не помогло :-(
А вот в Win2K всЈ работает идеально!
Единственно, иногда программа AverTV "выполняет недопустимую
операцию", но это происходит не раньше раза в неделю..

Система Pentium III, мамка Abit BE6-II, чипсет Intel 440BX..
Пробованые винды -> Win98 SE, WinME, Win2K.
TV Tuner - AverMedia TV Studio (PCI), видюха nVidia GeForce2 MX.

Может кто знает, чего с этим делать??
Или мне теперь до смерти сидеть под 2k ??

С уважением, эксперт Nik.

Ответ

Здравствуйте Nik! Мой ответ кому-то может показаться глупым и несколько неуместным, но раз вообще никто не отвечает, то я постараюсь помочь хоть чем-то.
1. Переткни свой TV-Tuner из одного PCI в другой; с видеокартой я подобным образом решил себе вопрос года два назад (она с VooDoo I хотела эээээ.... иметь сношения только когда первая была установлена в третий PCI, а вуда соответственно в первый) - такая композиция не вызывала никаких конфликтов и все было ОК.
2. Если первый метод не помог (80% что так и есть) зайди в BIOS, пошарься там, найди в меню PNP PCI что то типа Auto config и поставь его на мануал. Эта фича кода-то мне раздуплила мой ESS 1868 и у него наконец прорезало голосок.
3. Ближе к теме. Подобные расстройства у виндовоза (именно 98), и именно несколько мониторов, жестких дисков и т.п. наблюдались исключительно в версии, которая вышла раньше официальной на 2 месяца. Щас самая последняя что я встречал 4.2222а, проверь, может у тебя один из таких "эксклюзивных" 98 и стоял, хотя ты ясно написал SE...
4. Поедь на фирму и поменяй его на другой тюнер (бери с ФМ радио сразу), - пока не поздно!
5. А вообще то сиди ка ты на Win2k, а до смерти не выйдет по любому, т.к. вот-вот появиться Windows 2002...(хаха); вот будет у меня тачка чуть помощнее (памяти еще 128 хотя б добавлю) и я к тебе с удовольствием присоединюсь.


Отправил эксперт: Broken Sword (http://www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 119

Экспертная группа: Пользовательская работа с Windows

Вопрос №739

Где трабл (см. программу)? Компилируется нормально. Из командной строки запускается тоже нормально. Если же запустить из FAR Manager'а писать можно будет только до Enter'а. Жмешь Enter и все! Система виснет НАМЕРТВО. Причем второй раз я резидент не запускаю (курсор перемещаю на другой файл).

Ответ

Здравствуйте, Snake!
Да ты классик! Первое, на что я наткнулся - ты запрещаешь прерывания и их так и не восстанавливаешь. Да еще в бреду вызываешь. Я под виндами делал такое всего за 3 байта...
Второе: в old_int_21h пишешь вместо смещение-сегмент всё наоборот.
Замечания: стек великоват, при установке прерываний сохранять флаги вовсе не обязательно, зачем для резидента делать EXE-шник?
Программа прилагается.

Приложение:


Отправил эксперт: DM
Эксперт отправил ответов (всего): 9

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №742

Уважаемые эксперты, не могли бы мне подробнее рассказать об
логических операторах OR, AND,XOR. Я не понимаю куда приплюсовываются биты при OR и отнимаются при AND.
НАПРИМЕР вот в этих строчках:
mov ax,1010b

or ax,1111b

Теперь AX=1111b. Т.о. мы включили (установили) первые четыре бита.
ПО подробнее об том что ниже:

1 OR 1 = 1 ??????????
1 OR 0 = 1 ?????????
0 OR 0 = 0 ????????

Ответ

Здравствуйте, Speedy Gonsalez!
Просто запомни
Логическое И==>Если оба операнда истина то истина, иначе ложь
1 and 1 = 1
иначе всегда 0
--------
Логическое ИЛИ==>Если хоть один оператор истина то истина, иначе ложь
0 or 0 = 0
иначе всегда 1
---------
Логическое Исключающее ИЛИ ==>Если операнды различны то истина, иначе ложь
1 xor 0 = 1
0 xor 1 = 1
0 xor 0 = 0
1 xor 1 = 0
дважды xor=>в исходное
применяется так
Установить бит
ax or бит
Сбросить бит
ax and (not бит)


Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 102

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №738

Ну вот.. Опять я :-)

Вот какой вопрос: купил я себе TV-Tuner. Поставил драва,
перезагрузился и... "Программа msgsrv32 выполнила недопустимую
операцию и будет закрыта". Далее винды не грузятся.. Как я
понял, msgsrv32 инициализирует девайсы. (Винды 98 SE)

Так вот... Гружусь в Safe-моде, открывают список девайсов и...
у меня появилось 2 контроллЈра DMA, 4 контроллЈра ACPI IRQ Holding Steer, 3 винта (физически, он у меня один), 2 клавиатуры и 3 монитора (2 конфликтующих Default Monitor, и
не конфликтующий с ними Samsung SyncMaster 750s). После их
удаления и перезагрузки винды находят эти же девайсы в
полном объеме (см. выше). Переустановка не помогла. Попробовал
поставить WinME - не помогло :-(
А вот в Win2K всЈ работает идеально!
Единственно, иногда программа AverTV "выполняет недопустимую
операцию", но это происходит не раньше раза в неделю..

Система Pentium III, мамка Abit BE6-II, чипсет Intel 440BX..
Пробованые винды -> Win98 SE, WinME, Win2K.
TV Tuner - AverMedia TV Studio (PCI), видюха nVidia GeForce2 MX.

Может кто знает, чего с этим делать??
Или мне теперь до смерти сидеть под 2k ??

С уважением, эксперт Nik.

Ответ

Здравствуйте, Nik!
ИМХО ты сам и ответил :()
Хотя попробуй найти дрОва посвежее на сайте производителя,
да и вообще можно поставить 2 ОС: 98 и 2000...


Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 103

Экспертная группа: Пользовательская работа с Windows

Вопрос №742

Уважаемые эксперты, не могли бы мне подробнее рассказать об
логических операторах OR, AND,XOR. Я не понимаю куда приплюсовываются биты при OR и отнимаются при AND.
НАПРИМЕР вот в этих строчках:
mov ax,1010b

or ax,1111b

Теперь AX=1111b. Т.о. мы включили (установили) первые четыре бита.
ПО подробнее об том что ниже:

1 OR 1 = 1 ??????????
1 OR 0 = 1 ?????????
0 OR 0 = 0 ????????

Ответ

Здравствуйте, Speedy Gonsalez!
Друг,это написано в любом простом учебнике на PC!
там приводится таблица!!!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 20

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №741

Здравствуйте эксперты по WINdows!!! Вопрос следующий:
У меня две OS WIN98 & WIN2000. Соответсвенно они загружались
из "Выбирателя систем", который установил автоматически при
инсталляции WIN2000. Всё это прописалось в BOOT.INI.
Но вот недавно, мне пришлось восстановить кое-какие системные файл WIN98 с помощью загр. дискеты фалом SYS.com
После этого пропало это меню выбора OS и автоматически сразу
загружается WIN98, т.е. пропал доступ к WIN2000.
Вопрос: Как восстановить доступ к WIN2000, соответсвенно, чтобы вновь появлялось это меню выбора?

Ответ

Здравствуйте, Speedy Gonsalez!
windows настолько нестабильная система,что..sys.com видимо несовместим с W2000
Советую- только W98 SE 4.10.222
А доступ к W2000...необходимо либо поэксперементировать с реестром,либо в Config.sys и autoexec.bat прописать менюху...
Это написано в книге Фигурнов IBM для пользователя!(издание 6-7..)


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 21

Экспертная группа: Пользовательская работа с Windows

Вопрос №740

Здравствуйте.
Экспертам.
Рисовал все "вручную" (циклов мало), поэтому прога большая.
Но принцип вот он - см.прогу.
Задаешь смещения xxx и yyy и рисунок сдвигается.

Orlando - на счет видеопамяти пока ничего не соображаю.
Ну может покажете примерчик, а то действительно,
больно долго это все вычерчивается.

И еще, мне кажется, что программа немного некоректна.
Нужно ли в начале вычислять Get video mode, а в конце
восстанавливать?

С уважением Alex12

Ответ

Здравствуйте, Alex12!
Друг,не пиши так точку на экран!-просто глупо!!!(BIOS- тормоз)
В ближайшее время я тебе вышлю нормальный sample-
напиши поподробнее что он должен делать!!!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 22

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №739

Где трабл (см. программу)? Компилируется нормально. Из командной строки запускается тоже нормально. Если же запустить из FAR Manager'а писать можно будет только до Enter'а. Жмешь Enter и все! Система виснет НАМЕРТВО. Причем второй раз я резидент не запускаю (курсор перемещаю на другой файл).

Ответ

Здравствуйте, Snake!
времени нет!!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 23

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №738

Ну вот.. Опять я :-)

Вот какой вопрос: купил я себе TV-Tuner. Поставил драва,
перезагрузился и... "Программа msgsrv32 выполнила недопустимую
операцию и будет закрыта". Далее винды не грузятся.. Как я
понял, msgsrv32 инициализирует девайсы. (Винды 98 SE)

Так вот... Гружусь в Safe-моде, открывают список девайсов и...
у меня появилось 2 контроллЈра DMA, 4 контроллЈра ACPI IRQ Holding Steer, 3 винта (физически, он у меня один), 2 клавиатуры и 3 монитора (2 конфликтующих Default Monitor, и
не конфликтующий с ними Samsung SyncMaster 750s). После их
удаления и перезагрузки винды находят эти же девайсы в
полном объеме (см. выше). Переустановка не помогла. Попробовал
поставить WinME - не помогло :-(
А вот в Win2K всЈ работает идеально!
Единственно, иногда программа AverTV "выполняет недопустимую
операцию", но это происходит не раньше раза в неделю..

Система Pentium III, мамка Abit BE6-II, чипсет Intel 440BX..
Пробованые винды -> Win98 SE, WinME, Win2K.
TV Tuner - AverMedia TV Studio (PCI), видюха nVidia GeForce2 MX.

Может кто знает, чего с этим делать??
Или мне теперь до смерти сидеть под 2k ??

С уважением, эксперт Nik.

Ответ

Здравствуйте, Nik!
format C:
win2K beta
/...


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 24

Экспертная группа: Пользовательская работа с Windows

Вопрос №733

Привет коллеги!
Вопрос по Exsel
Есть два документа
Слышал, но не знаю как, что
Можно сравнить эти документы по столбцу А и ести ячейки в столбце А совпадают, то обновить соответствующие строки из второго документа
Для примера-обновление цен на комплектующие

Ответ

Здравствуйте, Sensey!
Друг- это не по windows!!!
Читай help!(Exel для чайников!)


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 28

Экспертная группа: Пользовательская работа с Windows

Вопрос №732

Уважаемые эксперты!

Большое спасибо всем ответившим на вопрос 689-690.
Замена mov ax, 3Fh на mov ah, 3Fh помогла радикально! В уроке 009 приведена строка mov ax, 3F00h; чем это лучше? А если так: mov ah, 3Fh; mov al, 00 ?

Однако с выводом на экран содержимого тестируемого файла (y.dat; длина 400 байт, т.е. 5 экранных строк по 80 каких-либо символов) не получается: сначала выводится примерно около половины файла правильно, потом появляются символы из сегмента данных y. еxe и после них продолжается вывод символов из файла y.dat, но только опять(!?) с его начала.

В чЈм тут дело? Как правильно объявить Buffer? Я пробовал 4 варианта (см. прилагаемый листинг) и только <2> выводит строку на экран, да и то неправильно.

Может быть, дело в значении регистра ds? Достаточно ли одной инициализации ds (mov ax, @data; mov ds, ax) в начале программы?

Я заметил, что если строку Buffer db 1024 dup (?) поместить не в конце сегмента данных, то exe-файл увеличивается на 1024 байта, причЈм эти байты - одни точки (по F3 - вьюер). А если мне надо объявить, например, 4 буфера по 32 Кб, то получается, что ехе-файл увеличится на 128 Кб бесполезных точек? Как этого избежать?

Вопрос к Broken Sword. Ответ по п. 5 я не понимаю. Почему должны затереться 8 байт кода и переменная Handle? Мне казалось, что ничего такого не должно происходить. И насчЈт экономии 10 байт тоже не понятно.
Прилагаю всю программу целиком: 9 файлов, главный называется "y.asm".

Спасибо!

Ответ

Здравствуйте, Vasil!
Извини друг,столько времени нет...
mov ax,3F00h по смыслу = mov ah,3fh mov al,0
но вроде бы побыстрее!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 29

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №730

Здравствуйте эксперты.
У меня такой вопрос: Как можно искать файлы не только в заданной папке, с помощью ф-ций 4Eh и 4Fh но и например в на диске C со всеми вложенными папками.

Ответ

Здравствуйте, Алексей!
Читай рассылку по низкоуровнему програмированию на ASM!


Отправил эксперт: Michael
Эксперт отправил ответов (всего): 30

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Подписаться на рассылки

Рассылки Subscribe.Ru
Ассемблер? Это просто! Учимся программировать
Ассемблер? Это просто! Учимся программировать (FAQ)

Форма подачи вопроса

ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Дополнения к вопросам, на которые эксперт уже ответил НЕ следует направлять ведущему рассылки (я не успеваю!). Просто скомбинируйте первый вопрос и дополнение к нему, а затем заново отправьте его, используя приведенную ниже форму!

Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!


Ваше имя *:

Ваш e-mail *:

Подгруппы:

Вопрос *:

Прилагаемая программа (если необходимо):


Регистрация в качестве эксперта

Архив выпусков


Ведущий рассылки,

Калашников Олег: Assembler@Kalashnikoff.ru
ICQ No.:
68951340
URL сайта подписчиков: http://www.Kalashnikoff.ru

______________

По вопросам сотрудничества, рекламы и спонсорства обращайтесь:

  1. Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
  2. Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
  3. Издание книги (спонсорство): Sponsor@Kalashnikoff.ru

Рассылка 'Ассемблер? Это просто! Учимся программировать (FAQ)' Рассылка 'Ассемблер? Это просто! Учимся программировать'


(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав.


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

В избранное