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

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 455
от 27.12.2002, 19:50

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 2282
Отправлено ответов: 6877
Активность: 301.3 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Traish
Статус: Опытный
Общий рейтинг: 129.71
[Подробней >>]
Maverick
Статус: Профессиональный
Общий рейтинг: 139.53
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 127.65
URL: моя рассылка по Protected Mode
[Подробней >>]
 
Александр
Статус: Доверительный
Общий рейтинг: 109.09
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 152.21
[Подробней >>]
Gibbel
Статус: Профессиональный
Общий рейтинг: 108.31
URL: Страничка обо мне и моих друзьях
[Подробней >>]
 
Ayl
Статус: Профессиональный
Общий рейтинг: 117.37
[Подробней >>]
baldr
Статус: Профессиональный
Общий рейтинг: 114.01
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
keleb-glin
Статус: Опытный
Общий рейтинг: 112.08
[Подробней >>]
 
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 121.47
[Подробней >>]
Beeblebrox
Статус: Профессиональный
Общий рейтинг: 111.16
URL: Beeblebrox / TMA HomePage
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 2236. В программе определяется время и сравнивается в часах, как добавить минуты?... (ответов: 2)
Вопрос № 2237. Здравствуйте! Вот такая возникла проблема, горит контрольная по Мат. логике и теории алгоритмов, в ч... (ответов: 2)
Вопрос № 2238. Привет, уважаемые эксперты! Спасибо за то, что не помогли...;) Ничего...зато сам разобрался. Резиден... (ответов: 2)
Вопрос № 2239. Здравствуйте! Как работать с портами ввода/вывода 8-битных микроконтроллеров семейства С51? (Наприме... (ответов: 1)
Вопрос № 2240. Привет всем экспеортам!!! Тут возникла маленькая проблема с Visual C++ 6 c MFC Не могу использоват ф... (ответов: 2)
Вопрос № 2241. Добрий день Пожалуйста мыльните мне (2002ai@ua.fm) описания шеснадти- восьми- двоичной систем и мати... (ответов: 3)
Вопрос № 2242. Bob Johnson, если вас это не затруднит, то скиньте тоже чижика;))). Maverick, а вас я попрошу скинут... (ответов: 3)
Вопрос № 2243. У меня вопрос по программированию контроллеров дисков в защищённом режиме. В документациях я нашёл, ... (ответов: 1)
Вопрос № 2244. Здравствуйте, Уважаемые Эксперты. 1. Я хотел бы уточнить кое-что касательно вопроса № 2194. Вы объяс... (ответов: 3)
Вопрос № 2245. Здравствуйте. Не подскажите ли вы как пользоваться функцией gethostbyname. А точнее, как преобразова... (ответов: 2)
Вопрос № 2246. Кто-нить работал с мышой в высоких разрешениях под ДОС? Я использую BGI драйверы от Borlanda и Jorda... (ответов: 2)
Вопрос № 2247. Уважаемые эксперты, помогите пожалуйста как можно быстрее Как реализовать вот этот кусок mov ah,3Fh ... (ответов: 3)

Вопросов: 12, ответов: 26


 Вопрос № 2236

В программе определяется время и сравнивается в часах, как добавить минуты?


Приложение:


Вопрос отправлен: 22.12.2002, 20:17
Отправитель: Андрей

[Следующий вопрос >>] [Список вопросов]

Отвечает Traish

Доброе время суток, Андрей!
Функция 2ch (int 21h) возвращает:
СH = часы
CL = минуты
DH = секунды
DL = сотые доли секунды


Ответ отправлен: 22.12.2002, 23:55
Отправитель: Traish


Отвечает Maverick

Доброе время суток, Андрей!
После получения времени создания файла добавь такие строки:
mov bx,cx
shr bx,3
xor bh,bh
shr bx,2
Теперь в bl у тебя минуты, сравнить думаю, сможешь сам.


Ответ отправлен: 23.12.2002, 08:02
Отправитель: Maverick


 Вопрос № 2237

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



Вопрос отправлен: 22.12.2002, 20:39
Отправитель: Stas (ksa@mail.kz)

[Следующий вопрос >>] [Список вопросов]

Отвечает Broken Sword

Доброе время суток, Stas!
о, машина Алана Тьюринга - моя любимая машина... )
могу тебе кинуть курсовик свой и прогу - эмулятор машины Тьюринга (очень путевый). смотри в ящике курсовик мой уже лежит (кстати, там в конце должна быть ссылка на эмулятор).

Ответ отправлен: 22.12.2002, 21:21
Отправитель: Broken Sword


Отвечает Александр

Добрый день, Stas!
Лень запредельная. Набери www.ya.ru В строке поиска набери "Машина Тьюринга", именно так, в кавычках. По ссылке №12 ты найдёшь главу из какой-то книги в формате PDF, посвящённую целиком машине Тьюринга. По ссылке №13 ты найдёшь страничку со ссылками на доходчивое короткое описание и какими-то исходниками касательно subj.


Ответ отправлен: 22.12.2002, 21:43
Отправитель: Александр


 Вопрос № 2238

Привет, уважаемые эксперты!
Спасибо за то, что не помогли...;)
Ничего...зато сам разобрался.
Резидент (озвучивает клаву) пашет, но:
в чистом DOS глючат popa и pusha.
Т.е. регистры не сохраняются в обработчике,
а если просто push и pop, то всё ok!..
В эмуляции под WinXP всё тоже ok...
Так объясните мне, что это за глюк такой?..
Да и вообще хотел бы советов и замечаний по коду.
Заранее буду благодарен.
P.S. это уже не лаба ;)
Я просто влюбился в assembler и всё такое...
сами понимаете какоё он классный... ;)


Приложение:


Вопрос отправлен: 23.12.2002, 01:40
Отправитель: m0rfey

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Приветствую Вас, m0rfey!
Как это глючат??? Может ты зря считаешь, что они сохраняют сегментные регистры - нет, эти команды позволяют сохранять в стеке только ax, bx, cx, dx, si, di, bp, sp.
Поэтому, если тебе надо сохранить cs или ds, то делай это сам отдельными push и pop.


Ответ отправлен: 24.12.2002, 22:41
Отправитель: Bob Johnson


Отвечает Broken Sword

Добрый день, m0rfey!
ага, никакого глюка нет. дав название команде (pusha расшифровывается не иначе как push all) интеловцы явно погорячились: pusha сохраняет ТОЛЬКО 8 регистров (всего в процессоре с архитектурой IA32 их в несколько раз больше), поэтому новички впадают в заблуждения: pusha НЕ сохраняет сегментные регистры и регистр флагов.
Хотя в твоем коде ты и не изменяешь сегм. регистры, поэтому дело в другом... правда, мне приходилось сталкиваться с проблемой в XP: любой, сколь угодно вложенный и огромный цикл, основанный на loop в эмуляции DOS-а в XP исполняется МГНОВЕННО. Поэтому я не мог организовать задержки исп. счетчики.
ну и вот в этом месте: mov dx,tune - по умолчанию берется значение из DS:[tune], а у тебя он равен черти чему, поэтому предварительно нада push cs pop ds или сразу mov dx,word ptr cs:[tune]
>>Я просто влюбился в assembler и всё такое...
вот все вы одинаковые, так говорите... :(
:)


Ответ отправлен: 23.12.2002, 10:15
Отправитель: Broken Sword


 Вопрос № 2239

Здравствуйте!
Как работать с портами ввода/вывода 8-битных микроконтроллеров семейства С51? (Например Siemens C509)



Вопрос отправлен: 23.12.2002, 06:17
Отправитель: Oleg

[Следующий вопрос >>] [Список вопросов]

Отвечает Maverick

Добрый день, Oleg!
Шаг 1: Ищешь соответствующую документацию
Шаг 2: Читаешь ее
Шаг 3: Задаешь вопросы
При соотвествующем складе ума шаг 3 можно опустить. :)))


Ответ отправлен: 23.12.2002, 08:02
Отправитель: Maverick


 Вопрос № 2240

Привет всем экспеортам!!!
Тут возникла маленькая проблема с Visual C++ 6 c MFC
Не могу использоват функции WinApi в чистом виде
А именно например Функции EnableWindow и ShowMessage
VC мне показывает не все параметры функции
Например от сутствуе параметр HWND в этих функциях.
Помогите плиз заюзать эти функции в чистом виде
Вопро конечно не втему но здесь собирается элита.
Прошу помочь кто чем может.



Вопрос отправлен: 23.12.2002, 08:21
Отправитель: m0v8lack

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Доброе время суток, m0v8lack!
Пиши вместо EnableWindow
::EnableWindow (HWND, bool);
и все будет ок.
> здесь собирается элита
прикольно...


Ответ отправлен: 24.12.2002, 22:41
Отправитель: Bob Johnson


Отвечает Gibbel

Здравствуйте, m0v8lack!
Для первой набирай ::EnableWindow(hWnd,bEnable);
Со второй сложнее, так как она из интерфейса IDocHostShowUI. Но, вместо нее можешь вызывать API-шную MessageBox.

Ответ отправлен: 23.12.2002, 11:09
Отправитель: Gibbel


 Вопрос № 2241

Добрий день
Пожалуйста мыльните мне (2002ai@ua.fm) описания шеснадти- восьми- двоичной систем и матиматических действий в них.



Вопрос отправлен: 23.12.2002, 17:02
Отправитель: aex (2002ai@ua.fm)

[Следующий вопрос >>] [Список вопросов]

Отвечает Maverick

Приветствую Вас, aex!
Да в любой книге по асму смотри 2 первые главы.


Ответ отправлен: 23.12.2002, 18:39
Отправитель: Maverick


Отвечает Ayl

Здравствуйте, aex!
Отвечаю в рассылку, потому что это может быть кому-то еще интересно.
Все перечисленные системы (равно как и привычная 10-тиричная с.с.) являются частным случаем системы по основанию N. Вот характеристики этой системы.
1. Используются цифры от 0 до (N-1).
2. Система является позиционной, то есть каждая цифра в числе, записанном в этой системе, имеет свой вес. Если пронумеровать позиции в числе справа налево, начиная с 0, то вес i-й цифры равен N^(i-1).
Например, в 10-й с.с. вес 3-ей цифры равен 10^2 = 100.
Для двоичной вес 3-ей цифры равен 2^2 = 4.
Пусть есть число в N-й с.с.: A(N) = A(p)A(p-1)...A(1)A(0).
Чтобы преобразовать его в 10-ю с.с., надо посчитать значение выражения:
B(10) = A(p)*N^(p-1)+A(p-1)*N^(p-2)+...+A(1)*N+A(0).
Теперь, пусть есть число B в 10-й с.с. Чтобы преобразовать его в число по основанию N, надо выполнить последовательные действия:
1. B = B1 * N + A(0)
2. B1 = B2 * N + A(1)
...
p-2. Bp-1 = Bp * N + A(p-1)
p-1. Bp = A(p)
Число в N-й с.с. равно: A(p)A(p-1)...A(1)A(0)
Математические действия выполняются точно также, как и в 10-й с.с., только изменяются таблицы сложения и умножения (нетрудно понять, что вычитание и деление осуществляются с их же помощью). А именно, в системе по основанию N эти таблицы имеют размер N*N. В приложении приведены эти таблицы для 8-ми- и 16-ти-ричных с.с. (для двоичной не привожу по причине их тривиальности). Замечу только, что для 2-й с.с. результат сложения 1+1 = 10!
Кроме этого, т.к. 8 = 2^3, а 16 = 2^4, то для преобразования из 2-й с.с. в 8-ми- или 16-ти-ричную с.с. (и обратно) можно использовать следующие таблицы:
2-я 8-я 16-я 10-я
0000 0 0 0
0001 1 1 1
0010 2 2 2
0011 3 3 3
0100 4 4 4
0101 5 5 5
0110 6 6 6
0111 7 7 7
1000 - 8 8
1001 - 9 9
1010 - A 10
1011 - B 11
1100 - C 12
1101 - D 13
1110 - E 14
1111 - F 15
Т.е. двоичное число нужно разбить на триады (для преобразования в 8-миричную с.с.) или тетрады (для 16) и далее воспользоваться приведенной таблицей. Для обратного преобразования каждая цифра числа заменяется соответствующей триадой (8) или тетрадой (16).


Приложение:

Ответ отправлен: 23.12.2002, 19:15
Отправитель: Ayl


Отвечает Bob Johnson

Доброе время суток, aex!
И что тебе тут непонятно?
Математические действия в них точно такие же, как и в десятичной. Прост каждая цифра может принимать не 10 разных значений, а 16, 8 или 2. Соответственно, каждый следующий разряд (влево) имеет вес в 16, 8 или 2 раза больше предыдущего.
Допустимые цифры:
16: 0, 1, 2, ... ,8, 9, A, B, C, D, E, F
8: 0 - 7
2: 0 или 1.


Ответ отправлен: 24.12.2002, 22:41
Отправитель: Bob Johnson


 Вопрос № 2242

Bob Johnson, если вас это не затруднит, то скиньте тоже чижика;))).
Maverick, а вас я попрошу скинуть Чернобыля. Весело однако.
Сорри за неудобства. А может вы бы создали сайтик и выкладывали бы туда все необходимое для скачивания?
Заранее благодарен.



Вопрос отправлен: 23.12.2002, 17:16
Отправитель: prophet (jjsp@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Maverick

Доброе время суток, prophet!
Лови.
Bob, кинь в меня чижика тоже :)
Maverick@nightmail.ru

Ответ отправлен: 23.12.2002, 18:39
Отправитель: Maverick


Отвечает baldr

Приветствую Вас, prophet!
Ага... Сразу все проги в одном архиве, каждый файл заражен Чернобылем, anti-EXE, каким-нибудь
трояном.. В качестве бонуса предлагается скачать дистрибутив нормально работающей (иногда) винды,
а также на этом сайте есть все драйвера для всего оборудования... :))) Примерно так?
Думаешь, ты один такой умный? Вот, если найдется кто-нибудь, кто это все организует, будет
постоянно обновлять и поддерживать сайт - тогда пожалуйста... :)


Ответ отправлен: 24.12.2002, 01:37
Отправитель: baldr


Отвечает Bob Johnson

Здравствуйте, prophet!
Да, хорошо... :-)
Пользуясь случаем, передаю привет остальным экспертам рассылки по ассемблеру :-)


Ответ отправлен: 24.12.2002, 22:42
Отправитель: Bob Johnson


 Вопрос № 2243

У меня вопрос по программированию контроллеров дисков в защищённом режиме. В документациях я нашёл, что можно работать двумя способами - через DMA и читать/записывать данные на диск напрямую через порт(но это будет медленнее). Там также нужны какие-то параметры дискеты или жёсткого диска. Вопросы такие - откуда взять эти параметры, как выгоднее в защищённом режиме работать с дисками и какие номера будут иметь аппаратные прерывания(IRQ) в IDT(ну в таблице векторов IRQ6 иммеет номер 0eh, а в защищённом режиме я их не знаю)



Вопрос отправлен: 23.12.2002, 17:46
Отправитель: dragon (dtdcs@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Broken Sword

Здравствуйте, dragon!
насчет того, что чтение/запись в порт медленнее - вопрос, конечно, спорный, потому что и DMA не по воздуху с HDD общается
Где "там"? При чтении/записи в порты тебе нужно знать номера портов, взять их можно из статьи в журнале VLAD (чтение/запись в порты в/в HDD, очень легко написанная) - посмотри в ящике. А про DMA - 3 канал обслуживает HDD, его тоже в принципе несложно программировать.
IDT - это и есть в защищенном режиме.
(IRQ0-IRQ7 = INT8-INT0F)
(IRQ8-IRQ15 = INT70-INT78)

Ответ отправлен: 23.12.2002, 21:29
Отправитель: Broken Sword


 Вопрос № 2244

Здравствуйте, Уважаемые Эксперты.
1. Я хотел бы уточнить кое-что касательно вопроса № 2194. Вы объяснили как работает прерывание Так вот я хотел бы спрсить, а как сделать так чтобы при этом вызывался мой обработчик. Для этого что надо изменять IDT?Или как-то по-другому?
2. Traish, что значит "зависит от класса исключения"? Это же вроде бы одно и то же исключение, или нет?



Вопрос отправлен: 23.12.2002, 17:40
Отправитель: Leonid

[Следующий вопрос >>] [Список вопросов]

Отвечает Traish

Здравствуйте, Leonid!
1. Создаешь дескрипторы прерываний, указывающие на твои обработчики, и модифицируешь IDT.
2. Как я уже говорил причины генерации этого исключения могут быть разные, поэтому в некоторых случаях оно классифицируется как отказ (например, если причиной был бряк - исключение относится к классу отказов), а в других (ну, например, если ты выполнил int 1) - как ловушка (ну и соответственно, в этом случае в стек будут помещены cs:eip следующей команды).


Ответ отправлен: 23.12.2002, 20:09
Отправитель: Traish


Отвечает Broken Sword

Доброе время суток, Leonid!
В защ. режиме - IDT (вместо декскрипторов 3 или 1 дескрипторы своих обработчиков), в реальном - таблицу векторов прерываний (по 0:0)
2.
исключения бывают трех типов: faults, traps и aborts. так вот, не все из них кладут в стек адрес команды, вызвавшей ошибку (какие-то кладут адрес следующей)


Ответ отправлен: 23.12.2002, 19:04
Отправитель: Broken Sword


Отвечает Bob Johnson

Приветствую Вас, Leonid!
Ну... вообще-то я тебе на вопрос № 2194 не отвечал :-).
Предположу: чтобы при возникновении (или искусственном вызове) заданного прерывания вызывался твой обработчик - действительно надо изменить адрес в IDT (для защищенного режима) или просто в таблице векторов прерываний (для реального).


Ответ отправлен: 25.12.2002, 21:40
Отправитель: Bob Johnson


 Вопрос № 2245

Здравствуйте.
Не подскажите ли вы как пользоваться функцией gethostbyname. А точнее, как преобразовать имя в адрес?



Вопрос отправлен: 23.12.2002, 17:53
Отправитель: Leonid

[Следующий вопрос >>] [Список вопросов]

Отвечает Traish

Добрый день, Leonid!
А что тут непонятного?
_data_
address db "host.com",0
_code_
push offset address
call gethostbyname
Получишь указатель на структуру hostent. Далее смотри h_list.

Приложение:

Ответ отправлен: 23.12.2002, 18:22
Отправитель: Traish


Отвечает Bob Johnson

Добрый день, Leonid!
Очень просто. Ты вызываешь ее с параметром-указателем на строку текста, которую ты хотел бы перевести в IP адрес. В ответ функция возвращает тебе указатель на структуру hostent, в которой член h_addr_list[0] указывает на первый найденный адрес хоста (указывает на 4 байта). Если адрес не может быть получен, возвращает 0.


Ответ отправлен: 25.12.2002, 21:41
Отправитель: Bob Johnson


 Вопрос № 2246

Кто-нить работал с мышой в высоких разрешениях под ДОС?
Я использую BGI драйверы от Borlanda и Jordan Hargraphix Software(svga256.bgi, svga64k.bgi и ТД)
Так вот, то, что мыша не рисуется в режиме 800х600х256- черт с ним, но и границы перемещения не работают (ф-ции 7 и 8 прерывания 33h)
Что нить подскажете?



Вопрос отправлен: 23.12.2002, 18:26
Отправитель: Sensey

[Следующий вопрос >>] [Список вопросов]

Отвечает keleb-glin

Доброе время суток, Sensey!
Да, в высоких разрешениях хомяк может глючить, а посему предлагаю тебе вручную заняться его ( курсора ) прорисовкой - узнаёшь новые координаты мыша - и вперёд, а лучше обработчика мышиных событий забацать ( см. доки по int 33h )


Ответ отправлен: 27.12.2002, 14:58
Отправитель: keleb-glin


Отвечает Dark_Lord

Приветствую Вас, Sensey!
А зачем тебе bgi. Не используй их, я помниться на асме 1024х768х64К мышу нормально сделал!

Ответ отправлен: 24.12.2002, 18:23
Отправитель: Dark_Lord


 Вопрос № 2247

Уважаемые эксперты, помогите пожалуйста как можно быстрее
Как реализовать вот этот кусок
mov ah,3Fh
mov cx,0FFFFh-offset buffer <- Вот тут проблема
mov dx,offset buffer
int 21h
mov si,ax



Вопрос отправлен: 23.12.2002, 19:08
Отправитель: Marilyn Manson

[Следующий вопрос >>] [Список вопросов]

Отвечает Beeblebrox

Добрый день, Marilyn Manson!
mov ah,3Fh
mov cx,-(offset buffer+1)
mov dx,offset buffer
int 21h
mov si,ax


Ответ отправлен: 23.12.2002, 19:25
Отправитель: Beeblebrox


Отвечает Broken Sword

Доброе время суток, Marilyn Manson!
а чего проблема - значение FFFF-offset buffer высчитывается на этапе компиляции, поэтому никакой проблемы нет - просто в CX ложится число (уже вычисленное). а проблема здесь в in t21h. конечно быстрее через порты все делать

Ответ отправлен: 23.12.2002, 20:00
Отправитель: Broken Sword


Отвечает Bob Johnson

Доброе время суток, Marilyn Manson!
Я думаю, что:
mov ax, offset Buffer
not ax


Ответ отправлен: 25.12.2002, 21:41
Отправитель: Bob Johnson



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (40)
C / C++ (29)
Perl (5)
Delphi (22)
Pascal (23)
Basic / VBA (11)
Java / JavaScript (7)
PHP (4)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (32)
Windows NT/2000/XP (28)
"Железо" (31)
Поиск информации (13)
Администратору
Windows NT/2000/XP (11)
Linux / Unix (14)
Юристу
Гражданское право (7)
Семейное право (3)
Трудовое право (4)
КоАП (2)

Отправить вопрос всем экспертам выбранной рассылки.




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


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

В избранное