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

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


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

Ассемблер? Это просто! Учимся программировать (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

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

Рассылки 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

В избранное