Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Ассемблер? Это просто! Учимся программировать (FAQ)
Ассемблер? Это просто! Учимся программировать (FAQ)
Выпуск N 097 |
Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"
Дата выхода: 2001-09-18
Вопрос №908
Эксперты по железу. Такая вот беда.
Купил новую GEFORCE GTS-2, пару раз комп нормально стартовал. На 5-6 раз в верхней части экрана пропало изображение. Появилась посередине экрана яркая тонкая полоска, под ней все ОК над ней не ничего.
Подключил монитор к другому компу-та же картина.
Т.е монитору п-ц! Хотя ему всего 2 года. И вот вопрос,
могла ли GEFORCE испортить монитор? Сразу скажу, до винды дело не доходило ни разу, все происходило в Досе.Имеется ввиду виндовс ни разу не стартовал с новым гр.адаптером.
Спасибо за внимание
Ответ
Здравствуйте, Oleg!
Если в голом ДОСе работал, ио врядли это из за видяшки
(Хотя фик знает че ысчо за видяшкя ща делают..)
У меня Nvida Geforce2 ничего не портила...
Отправил эксперт: змей
Эксперт отправил ответов (всего): 30
Экспертная группа: Модели, виды и типы компьютеров (hard)
Вопрос №913
Здравствуйте, Экспекты!
Почему когда делаешь (выполняешь) это
WinExec ('http:\www.chat.ru,0) или
ShellExecute(0,0,'http:\www.chat.ru',0,0,0)
то усЈ нормально т.е. запускаеться Explorer, а при этом
WinExec ('c:\Windows\notepad.exe',0) или
ShellExecute(0,0,'c:\Windows\notepad.exe',0,0,0)
Ничего не происходит ??????? Может есть круче АПИ, которая запустит мой исполняемый файл......
Ответ
Здравствуйте, Дмитрий!
У нея усе работает, че у тя неработает незнаю...
Отправил эксперт: змей
Эксперт отправил ответов (всего): 31
Экспертная группа: Пользовательская работа с Windows
Вопрос №920
Уважаемые эксперты, подскажите, плз - прерывания DOS/BIOS сохраняют регистры или нет? Или это зависит от прерывания и надо методом тыка определять?
Ответ
Здравствуйте, МихалЫч!
По определению прерывание должно сохранять полностью все регистры и флаги, кроме тех, через которые передаются результаты
Кроме того, есть понятие нереентерабельности Дос -- 21 прерывание нельзя вызывать само из себя
Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 139
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №920
Уважаемые эксперты, подскажите, плз - прерывания DOS/BIOS сохраняют регистры или нет? Или это зависит от прерывания и надо методом тыка определять?
Ответ
Здравствуйте, МихалЫч!
Прерывания ничего не сохраняют.
Просто читаешь в спецификации вход-выход: вот эти регистры и затрагиваются. Остальные остаются неизменными.
Отправил эксперт: Gn
Эксперт отправил ответов (всего): 13
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №920
Уважаемые эксперты, подскажите, плз - прерывания DOS/BIOS сохраняют регистры или нет? Или это зависит от прерывания и надо методом тыка определять?
Ответ
Здравствуйте, МихалЫч!
Утверждается, что функции DOS (int 21h) не изменяют регистров, за исключением тех, в которых возвращаются данные, естественно. То же можно сказать и про прерывания BIOS. Однако это не значит, что абсолютно все функции и прерывания DOS/BIOS сохряняют регистры. Нужно читать хэлп по каждому прерыванию конкретно, и если там ничего про регистры не сказано, то, наверняка, они сохраняются.
Отправил эксперт: Bitman
Эксперт отправил ответов (всего): 16
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №922
Добрый день эксперты!
Я тут недавно поюзал новую команду, но так и непонял как она работает, вот собственно и она: LES dx, ttt
В справочнике написанно, что она заминяет две команды:
mov dx, ttt
mov es, ttt+2; зачем прибавлять два?
Ну вот последняя строка меня убила! Какова..., мы в сегментный регистр что-то пихаем? ПОМОГИТЕ=)))
Еше вопрос DWORD PTR- это сколько байт?
P.S. Да к стате LDS почти тоже самое только наоборот.
Ответ
Здравствуйте, Alex!
А что тебя так пугает? сегментный регистр - такой же как и все остальные. только что назначение у него специфичное... но никто не мешает нам в него что-то запихнуть. :))
команда les предполагает что в памяти хранятся 4 байта, первые два - смещение, вторые два (ttt + 2) сегмент.
Надеюсь тебя не шокирует что программа может использовать больше 64к памяти?
Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 124
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №925
Здравствуйте, Эксперты!
Объясните чем отличаеться скан код клавиши 2(на цифровой клаве) от
скан-кода "стрелка вниз" ??????
Ничем!!!? Есть способ отличить т.к. комп различает :)
Я получаю его с помощью....
....
mov al,60h
mob bl,al ;последняя клавиша
....
getkey:
in al,60h
cmp al,bl
jrz getkey ;нажимали ли клавишу?
mov bl,al
...
Ответ
Здравствуйте, Дмитрий!
Вообще-то клавиша стрелка вниз возвращает двойной код...
То есть два сканкода подряд.
Не помню каких... давно это было. :)
Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 125
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №919
Насчет вопроса №903.
Дело в том что эта опция (панель управления -> модем -> Наибольшая скорость) определяет не скорость передачи от модема к модему, а скорость передачи от модема к компьютеру. Достаточно щелкнуть по ней правой кнопкой и посмотреть контекстную справку. Да и хелпе это описано.
То есть компьютер связывается с модемом на данной скорости, посредством интерфейса стандартного СОМ-порта. Учитывая то, что модем использует эфективные алгоритмы сжатия, получится что при соединении на 56 килобит скорость связи мода и компа может даже превышать 115 кб (максимальная скорость СОМ-порта), но за счет драйверов этот порог может быть преодален.
Получается что, это изменение ничего нам не даст. Модем все равно будет связыватся на максимальной скорости, а обмен между ним и компом резко замедлится. Чтобы управлять скоростью самого модема нужно использовать строку инициализации. Возможности модов по управлению ими могут различатся. Как минимум можно прописать протокол, как максимом скорость и алгоритм сжатия. Все это надо посмотреть в тех документации по определенному моду.
Ответ
Здравствуйте, KOV!
См ответ 903!!!!
зы: Молоток!
Отправил эксперт: Digger (www.digger-mib.chat.ru/freeware.htm - Мой софт :))
Эксперт отправил ответов (всего): 4
Экспертная группа: Пользовательская работа с Windows
Вопрос №923
Добрый день эксперты!
Что такое такт?
Ответ
Здравствуйте, Alex!
..."Каждая комнда микропроцессора (асм - ADD, IN, PUSH ...), в зависимости от сложности, содержит от 1 до 5 машинных циклов. В свою очередь, каждый машинный цикл требует для выполнения от 3 до 5 машинных тактов". Вот и считай: 1Ghz = 1000 Mhz = 1 000 000 тактов в секунду = 50 000 - 250 000 команд в секунду.
Вообще, чтоб ты лучше представил, вот пример:
Такт1:выдача адреса памяти на шину адреса;
Такт2:проверка сигналов READY и HOLD;
Такт3:(если ready на high level) передача информации в шину данных;
Такт4,5: для внутренней работы микропроца.
вот тебе цикл чтения разложен по тактам.
p.s. еще такт - это чувство, которое по морально-этическим соображениям должно иметься в наличии у каждого порядочного штриха
p.p.s. Вал.Ик., спасибо за понимание...
Отправил эксперт: Broken Sword (http://www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 153
Экспертная группа: Модели, виды и типы компьютеров (hard)
Вопрос №922
Добрый день эксперты!
Я тут недавно поюзал новую команду, но так и непонял как она работает, вот собственно и она: LES dx, ttt
В справочнике написанно, что она заминяет две команды:
mov dx, ttt
mov es, ttt+2; зачем прибавлять два?
Ну вот последняя строка меня убила! Какова..., мы в сегментный регистр что-то пихаем? ПОМОГИТЕ=)))
Еше вопрос DWORD PTR- это сколько байт?
P.S. Да к стате LDS почти тоже самое только наоборот.
Ответ
Здравствуйте, Alex!
Команда LDS
Признаки не меняются.
Команда: LDS destination,source.
Логика : DS = (source)
destination = (source + 2) .
Команда LDS загружает в два регистра 32-битный указатель, расположенный в памяти по адресу source. При этом старшее слово заносится в сегментный регистр DS, а младшее слово - в базовый регистр destination. В качестве операнда destination может выступать любой 16-битный регистр, кроме сегментных.
Пример
LDS DI,P32_POINTER
Теперь DS:DI указывает на область памяти
-------
Такт-цикл в процессоре, когда он выполняет одно действие. Некоторые команды делаются за 1 такт, остальные за больше.
Но например для 8051 процессора: тактовая частота 12 МГц, а одна команды выолняется 12(или 24) тактов процессора, то есть за 1(2) мкс.
Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 140
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №930
Может ли работать Numega SoftICE работать вместе с WinMe. Если да то какая версия программы?
Ответ
Здравствуйте, Павел!
Может, конечно. Версия SoftIce 4.01 (последняя, что мне встречалась), для WinXX и для WinNT
P.S. в ответе на вопрос про такты я все же опять прогнал.. Следует читать не "50 000-200 000" команд в секунду, а в 1000 раз больше... (гигагерц - тысяча мегагерц)
Отправил эксперт: Broken Sword (http://www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 154
Экспертная группа: Общие вопросы по программированию на Ассемблере под Win32
Вопрос №928
Здравствуйте, Эксперты!
Расскажите где можно найти описание портов (клавиатуры, контролера пререваний
и других портов...) Желательно на русском :)
зы: Меня интерисует, что означает каждый бит и на каком порту!!!
Ответ
Здравствуйте, Дмитрий!
Тебе книга "Assembler для Dos, Windows и Unix" Зубкова нужна! В ней усе есть!
Я могу про COM-порт послать инфу! Ну и если по какому-нибудь другому <срочно и очень нужно>, то не поленюсь, отсканирую: orlando@kaluga.ru
Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 117
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №922
Добрый день эксперты!
Я тут недавно поюзал новую команду, но так и непонял как она работает, вот собственно и она: LES dx, ttt
В справочнике написанно, что она заминяет две команды:
mov dx, ttt
mov es, ttt+2; зачем прибавлять два?
Ну вот последняя строка меня убила! Какова..., мы в сегментный регистр что-то пихаем? ПОМОГИТЕ=)))
Еше вопрос DWORD PTR- это сколько байт?
P.S. Да к стате LDS почти тоже самое только наоборот.
Ответ
Здравствуйте, Alex!
LES пихает в пару ES:DX сегмент-смещение чего-либо, хранящегося в ttt (там должно быть 4 байта, всё по правилам - dx=ttt, es=ttt+2). Да, в сегментный регистр пихаем - можно, но больно странно - у меня при компиляции инструкции mov xS,some_word в программе получется строчек десять какой-то хрени, однако xS всё-таки меняется корректно. Это уж не мне вопрос, а другим.
DWORD - четыре байта (Double WORD, не путать с dw - это слово, вот dd - dword).
Отправил эксперт: DM
Эксперт отправил ответов (всего): 54
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №925
Здравствуйте, Эксперты!
Объясните чем отличаеться скан код клавиши 2(на цифровой клаве) от
скан-кода "стрелка вниз" ??????
Ничем!!!? Есть способ отличить т.к. комп различает :)
Я получаю его с помощью....
....
mov al,60h
mob bl,al ;последняя клавиша
....
getkey:
in al,60h
cmp al,bl
jrz getkey ;нажимали ли клавишу?
mov bl,al
...
Ответ
Здравствуйте, Дмитрий!
Они различают их скан-коды, а скан-коды у них разные. Хотя номер на выходе из обработчика скан-кодов - один и тот же. Если не понял (а я и сам не понял) - чтай кусок из helpassm:
Яркая буква K означает, что данная клавиша находится на цифровой клавиатуре
с правой стороны клавиатуры.
Нетоторые клавиши K уникальны только на уровне сканкодов. Например, когда вы
нажимаете плюс (+), обработчик клавиатуры всегда помещает символ ASCII 2bH (47)
в буфер клавиатуры, независимо от того, какую из двух клавиш "+" вы нажали.
Однако, некоторые приложения проверяют сканкод, чтобы выяснить, что это был
"серый плюс" (на цифровой клавиатуре), и обрабатывают его специальным образом.
На 101-клавишной клавиатуре много дублирования между основной и цифровой кла-
виатурами. Программы, проверяющие сканкоды, испытывают трудности с такой
клавиатурой. Для совместимости между клавиатурами лучше всего использовать
функции символьного в/в DOS для чтения клавиш и проверки на расширенные коды ,
которые полностью документированы.
Отправил эксперт: DM
Эксперт отправил ответов (всего): 55
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №927
Здравствуйте, Эксперты!
Расскажите где можно найти описание портов (клавиатуры, контролера пререваний
и других портов...) Желательно на русском :)
зы: Меня интерисует, что означает каждый бит и на каком порту!!!
Ответ
Здравствуйте, Дмитрий!
Чилай Зубкова, Юрова... Также если на нерусском, читай TechHelp!
Отправил эксперт: Painbringer
Эксперт отправил ответов (всего): 133
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №931
Я вот новичек в Ассемблере.
Я так понимаю, чтобы время из доса взять нужна функция 2Ch и при этом на выходе будет CH-hour , CL-minute ...
У меня такой вопрос , как мне теперь распечатать на STDOUT содержимое CH ?
Вопрос может совсем чайниковский, но мне нужно это ...
Заранее благодарен !
Ответ
Здравствуйте, Vasya!
Вопрос извечно терзающий людей... На процедурку для вывода шестнадцатиричного числа на экран.
Приложение:
Отправил эксперт: Painbringer
Эксперт отправил ответов (всего): 134
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №931
Я вот новичек в Ассемблере.
Я так понимаю, чтобы время из доса взять нужна функция 2Ch и при этом на выходе будет CH-hour , CL-minute ...
У меня такой вопрос , как мне теперь распечатать на STDOUT содержимое CH ?
Вопрос может совсем чайниковский, но мне нужно это ...
Заранее благодарен !
Ответ
Здравствуйте, Vasya!
Уважаемый Vasya! Вопрос, может, и нужный, но я лично сам на него уже отвечал 150 раз (половина, если не больше, всех моих баллов накручена на нем)
Но я еще в 151 раз отвечу (уже даже не лезу в книжку, бо наизусть помню):
проще использовать ah=02 int 1Ah. Чем проще? Да хотя бы тем, что время возвращается в BCD формате, т.е. перевести его в ASCII код для вывода на экран - уже несерьозное дело. Итак, в 151 раз: ch=час (как и в случае с функцией 2Сh), вывести на экран можно так:
например, щас одиннадцать часов ночи (23 часа) в BCD так и выглядит 23
mov al,ch ; al=сh=час в BCD формате=23... следим дальше за ходом мысли..
mov ah,al ; ah=al=23...
and ah,0Fh; ah=03h (мы обнуляем старшие четыре бита... зачем?? а вот зачем:...
shr al,4 ; al=02h (сдвиг вправо на четыре бита, т.е. фактически тройка "отъезжает" нафиг (а именно направо, что очень важно!!!...)
теперь что мы имеем? ah=03, al=02. что нам остается сделать? правильно, привести в ASCII форму:
or ax,3030h ; имеем ah=33,al=32, т.е. ASCII коды тройки и двойки...
дальше уже, извини, подумай над этим делом сам...
p.s. уважаемые подписчики рассылки!!! убедительная просьба больше НИКОГДА не задавать вопросов про определение и вывод времени на экран, а кто новенький - вперед, читать 97 факов.
Отправил эксперт: Broken Sword (http://www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 155
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №931
Я вот новичек в Ассемблере.
Я так понимаю, чтобы время из доса взять нужна функция 2Ch и при этом на выходе будет CH-hour , CL-minute ...
У меня такой вопрос , как мне теперь распечатать на STDOUT содержимое CH ?
Вопрос может совсем чайниковский, но мне нужно это ...
Заранее благодарен !
Ответ
Здравствуйте, Vasya!
Лучше использовать функцию 02 int 1ah, так как возвращает в формате BCD(т.е., если 22:30, то CH=22, а CL=30) и таким образом можно избавиться от лишнего мудежа! См.прогу!
Приложение:
Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 118
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №932
Здравствуйте!
Подскажите, плз, методы, которыми можно определить была ли программа скопирована (алгоритм).
С уважением, Воинствующий ламер.
Ответ
Здравствуйте, Воинствующий ламер!
эээээээ...... уважаемый!!! если вы имеете ввиду, как определить, была ли данная программа скопирована С какого-либо источника, то спешу вас разочаровать, т.к. ЛЮБАЯ программа в любом случае является откуда-то скопированной ибо сама на ЖД или др. устр. В/В возникнуть не может в силу..... ну хотя бы того, что ЖД герметичен и в него даже пыль не смеет вползти, а не то чтобы виндоза какая нибудь.
если же вы, уважаемый, имеете ввиду алгоритм определения БЫЛ ЛИ СДЕЛАН СЛЕПОК (КОПИЯ) с программы, имеющейся у вас на устр-ве В/В на какой-либо другой источник, то спешу вас также разочаровать, ибо без специально установленной проги-резидента, перехватывающей процесс копирования у вас также ничего не выйдет... насчет самой проги-резидента - ничего не может быть проще: вам всего лишь навсего (как я вижу данную ситуацию) необходимо повесить обработчик на одну- единственную функцию прерывания 21h, а именно - создание файла. Дальше - собственно сам алгоритм. Повесив, таким образом, обработчик на создание ЛЮБОГО файла (непосредственно в нем уже можно вешать обработчик на закрытие файла - для чего - см. дальше): 1. Узнать имя этого созданья. 2. Искать файл с таким именем на ВСЕМ HDD (довольно сложновато обычными средствами это дело организовать, я так сходу даже затрудняюсь это дело представить, тем более что такой вопрос уже неоднократно задавался, но никто толком так и не ответ!
ил). 3. Если файл найден - тут нада навострить уши!!! создаваемый файл ВОЗМОЖНО(!) с вероятностью в 80% - копия того, что мы нашли. 4. Дальше - куда фантазия уведет. Можешь, опять же, производить сверку по размеру, если совпал размер - то вероятность того, что кто-то чето копирует -уже 99%. На оставшийся 1% тебе никто 100% гарантии не даст. Тут без сверки по содержанию (а это чтение из файлов и cmpsb) не обойтись. Если тебе срочно нада, можно это все представить в программном виде, но за п.2 сего послания я не ручаюсь... ;(
Отправил эксперт: Broken Sword (http://www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 156
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №932
Здравствуйте!
Подскажите, плз, методы, которыми можно определить была ли программа скопирована (алгоритм).
С уважением, Воинствующий ламер.
Ответ
Здравствуйте, Воинствующий ламер!
А что ты имееешь в виду под словом скопирована?
1. Если тебя интересует скопировали ли прогу в др. место на винте то надо привязываться к текущему каталогу (получаешь путь и где-то его, лучше в зашифрованном виде, сохраняешь).
2. Если же ты проверяешь не перетащили ли прогу на другой комп, то мона привязываться к № биоса, размеру дисков и т.п.
Отправил эксперт: Painbringer
Эксперт отправил ответов (всего): 136
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Подписаться на рассылки
Форма подачи вопроса
ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Дополнения к вопросам, на которые эксперт уже ответил НЕ следует направлять ведущему рассылки (я не успеваю!). Просто скомбинируйте первый вопрос и дополнение к нему, а затем заново отправьте его, используя приведенную ниже форму!Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!
Регистрация в качестве эксперта
Архив выпусков
Ведущий рассылки,
Калашников Олег:
Assembler@Kalashnikoff.ru
ICQ No.: 68951340
URL сайта подписчиков:
http://www.Kalashnikoff.ru
______________
По вопросам сотрудничества, рекламы и спонсорства обращайтесь:
- Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
- Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
- Издание книги (спонсорство): Sponsor@Kalashnikoff.ru
(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав. |
Реклама на сайте Kalashnikoff.ru
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу | Рейтингуется SpyLog |
В избранное | ||