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

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


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

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

Выпуск N 101

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

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


Вопрос №933

Уважаемые эксперты!
Купил проц AMD 1400 Мгц, по углам у него наклеены
поролоновые пистоны диаметром около 7 мм и толщиной около 2-3. Для чего они? Снижать вибрацию вентилятора? Или это
траспортные примочки и их надо оторвать? Кто знает?
Какой толщины пасту на проц наносить? Хотя бы примерно?
Что такое Codegen/

Ответ

Здравствуйте, Oleg!
Извини за задержавшийся ответ-я уточнял у спецов-но
поролоновые пистоны именно для того, чтобы снижать вибрацию вентилятора, и их отрывать НИ В КОЕМ СЛУЧАЕ НЕ НАДО!!!
Корпус у проца стеклянный, и при вибрации вентилятора он может треснуть...


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

Экспертная группа: Модели, виды и типы компьютеров (hard)

Вопрос №960

Здравствуйте, господа Эксперты.
Можно задать вопрос следующего характера. Не моглы бы вы подсказать можно ли программным путем (всмысле из моей программы) узнасть установленн на компьютере скреенсавер или нет и, соответсвенно, отключить его на время выполнения программы, а после завершения программы снова включить. Т.е. я хочу что бы во время выполнения моей программы скреенсавер не включался.
Заранее благодарен за ответ.

Анас.

ЗЫ Может это можно узнать в реестре, если да то раскажите где и что искать и что на что менять (желательно для Win 9x, Win NT и W2k.

Ответ

Здравствуйте, Анас!
Попробуй здсь...
HKEY_CURENT_USER\control panel\desktop\screensaveActive
Измени значение на 0....
тогда все скрин савики изчезнут...


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

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

Вопрос №964

Уважаемые эксперты.
Прошу Вас еще раз повторно ответить на мой вопрос. Мой ящик гоняет, поэтому все письма открываются как пустые (это рассылки FAQ, и ваши ответы, и другие письма). Ящик я поменял, поэтому надеюсь проблем больше не будет.
1) Куда девается PSP, если не писать org 100h, или менее 100h?
И новый вопрос:
2) Команда push/pop выполняется только для слова. Как сделать чтобы она закидывала в стэк байт, а то приходится «мутить». Неужели такая же ситуация и для двойного слова?

Ответ

Здравствуйте, Kiran!
1. Если не писать org 100h, COM прогу не скомпилишь, а в EXE PSP делается автоматом, на него указывает DS
2. Только словами, хотя в 386 защищенном режиме зависит от того, как опишешь кодовый селектор-тогда словами либо двойными словами.(Как его описывать, я не в курсе:((((((((()


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

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

Вопрос №963

Зравствуйте уважаемые эксперты!
Учу асм не так давно, и вот хотелось бы узнать, что такое PSP. Спасибо.

Ответ

Здравствуйте, Gonsales!
Ну вот в статейке по-моему про PSP большенство инфы есть, так что читай и учись!
А кто-то, когда-то говорил, что сканер - это ненужная, собирающая пыль вещь!

Приложение:


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

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

Вопрос №970

Приветствую вас снова Эксперты! Че-то последнее время столько вопросов стало возникать ;-).
Вопрос собственно такой: Как на Ассемблере сделать генератор случайных чисел?

Влад.

Ответ

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

Приложение:


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

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

Вопрос №813

У меня собснно предложение: предлагаю уважаемому эксперту АлександрМ засесть за диссертацию на тему: "Папка Uninstall Information: взгляд изнутри..."

Ответ

Здравствуйте, Broken Sword!
нЕ МОГЛИ БЫ ВЫ ПОДЕЛИТЬСЯ ДОГАДКАМИ КТО ЖЕ Я?(РАЗ ВЫ ДОГАДЫВАЛИСЬ?)
иЗВИНЯЮСЬ ПЕРЕД ВСЕМИ за свои несмешные приколы...
видимо...пусть это останется на моей совести...


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

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

Вопрос №966

Здравствуйте, эксперты!!!
У меня возник небольшой вопрос...
Что делает команда "ping -t 000.000.000.000" (текущий IP).?

Ответ

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

Одна машина начинает пинговать другую: посылать стандартные пакеты данных по IP-адресу и ждать такого же ответа, определяяя, таким образом, есть ли связь мажду машинами или нет.


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

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

Вопрос №967

Помогите.Не как не могу найти драйвера для модема(Acorp) и видюхи(TNT2).Под Windows XP.

Ответ

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

Ставь драва от 9x или 2k.
Они там работают!


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

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

Вопрос №972

Здравствуйте уважаемые Эксперты !

Помогите пожалуйста с такой проблемой
делаю в EXE-программе 2 сегмента данных такого вида:
DATA1 SEGMENT
stroka db 65535 dup (0)
DATA1 ENDS
DATA2 SEGMENT
s_from db 5 dup (0)
DATA2 ENDS
в сегменте кода пишу такое:
ASSUME CS:CODE,DS:DATA1 -- ну и стек там цепляю тоже просто не указал
Проблема в следующем - переключая DS могу читать из любого из этих двух сегментов данных, записывать могу лишь в тот который привязан директивой ASSUME, т.е. DATA1. Как сделать чтобы и в DATA2 тоже можно было записывать? при попытке записи в DATA2 TASM ругается что не может адресовать указанный сегмент. И вопрос номер 2 - нужно вводить число до 65535, чтобы оно потом помещалось в какую-нить переменную WORD. Как бы такое реализовать?

С уважением, Диман

Ответ

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


mov ax,data1
mov ds,ax
assume ds:data1
mov byte ptr ds:[0], 1 ; Пишем в DATA1
mov ax,data2
mov ds,ax
assume ds:data2
mov byte ptr ds:[0], 2 ; Пишем в DATA2


Должно помочь.


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

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

Вопрос №953

Уважаемые эксперты, в преложенном куске программы описан вывод линии через видеобуфер, но выводится он ка-то некорректно - растояние между пикселями слишком большое. Так же функция 0cH интерапта 10h точку не выдает. Подскажите, может я что не так деляю.

И еще не могли бы вы хотя бы вкраце рассказать о видеобуфере для графического режима.

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

Ответ

Здравствуйте, Stepan Lomov!
Большое расстояние между пикселами получается из-за того, что вы используете add di,2 вместо add di,1 (или inc di).
Кроме того для режима 640х480х256
вам будет необходимо менять банки памяти. О том как это можно сделать можно прочитать здесь http://www.codenet.ru/progr/video/vga2.php


Отправил эксперт: Pr.nimnul (www.np.vspu.ac.ru - Электронный журнал по информатике)
Эксперт отправил ответов (всего): 3

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

Вопрос №971

Здравствуйте, уважаемые эксперты!
Вопрос по прогр. из 16 рассылки.
(ОС-Win98, запустил Afdpro, загрузил Dbg16_01.com, прошёл:
xor ax,ax
mov es,ax ;Обнуляем ES - понятно.
уткнулся в третью команду, смотрю...
mov bx,es:[000C] ;насколько я понял, данная команда должна загрузить в BX из памяти (два байта) по адр. 0000:000C и 0000:000D
Смотрю в отладчике что там
ES:000C 65
ES:000D 04
Жму пимпу F1 и жду что в BX занесётся 0465, но дудки- там 63EC Откуда оно взялось? Следующая команда также заносит в ES не то слово, что показывает Afd. В чём причина? Или я неправильно понимаю эту команду?
И ещё, в прог. Dbg16_04.com :
xor ax,ax
mov es,ax
mov ax,es:[10h*4] ;Получили смещение адреса обработчика 10h прерывания (кстати, в этой проге Afd что показывает в памяти по адр. 0000:0040 то и помещает в AX) , но как только следующей командой
mov es:[1*4],ax
пишем его в память....Бум! Приплыли! Winда выплёвывает : "Программа выполнила некорректную операцию и будет завершена"
Шо такое? Разве мы не можем записать в память что хотим? Почему? Это не нравится DOSу ,Winде или Afd?
Объясните популярно, пожалуйста.

Ответ

Здравствуйте, Gena!
А ты чо делаешь воще, ты проверяешь отладчиком прогу, которая его вырубает! Int 3 используется отладчиком, Int 1h, который ты изменяешь обрабатывает исключения, ошибки, поэтому соответственно тебе и выводится! Просто сначала изучи, что делает и для чего используется int 1 и int 3, затем все поймешь!
Это прогу нельзя проверять на AFD, а вот SoftIce поумней и он не купиться на эти простейшие уловки!


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

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

Вопрос №963

Зравствуйте уважаемые эксперты!
Учу асм не так давно, и вот хотелось бы узнать, что такое PSP. Спасибо.

Ответ

Здравствуйте, Gonsales!
PSP (Program Segment Prefix) - структура, формируемая для каждой запущенной программы,
содержащая множество полезной информацию, в частности, командную строку и ее длину. Пpи запуске пpогpаммы (как СОМ, так и ЕХЕ) ds и es содеpжат сегментный адpес PSP. Для COM-файлов он равен еще и cs.
Более подробную Информацию о PSP
можно получить по адресу
http://xakerstvo.dax.ru/kr.htm


Отправил эксперт: Pr.nimnul (www.np.vspu.ac.ru - Электронный журнал по информатике)
Эксперт отправил ответов (всего): 5

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

Вопрос №963

Зравствуйте уважаемые эксперты!
Учу асм не так давно, и вот хотелось бы узнать, что такое PSP. Спасибо.

Ответ

Здравствуйте, Gonsales!
PSP (Program Segment Prefix) - структура, формируемая для каждой запущенной программы,
содержащая множество полезной информацию, в частности, командную строку и ее длину. Пpи запуске пpогpаммы (как СОМ, так и ЕХЕ) ds и es содеpжат сегментный адpес PSP. Для COM-файлов он равен еще и cs.
Более подробную Информацию о PSP
можно получить по адресу
http://xakerstvo.dax.ru/kr.htm


Отправил эксперт: Pr.nimnul (www.np.vspu.ac.ru - Электронный журнал по информатике)
Эксперт отправил ответов (всего): 6

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

Вопрос №972

Здравствуйте уважаемые Эксперты !

Помогите пожалуйста с такой проблемой
делаю в EXE-программе 2 сегмента данных такого вида:
DATA1 SEGMENT
stroka db 65535 dup (0)
DATA1 ENDS
DATA2 SEGMENT
s_from db 5 dup (0)
DATA2 ENDS
в сегменте кода пишу такое:
ASSUME CS:CODE,DS:DATA1 -- ну и стек там цепляю тоже просто не указал
Проблема в следующем - переключая DS могу читать из любого из этих двух сегментов данных, записывать могу лишь в тот который привязан директивой ASSUME, т.е. DATA1. Как сделать чтобы и в DATA2 тоже можно было записывать? при попытке записи в DATA2 TASM ругается что не может адресовать указанный сегмент. И вопрос номер 2 - нужно вводить число до 65535, чтобы оно потом помещалось в какую-нить переменную WORD. Как бы такое реализовать?

С уважением, Диман

Ответ

Здравствуйте, Диман!
1)Делай так:)
assume cs:code, ds:data1, es:data2, ss:<имя сегмента стека>
Теперь адресуйся к data2 через es!
Тока не забудь инициализировать es и ds, типа es=data2, a ds=data1 в самой проге!
А если тебе es нужен для других целей, то можешь заноси его в стек, потом восстанавливай или используй fs и gs, тока они используюся с 286!

2):
...
mov wordx,65535
...
wordx dw ''
...


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

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

Вопрос №964

Уважаемые эксперты.
Прошу Вас еще раз повторно ответить на мой вопрос. Мой ящик гоняет, поэтому все письма открываются как пустые (это рассылки FAQ, и ваши ответы, и другие письма). Ящик я поменял, поэтому надеюсь проблем больше не будет.
1) Куда девается PSP, если не писать org 100h, или менее 100h?
И новый вопрос:
2) Команда push/pop выполняется только для слова. Как сделать чтобы она закидывала в стэк байт, а то приходится «мутить». Неужели такая же ситуация и для двойного слова?

Ответ

Здравствуйте, Kiran!
1) Если в com файле не указать org 100h он компилироваться в принцыпе не должен. Без указания адреса обойтись будет нельзя.
2) Действительно push/pop действует только на слова/двойные слова
просто один байт в стек (к сожалению) записать нельзя с помощью этих команд.


Отправил эксперт: Pr.nimnul (www.np.vspu.ac.ru - Электронный журнал по информатике)
Эксперт отправил ответов (всего): 7

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

Вопрос №968

Здравствуйте, уважаемые эксперты.
Где бы найти инфу (желательно читабельную, с примерами) по NTFS. Знаю, что всем в лом, но мне действительно надо.

Ответ

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

Про особенности NTFS можно прочитать здесь http://guard.dubna.ru/w2000/OTHER/ntfs.htm

Само же описание можно почитать скачав файл
http://www.rusdoc.ru/material/os/nt/ntfs.zip


Отправил эксперт: Pr.nimnul (www.np.vspu.ac.ru - Электронный журнал по информатике)
Эксперт отправил ответов (всего): 8

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

Вопрос №969

Ув. эксперты!!! Вот три известных мне способа определения количества дисков на компе:
1. 08h-функция 13h-прерывания (можно модифицируя dl на входе узнать как про HDD так и про FDD)

2. Непосредственно байт по адресу: 0040:0075h (количество HDD)

3. Порт клавы 60h, при установленном 7 бите порта 60h, при чтении из него содержит в битах 6-7 количество FDD.

Вопросы:
1. Все ли три утверждения верны???
2. Все эти 3 способа позволяют определить количество дисков (неважно HDD или FDD) ТОЛЬКО НА ПЕРВОМ КОНТРОЛЛЕРЕ!!! Как определить количество дисков на ВСЕХ КОНТРОЛЛЕРАХ?
3. Приведите другие известные вам способы определения количества дисков на данном компе (сомневаюсь что таковые еще найдутся...)
4. Напоследок глупый вопрос: можно ли дисковод 5'25 (большие квадратные дискеты) причислить к FDD (Floppy Drive), или FDD это только "маленькие дискетки" ???

p.s. буду повторять вопрос каждый день, пока кто-то не ответит... так что лучше отвечайте (токо не муть) :)
Спасиба за внимание.

Ответ

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

Помоему даже дисковод 8" можно назвать FDD ибо это переводится как Floppy Disk Drive.

По поводу определения количества дисков.. щас пошукаю...
40h:10h - ворд оборудования, водержит в себе количество флоповодов (2 бита, следовательно от 0 до 3) возможно эта инфа из контроллера клавы... про это не знаю..

40h:75h - как ты правильно заметил - количество hdd. помоему общее.

int 41h и int 46h указывают на таблицу параметров для двух хард дисков.

Да и функции биос тоже почему-то оперируют только двумя номерами (80h и 81h...) не знаю как другие диски определить...

через порты... у IDE помоему достаточно возможностей чтобы все 4 уверенно распознать. :) но об этом лучше расскажет Nik! :)


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 132

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

Вопрос №972

Здравствуйте уважаемые Эксперты !

Помогите пожалуйста с такой проблемой
делаю в EXE-программе 2 сегмента данных такого вида:
DATA1 SEGMENT
stroka db 65535 dup (0)
DATA1 ENDS
DATA2 SEGMENT
s_from db 5 dup (0)
DATA2 ENDS
в сегменте кода пишу такое:
ASSUME CS:CODE,DS:DATA1 -- ну и стек там цепляю тоже просто не указал
Проблема в следующем - переключая DS могу читать из любого из этих двух сегментов данных, записывать могу лишь в тот который привязан директивой ASSUME, т.е. DATA1. Как сделать чтобы и в DATA2 тоже можно было записывать? при попытке записи в DATA2 TASM ругается что не может адресовать указанный сегмент. И вопрос номер 2 - нужно вводить число до 65535, чтобы оно потом помещалось в какую-нить переменную WORD. Как бы такое реализовать?

С уважением, Диман

Ответ

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

перед тем как работать с DATA2 поставь в программе

assume ds:DATA2

Но не забудь еще сегментный регистр переставить! :)


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 133

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

Вопрос №973

Привет, экспертам!
Кто-нибудь может выслать инфу по программированиу в защищенном режиме. Т.е. переход и т.п.
И структуру программы на асме под линух.
Заранее спасибо!

Ответ

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

Есть очень хороший сайт: http://linuxassembly.org


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 134

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

Вопрос №970

Приветствую вас снова Эксперты! Че-то последнее время столько вопросов стало возникать ;-).
Вопрос собственно такой: Как на Ассемблере сделать генератор случайных чисел?

Влад.

Ответ

Здравствуйте, Влад!
Держи простенький

Приложение:


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

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

В избранное