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

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


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

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

Выпуск N 086

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

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


Вопрос №790

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

Я когда-то задавал вопрос по поводу неправильной работы 35h-й ф-ии.
А именно : почему значение в es:bx не совпадает со значением в
0000:[21h*4], причем именно 21h-ого прерывания - с остальными всё
работает нормально. Так вот , недавно я попробовал стандартный
debug.exe вместо AFD - и всё заработало! В Turbo debugger'е то же
нифига не работает. У меня что версии глючные (все программы с этого
сайта) ? Если да то где найти нормальные ? И вообще порекомендуйте
какой-нибудь нормальный отладчик под ЧИСТЫЙ DOS.

И попутно - почему MASM не работает под DOS,тоже довольно чистым :-),
пишет : 'Cannot execute DosXNT.exe - not enough core'

заранее большое спасибо, Elron.

Ответ

Уважаемый Elron!
Чето мне ваш вопрос не давал покоя, я и решил проверить...
Запустите пожалуйста предлагаемую небольшую прогу в ЛЮБОМ ОТЛАДЧИКЕ, и после выпонения mov cx,word ptr ds:[21h*4]+2 скажите честно глядя всем экспертам в глаза, что ax не равно bx, а cx не равен es!!! Видно, вы чето нетого в самом коде накрутили, а данный пример наглядно все иллюстрирует: получаем адрес обработчика int 21h в ES:BX, затем топорным методом, помещая в ds 0 (нулевой сегмент), берем два значения по адресам 21h*4 и 21h*4+2, по вашему они не совпадают с ранее полученными с пом. 35 ф-ции????!!!!! Попробуйте поменять в таком случае разрешение на мониторе - может поможет... ;(
а на "этом сайте" все проги неоднократно проверенны и у всех почемуто работают!!!

Приложение:


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

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

Вопрос №785

Привет всем.
У меня имеются вопросы к подгруппе "Общие вопросы по асму под win32", но
отправив вопрос в эту подгруппу он ушЈл в бермудский треугольник. Так вот
вопрос ко всем - есть в этой подгруппе кто-нибудь ? И если есть, то вопрос см в
приложении. Спасибо.
С уважением, Макс.

Ответ

Здравствуйте, Макс!
; call DeleteFileA ;если убрать " ; " , то в файл ничего не пишется
а вам не кажется что выпросто после записи в файл, удаляете из него это строкой


Отправил эксперт: АлександрМ
Эксперт отправил ответов (всего): 9

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

Вопрос №791

Уважаемые эксперты.
Иду на пуск-завершение работы-выключить компьютер
компюетер вроде выключается, экран гаснет а затем
снова стартует, выключить иожно только вытянув его из розетки.
В чем дело?
У меня WinME

Ответ

Здравствуйте, Олег!
В реестре HKEY_LOCAL_MASHINE\system\CurentControlSet\control\ShutDdown
есть опция FastReboot посмотри значение...если там 1, измени на 0
....


Отправил эксперт: змей
Эксперт отправил ответов (всего): 19

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

Вопрос №790

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

Я когда-то задавал вопрос по поводу неправильной работы 35h-й ф-ии.
А именно : почему значение в es:bx не совпадает со значением в
0000:[21h*4], причем именно 21h-ого прерывания - с остальными всё
работает нормально. Так вот , недавно я попробовал стандартный
debug.exe вместо AFD - и всё заработало! В Turbo debugger'е то же
нифига не работает. У меня что версии глючные (все программы с этого
сайта) ? Если да то где найти нормальные ? И вообще порекомендуйте
какой-нибудь нормальный отладчик под ЧИСТЫЙ DOS.

И попутно - почему MASM не работает под DOS,тоже довольно чистым :-),
пишет : 'Cannot execute DosXNT.exe - not enough core'

заранее большое спасибо, Elron.

Ответ

Здравствуйте, Elron!
Насчет дебагера: я проверял под Turbo Debaggerом, все работает, скорее всего в нем проблема. Да, он поставляется вместе с С+...
Насчет МАСМ
У тебя же написано при ошибке 'Cannot execute DosXNT.exe'
NT!!! То есть этот масм настроен под работу с расширенной версией Доса
ЗЫ Broken Sword'y. "Серийный номер" винта, который выдает Format, можно взять через прерывание(я уже отвечал както), так вот, он завязан на последнюю дату форматирования


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

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

Вопрос №793

Привет всем!
Обратите пожалуйста внимание на проблему! (прилагается). Данная програмка просто считает до ста, используя прерывание 1 (пошаговый режим). По достижении пятидесяти программа прерывается и выдает сообщение. Проблема в том, что на Celerone она НЕ ПРЕРЫВАЕТСЯ. На 286 все идет отлично.
Еще одно: убираю из подпрограмы Counter вызов процедуры GetCh – все работает и на Celerone. Часовые втыкания в подрограммку GetCh ни к чему не привели – так и не смог понять в чем разница (с точки зрения выполнения) между 286 и РII. Что-то выполняться не успевает что ли?
Очень прошу помочь.
ВНИМАНИЕ! При работе с программкой испоьзовать отладчики и трассировщики проблематично, потому что они сами, практически все, используют прерывание 1 и глючат безбожно (естественно имеется в виду DOS).
P.S. Мои извинения Paintbinger-у! Ничего подобного не имел в виду. Наоборот, последнее сообщение – BEST!!! Перепиши в звуковом - буду наслаждаться:))))))))))))). Только не злоупотребляй, а то уважаемые эксперты скоро с тобой так же разговаривать будут.
А может забить на это программирование на хрен и в панки?????:))
Вал.Ик.

Ответ

Здравствуйте, Вал.Ик.!
Опять старая проблема нереентерабельности(правильно написал?) Дос
Ты вызываешь int 21h 2 раза в пошаговом режиме.
ИМХО проблема в этом
Попробуй переписать без 21 прерывания...


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

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

Вопрос №794

Чем масм 5.0 под дос лучше тасм 2.0
и лучше ли???
И что лучше юзать?
Ведь масм у меня очень маленький и удобный - 3 ф-ла всего?
А тасм можно также обрезать?

Ответ

Здравствуйте, Дмитрий!
Пора бы уже тасмом 5.0 пользоваться или масмом 6.13, если эти два сравнивать, то по дос тасм получше, под виндовоз - масм! А своих динозавров ВЫКИНЬ!
Если три файла, то нифига он не может быть удобным, т.к. прикладных прог, помогающих при разработке нет!
А урезать и тасм также можно, там по-моему 4 файла необходимы для получения *.exe or *.com!


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

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

Вопрос №794

Чем масм 5.0 под дос лучше тасм 2.0
и лучше ли???
И что лучше юзать?
Ведь масм у меня очень маленький и удобный - 3 ф-ла всего?
А тасм можно также обрезать?

Ответ

Здравствуйте, Дмитрий! Во-первых, ни у кого ничего обрезать не нада, все что входит в комплект ТАСМ-а для НАСТОЯЩЕГО программиста представляет особый интерес, конечно для наших с вами прог в 100 строк вполне хватит тасма, тлинка и TD. Все остальное действительно можна резать, но, опять же, чем оно мешает??? винт маленький? Ну examples можешь удалить, если сильно на нервы действуют.
а 5.0 лучше 2.0 хотя бы потому, что он вышел в свет попозжее, и следовательно, некоторые баги 2.0 в нем устранены (во всяком случае хочется на это уповать). А вообще, кто бы что ни говорил, а прога чем позже выпущена, тем она лучше и качественнее (или уж по крайней мере такая же, но чтоб хуже - такого я не знаю, виндов, кстати, тоже касается). Если тебя конкретно интересует 5.0, то вот смотри (переводи сам):

New TASM 5.0 features:
- Enhanced MASM compatibility
- TASM32.EXE Thunk Compiler compatibility for Windows 95 flat thunking.
New Turbo Debugger 5.0 features:
- Dual monitor support under Win95 (TDW: -do, TD32: -vd)
- Debugger support for new C++ language constructs (bool, namespaces, etc.)
- 16-bit debugging support under Windows NT with TDW.EXE

А вообще если у тебя ТАСМ 2.0, то сломя голову его менять на 5.0 не имеет никакого смысла, (по принципу - работает и слава Богу)

p.s. спасиба Sensey


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

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

Вопрос №796

Приветик эксперты!!!
Что ваши выборы Модератора прекратились, или отложили? Ладно собственно вопрос по существу: Недавно капельку грохнулся винт(стол+падение не виновато) ну и появился ненавистный bad :-Е, ну поскольук гарантия на компе висела, пришлось завозить. Буквально через время Х-time, мне дружненько его вернули без злокачественного bad. Мне известно что в современных винтах, существует вроде как резервная область, и соответственно бэд туда и выкинули, я прав? Но каким это образом туда выбрасывается (жилательно не упоминать софт - нелюблю без надобности). И кокой размер этой области?
DM ПОЛУЧИЛ БАЛЫ?
С уважением SATIS

Ответ

Здравствуйте, SATIS!
Лично я про такие области на винтах не слышал. Ты уверен, что тебе вернули тот же винт. Кстати какой фирмы. Насколько мне известно, имеются проблемы с винтами IBM серии DTLA (там какой-то глюк с биосом и ИБМ сама об этом заявляла).
З.Ы. А чё, Майкл то умер...


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

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

Вопрос №794

Чем масм 5.0 под дос лучше тасм 2.0
и лучше ли???
И что лучше юзать?
Ведь масм у меня очень маленький и удобный - 3 ф-ла всего?
А тасм можно также обрезать?

Ответ

Здравствуйте, Дмитрий!
А с чего ты взял что масм лучше тама под досами? Лично я юзаю тасм 5.0. Естетсвенно его тоже можно кастрировать до неприличия:
tasm.exe
tlink.exe
rtm.exe
dpmi16bi.ovl
итого 440 801 байт.


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

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

Вопрос №803

Здраствуйте эксперты!
Зачем нужна папка-Uninstall Information?
Можно ее удалить?

Ответ

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


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

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

Вопрос №789

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

Посоветуйте, пожалуйста, какую-нибудь почтовую службу, где нет такой заморочки с форвардингом, но рассылать одним фильтром можно на много адресов, а не на один.

Заранее благодарю.

Ответ

Здравствуйте, Sqeezer!
Попробуй использовать сервис служб рассылок: subscribe.ru, yahoogroups.com или каких-нибудь других.


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

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

Вопрос №797

Доброе время суток!!!
Блин читаешь, и прямо самого рвет хотяб маленький, скромненький вопросик задать. Например: Довольно хочится услышать как можно подробниее про не реентабельность DOS , довно интересовал вопрос но некак руки недоходили.
Ну как у вас обстаят дела с выбором человека, который будет слидить за порядком в рассылке, хотя уже болие мение налаживается, что несомненно радует. :)

DM приветик , ну и сколько балов получил, за мой прошлый вопрос? ;)
С уважением SATIS

Ответ

Здравствуйте, SATIS!
Не "реентабельность", а реентерабельность!
Вот в двух словах, а вообще вопрос очень обширный и надо читать литературу!Использую любой поисковик, найдешь!
Это связано с тем, что из некоторых обработчиков нельзя вызывать другие обработчика, так как они затирают стек предыдущего обработчика,
что вызывает неработоспособность программы!


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

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

Вопрос №803

Здраствуйте эксперты!
Зачем нужна папка-Uninstall Information?
Можно ее удалить?

Ответ

Здравствуйте, Alex!
Эта папка используется Norton Utilites, поэтому не трогай!


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

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

Вопрос №802

Здраствуйте эксперты!
3-и вопроса:
1)Что дулает оператор Lea и TITLE?
2)Все понятно крому ptr (К примеру:mov dl,byte ptr My_string)?
3)mov ax, 1020=> ah=10 (байт?), al=20 (младший байт?)?
Усли в ax, будет число к примеру 102=> ah=10, al=2?

Ответ

Здравствуйте, Alex!
1.lea аналогичен команде mov ..,offset.., т.е. получает смещение метки или строки с данными! Title - директива для печати твоей проги, параметры всякие!
2.В DL помешается первый байт из строки май_стринг, чо непонятного!
3.Если в ax - 102h, то в ah-01h, а в al-02h!


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

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

Вопрос №802

Здраствуйте эксперты!
3-и вопроса:
1)Что дулает оператор Lea и TITLE?
2)Все понятно крому ptr (К примеру:mov dl,byte ptr My_string)?
3)mov ax, 1020=> ah=10 (байт?), al=20 (младший байт?)?
Усли в ax, будет число к примеру 102=> ah=10, al=2?

Ответ

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

1)LEA (Загрузить эффективный адрес) помещает смещение операнда-источника в памяти (а не его содержимое) в операнд назначения. Операнд-источник должен находиться в памяти, операнд назначения должен быть регистром общего назначения. Эта команда особенно полезна для инициализации регистров ESI(SI) и EDI(DI) перед выполнением команд работы со строками или инициализации регистра EBX(BX) перед командой XLAT.
2)Операция WORD PTR указывает Турбо Ассемблеру, что данный операнд в памяти нужно интерпретировать, как операнд размером в слово, а операция BYTE PTR указывает Турбо Ассемблеру, что данный операнд в памяти нужно интерпретировать, как операнд размером в байт, независимо от его предопределенного размера.
3)Дело в том, что 1020 - число десятичное, в 16-ичной системе счисления это 03FC. Поэтому al=0FCh, ah=03h, ведь в регистры помещается не само десятичное число, а его 16-ичный эквивалент.


Отправил эксперт: Василий
Эксперт отправил ответов (всего): 44

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

Вопрос №800


Здравствуйте!
Уважаемые эксперты объястните "как мне обратиться к
ячейке памяти в защищенном режиме" т.е. у меня программа написанная на асме (win32, GUI) и я
хочу обратиться к "индикатору" т.е. 0000:0417 (В реальном режиме получалось,
а в защищЈнном это нужно сначала как-то объявить????)
Подскажите как это сделать!!! (ПЛИЗ)....... или дайте линк на какой-то
форум, где это можно спросить ;)

Ответ

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

В общем так, я тебе вышлю доку. Почитаешь, там все написано вполне доступно. Как прочтешь, пиши. Вышлю какие-нибудь example'ы.


Отправил эксперт: Василий
Эксперт отправил ответов (всего): 45

Экспертная группа: Работа с MASM/TASM

Вопрос №797

Доброе время суток!!!
Блин читаешь, и прямо самого рвет хотяб маленький, скромненький вопросик задать. Например: Довольно хочится услышать как можно подробниее про не реентабельность DOS , довно интересовал вопрос но некак руки недоходили.
Ну как у вас обстаят дела с выбором человека, который будет слидить за порядком в рассылке, хотя уже болие мение налаживается, что несомненно радует. :)

DM приветик , ну и сколько балов получил, за мой прошлый вопрос? ;)
С уважением SATIS

Ответ

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

В общем. При запуске прерывания DOS - 21h, ядро сохраняет и
переключает SS и SP, так чтобы они указывали на внутренний стек и
начинает обрабатывать запрос. Если в это время произойдёт прерывание
(например 8 или 9), то проц переключится на прерывание и "заморозит"
DOS. Если обработчик прерывания вызовет функцию DOS, то SS и SP опять-
же будут установлены на стек DOS, причём сохраненные их значения,
которые DOS должен восстановить, затрутся этими и затем DOS пойдёт
затирать свой внутренний стек. Вот и всё :-(


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

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

Вопрос №799


Здравствуйте!
Уважаемые эксперты объястните "как мне обратиться к
ячейке памяти в защищенном режиме" т.е. у меня программа написанная на асме (win32, GUI) и я
хочу обратиться к "индикатору" т.е. 0000:0417 (В реальном режиме получалось,
а в защищЈнном это нужно сначала как-то объявить????)
Подскажите как это сделать!!! (ПЛИЗ)....... или дайте линк на какой-то
форум, где это можно спросить ;)

Ответ

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

См. ответ на вопрос №800.


Отправил эксперт: Василий
Эксперт отправил ответов (всего): 46

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

Вопрос №802

Здраствуйте эксперты!
3-и вопроса:
1)Что дулает оператор Lea и TITLE?
2)Все понятно крому ptr (К примеру:mov dl,byte ptr My_string)?
3)mov ax, 1020=> ah=10 (байт?), al=20 (младший байт?)?
Усли в ax, будет число к примеру 102=> ah=10, al=2?

Ответ

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

1) TITLE - ничего. Это директива ассемблера, которая требуется для нужд
программиста. Если хочешь узнать где она используется - сделай листинг
(смотри параметры TASM/MASM/NASM/???)

LEA преобразует адрес в число (во задвинул :) и помещает в регистр:
т.е., например, LEA EBX, [EAX+EBX+20] поместит в регистр
EBX число EAX+EBX+20.

2) Смотри предыдущие выпуски этой рассылки

3) AH - старший байт (A High), AL - младший байт (A Low)
Так, если AX = 1234h, то AL = 34h, а AH = 12h
Но это касается только шестнадцатеричных чисел!!!


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

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

Вопрос №804

Тут, образно говоря такая проблема:
mov al,1
cmp al,1
jz @@search
Но @@search находится дальше чем 127 байт
А если поставить в начале проги .386 то возникае много ошибок вида: Error betving passes.....
Что делать , ведь мне надо туда прыгнуть?

Ответ

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

Нет ничего проще! См. текст.

Приложение:


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

Экспертная группа: Общие вопросы по программированию на Ассемблере под 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

В избранное