Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 583
от 02.07.2003, 17:20
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 3617 Отправлено ответов: 10623 Активность: 293.6 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
masquer Статус: Профессиональный Общий рейтинг: 137.13 [Подробней >>] |
Bob Johnson Статус: Профессиональный Общий рейтинг: 151.95 URL: Программирование [Подробней >>] |
_vt Статус: Профессиональный Общий рейтинг: 122.99 [Подробней >>] |
Алексей Статус: Начальный Общий рейтинг: 114.06 [Подробней >>] |
Tigran K. Kalaidjian Статус: Профессиональный Общий рейтинг: 120.43 URL: Методы оптимизации работы ПК [Подробней >>] |
baldr Статус: Профессиональный Общий рейтинг: 112.3 URL: Сайт об ОС DOS. Всем, кто любит эту ОС! [Подробней >>] |
uzhas (Игорь) Статус: Начальный Общий рейтинг: 102.27 [Подробней >>] |
Hangatyr Статус: Опытный Общий рейтинг: 114.7 [Подробней >>] |
Dark_Lord Статус: Профессиональный Общий рейтинг: 112.33 [Подробней >>] |
Igoryk Статус: Профессиональный Общий рейтинг: 112.26 URL: IgorykSoft [Подробней >>] |
Lynx Статус: Опытный Общий рейтинг: 121.65 Телефон: (8442) 750522 [Подробней >>] |
vitya Статус: Профессиональный Общий рейтинг: 108.1 [Подробней >>] |
Broken Sword Статус: Профессиональный Общий рейтинг: 121.85 URL: мой сайт [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 3586. Имеется OpenGL-программа, где по нажатию клавиши должно измениться значение вещественной переменной.... (ответов: 2)
Вопрос № 3587. Вопрос по сетевому программированию(часть 3) В первых строках моего письма хочу ещё раз поблагодарит... (ответов: 1)
Вопрос № 3589. Здравствуйте уважаемые тов. Эксперты! У меня вопрос про таймер апи. ; ##############################... (ответов: 2)
Вопрос № 3590. А куда делся сайт Kalashnikoff.ru? Раньше там много всякого полезного было, электронные книги и. т. ... (ответов: 6)
Вопрос № 3591. Здравствуйте уважаемые тов. Эксперты! Вот я прочитал что нужно всегда сохранять esi, esi, ebp, ebx к... (ответов: 4)
Вопрос № 3592. Уважаемые ГУРУ по asm подскажите пожалуйста, наверно самому начинающему в програмировании, с чего на... (ответов: 6)
Вопрос № 3593. Расскажите,пожалуйста,о принципе программирования на ASSEMBLER... (ответов: 6)
Вопрос № 3594. День добрый ! Подскажите, почему при базе равной нулю после перехода дальним прыжком на физический а... (ответов: 6)
Вопрос № 3595. Здравствуйте эксперты! Исходные данные: некий девайс поставляет данные со скоростью 22 мегабайта в ... (ответов: 2)
Вопросов: 9, ответов: 35
Вопрос № 3586 |
Имеется OpenGL-программа, где по нажатию клавиши должно измениться значение вещественной переменной. Функция ADD или SUB не работают так, как надо. Как мне изменить значение?
Вопрос отправлен: 27.06.2003, 18:03
Отправитель: Tomas (bataew@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Доброе время суток, Tomas!
Ну так естественно, потому что нудно fadd & fsub использовать
Ответ отправлен: 27.06.2003, 18:36
Отправитель: masquer
Отвечает Bob Johnson
Здравствуйте, Tomas!
Для работы с числами с плавающей точкой используется сопроцессор:
fld [my_var]
fadd [my_add]
fstp [my_var]
...
my_var dq 1.0
my_add dq 0.5
* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---
Ответ отправлен: 29.06.2003, 21:06
Отправитель: Bob Johnson
Вопрос № 3587 |
Вопрос по сетевому программированию(часть 3)
В первых строках моего письма хочу ещё раз поблагодарить
экспертов Bob Jonson & Broken Sword за помощь
и конструктивную критику соответственно.
Так вот я написал, что задумывал, а именно класс сокета,
но совершенно не представляю, как его протестировать на
производительность (и надёжность). Вот и подумал: кому, как не экспертам по программированию на Асме, разбираться в таких вопросах.
Вуть проблемы: имеется класс, инкапсулирующий сетевой протокол. Нужно сравнить его производительность и надёжность с... да я даже не знаю с чем сравнивать нужно.
ВАЖНОЕ ЗАМЕЧАНИЕ: Этот класс рассчитан в основном, чтобы писать примерно такой код:
socket << a << b << c << d << flush;
т.е. всевозможные алгоритмы сериализации не засорять интерфейсом Backerley Sockets.
Код сыроват, так что вышлю его только тем, кто попросит
mailto:littlejohn@tut.by
ЗЫ (полный оффтопик - ответ Broken Sword) Вы спрашивали, как я вижу себе возможность оценивать качество ответов экспертов. Очень просто: в конце недели мне приходит письмо, что дескать вопрос более обсуждению не подлежит. Так вот там можно напичкать чекбоксов, и голосуй на здоровье за того, на кого глаз положил. А заменять старую статистику я не предлогал, я хотел её только дополнить вышеописанным образом.
ЗЗЫ Можно, чтоб эксперы тоже голосовали. Вот мой прошлый вопрос стал бы самым тупым вопросом недели :)
Вопрос отправлен: 28.06.2003, 00:44
Отправитель: Antonio
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Доброе время суток, Antonio!
Производительность зависит в основном от толщины канала, по которому у тебя идет обмен данными. Все равно, функции ведь для передачи и приема данных одни и те же... Если только канал уже достаточно толстый.... Тогда просто возьми свой компьютер, напиши программку, которая будет наипростейшим образом передавать определенный блок данных другой программке, а ты посчитаешь, сколько времени это займет. Таким образом рассчитаешь скорость передачи. Теперь заставь передать такой же блок данных твою программу и посмотри скорость в ней, и сравни с максимальной (той, что в предыдущем случае). Другого ничего в голову не приходит.
В остальном, минимизируй дополнительную информацию, которая передается в канал вместе с переменными.
По поводу оценок - если все сделать именно так (т.е. дать право читателям оценивать ответ), то уверен, что будет очень много несогласных среди экспертов (особенно молодых), т.е. надо будет как-то разбираться с их жалобами, потому как и вопросы (как ты сам заметил) надо на тупость оценивать. В общем все это достаточно сложно...
* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---
Ответ отправлен: 29.06.2003, 21:06
Отправитель: Bob Johnson
Вопрос № 3589 |
Здравствуйте уважаемые тов. Эксперты!
У меня вопрос про таймер апи.
; #########################################################################
.486
.model flat, stdcall
option casemap :none ; case sensitive
; #########################################################################
include masm32includewindows.inc
include masm32includeuser32.inc
include masm32includekernel32.inc
include masm32includegdi32.inc
includelib masm32libuser32.lib
includelib masm32libkernel32.lib
includelib masm32libgdi32.lib
.data?
timerID dd ?
.code
timertest proc hWnd:DWORD, uMsg:DWORD, idEvent:DWORD, dwTime:DWORD
invoke KillTimer, 0, timerID
invoke MessageBox,0,0,0, MB_TOPMOST
invoke ExitProcess, 0
timertest endp
main proc
invoke SetTimer, 0,0,100, offset timertest
mov timerID, eax
;ЕСЛИ ВОТ ТАК, ТО РАБОТАЕТ (ТОЕСТЬ ЗАДЕРЖКА ПРОГИ ПОКА НЕ ОТВЕЧУ НА MSGBOX...)
invoke MessageBox,0,0,0, 0
ВОПРОС:
;почему программа просто ЗАВИСАЕТ и timertest так и не получает управления если я использую вместо msgbox для idle loop прораммы один из 2х вариантов ниже
;(1)jmp $
;* ИЛИ *
;(2)@@: invoke Sleep, 1000
;jmp short @b
main endp
end main
;;;;;;;;;;;;;;;;;;;;
а если у меня в программе например такой код
proc1 proc
invoke setTimer на offset tPROC через 100мкс
mov ecx, много
@@: do_stuff
do_srtuff...
турум
loop @@
proc1 endp
tProc proc
тут всякое тоже
tProc endp
то почему tProc так и не получит управления???
PS: Огромное спасибо Rusfaq экспертам, WASM.RU и Izzelion подарившем мне свободу!
Вопрос отправлен: 28.06.2003, 03:09
Отправитель: Эдвард Самохвалов (zeleniy_kot@yahoo.com)
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Доброе время суток, Эдвард Самохвалов!
Все это потому, что, как ты думаешь, каким образом процедура таймера получает управление? В общем случае винды помещают сообщение WM_TIMER в очередь сообщений твоего потока. Ну и что, что у тебя нет окон? А очередь сообщений может быть и без окон. Так вот, когда ты вызываешь DispatchMessage, она обычно передает управление оконной процедуре окна, которому это сообщение адресовано. В случае, если пришло сообщение от таймера без hwnd, но с процедурой, то именно DispatchMessage и передает ей управление. При этом вызов получается в контексте того потока, что вызвал DispatchMessage, что очень удобно.
В итоге: тебе нужно создать message loop и использовать его для задержки (он есть в функции MessageBox, поэтому с ней все работает).
* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---
Ответ отправлен: 29.06.2003, 21:06
Отправитель: Bob Johnson
Отвечает _vt
Доброе время суток, Эдвард Самохвалов!
> ЕСЛИ ВОТ ТАК, ТО РАБОТАЕТ (ТОЕСТЬ ЗАДЕРЖКА ПРОГИ ПОКА НЕ ОТВЕЧУ НА MSGBOX...)
Зачем мудрить, для того, чтобы программа задержалась до ответа MessageBox'a, достаточно вызвать MessageBox с флагом MB_APPLMODAL.
invoke MessageBox,0,"Example Text","Modal MessageBox", MB_APPLMODAL or MB_OK
> почему программа просто ЗАВИСАЕТ ... если я использую ... один из 2х вариантов ниже
Да потому что это бесконечные циклы!!! Они не могут не зависнуть...
---===*** E-Man 1.2 - Powerful toy***===---
Ответ отправлен: 30.06.2003, 08:56
Отправитель: _vt
Вопрос № 3590 |
А куда делся сайт Kalashnikoff.ru? Раньше там много всякого полезного было, электронные книги и. т. д. А на RusFAQ.ru я этого ненашёл
Вопрос отправлен: 28.06.2003, 04:43
Отправитель: Юзер
[Следующий вопрос >>] [Список вопросов]
Отвечает Алексей
Приветствую Вас, Юзер!
Kalashnikoff.ru больше не существует! Всё необходимое ты можешь найти на сайте Boba Johnsona
http://www.bobjohnson.nm.ru
Ответ отправлен: 28.06.2003, 17:07
Отправитель: Алексей
Отвечает _vt
Добрый день, Юзер!
http://www.wasm.ru/
---===*** E-Man 1.2 - Powerful toy***===---
Ответ отправлен: 30.06.2003, 08:56
Отправитель: _vt
Отвечает Tigran K. Kalaidjian
Здравствуйте, Юзер!
Качайте http://www.rusfaq.ru/issues.exe
Ответ отправлен: 29.06.2003, 11:37
Отправитель: Tigran K. Kalaidjian
Отвечает Bob Johnson
Добрый день, Юзер!
НУ НЕТ ЕГО БОЛЬШЕ.
* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---
Ответ отправлен: 29.06.2003, 23:15
Отправитель: Bob Johnson
Отвечает baldr
Здравствуйте, Юзер!
Да, на rusfaq.ru программ и ссылок прежних не осталось. Зато сама организация процесса :) стала лучше!
Сейчас тебе Bob Johnson ссылку на свой сайт даст. Там бОльшая часть есть...
Ответ отправлен: 28.06.2003, 09:35
Отправитель: baldr
Отвечает uzhas (Игорь)
Приветствую Вас, Юзер!
В архивах уже есть ответ на этот неоднократно задаваемый
вопрос- сам искал.
Его нет в природе. Часть архива находится у Боба
Джонсона.
А если что-то ещё интересует, то вот спиок того,
что я нашёл в нете:http://www.wasm.ru/, http://www.exetools.com/- дистрибутивы; http://www.agava.ru/ - что-то интересное, что - не помню;http://home.od.ua/~blackw/ -
тоже, кажется, дистрибуты;http://noro.chat.ru/easrus.html- Easy Assembler Shell.
Ответ отправлен: 28.06.2003, 13:01
Отправитель: uzhas (Игорь)
Вопрос № 3591 |
Здравствуйте уважаемые тов. Эксперты!
Вот я прочитал что нужно всегда сохранять esi, esi, ebp, ebx к винда их всегда использует и не ожидает измения, акак насчёт ESP?
А почему у Зубков использует EBX и он у него действительно не меняется? Ведь сказанно же про него тоже выше!
И самое главное, есть ли такой регист/ы который не изменяется после вызовов api? (тут как-то хотел loop сделать... не работает! - потом в отладчике смотрю - ба! они же все меняются сволочи =( Значит api не ответвственны за восстановления регистров, а что теперь тока push//pop вокруг api вызовов ставить ?
Вопрос отправлен: 28.06.2003, 08:45
Отправитель: Эдвард Самохвалов (zeleniy_kot@yahoo.com)
[Следующий вопрос >>] [Список вопросов]
Отвечает Hangatyr
Здравствуйте, Эдвард Самохвалов!
1. Их нужно сохранять (и восстанавливать) в том случае если функция вызывается системой, как например, оконная процедура.
2. Те же самые, которые ты назвал - ESI, EBX, EDI, EBP. Содержимое же EAX, ECX, EDX не считается важным и, соответственно, меняется.
Ответ отправлен: 28.06.2003, 10:59
Отправитель: Hangatyr
Отвечает Dark_Lord
Здравствуйте, Эдвард Самохвалов!
Ты ж сам себе ответил в начале вопроса, АPI сохраняют только ESI,EDI,EBP,EBX, ESP всегда показывает на стек, поэтому чтоб вернуться из процедуры он тоже востанавливается (однако несоветую тебе его использовать для хранение значений) а остальные регистры, EAX,ECX,EDX естественно изменяются, поэтому цикл можно сделать с EBX.
Приложение:
Ответ отправлен: 29.06.2003, 11:11
Отправитель: Dark_Lord
Отвечает Bob Johnson
Доброе время суток, Эдвард Самохвалов!
> Вот я прочитал что нужно всегда сохранять esi, esi, ebp, ebx к винда их всегда использует и не ожидает измения, акак насчёт ESP?
Не сохраняй, никто тебя не заставляет, только как у тебя программа будет работать, если ты ей стек перенесешь хрен знает куда?
> А почему у Зубков использует EBX и он у него действительно не меняется?
Пример пожалуйста.
> И самое главное, есть ли такой регист/ы который не изменяется после вызовов api?
Есть! Именно ebx, ebp, esi, edi и esp.
------
Значения вышеназванных регистров не изменяет ни одна функция API. Поэтому их не должна изменять и любая твоя функция, которая вызывается из API (процедура окна, таймера, хука и т.д.). В основной же программе их изменять можно, т.к. она заканчивается функцией ExitProcess.
* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---
Ответ отправлен: 29.06.2003, 23:15
Отправитель: Bob Johnson
Отвечает Igoryk
Добрый день, Эдвард Самохвалов!
При вызове API результат выполнения возвращается в EAX, и очищается стек, следовательно меняются регистры EAX и ESP. Остальные регистры меняются в редких случаях. А сохранить их с помощью push, может вызвать сбой - данные в API передаются именно через стек!
Ответ отправлен: 28.06.2003, 13:21
Отправитель: Igoryk
Вопрос № 3592 |
Уважаемые ГУРУ по asm подскажите пожалуйста, наверно самому начинающему в програмировании, с чего начать изучение assembler(infa в Inete), я имею в виду самые азы asm.
Раньше гамился, чатился теперь понял что пора завязывать с этой бредятиной ;(
С уважением n0va
Вопрос отправлен: 28.06.2003, 10:58
Отправитель: n0va
[Следующий вопрос >>] [Список вопросов]
Отвечает _vt
Добрый день, n0va!
Зубков С.В - Программирование для DOS, Windows, Unix
---===*** E-Man 1.2 - Powerful toy***===---
Ответ отправлен: 30.06.2003, 08:56
Отправитель: _vt
Отвечает Bob Johnson
Здравствуйте, n0va!
Сходи на мою страницу, может там чего-найдешь: bobjohnson.nm.ru
* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---
Ответ отправлен: 29.06.2003, 23:15
Отправитель: Bob Johnson
Отвечает Алексей
Здравствуйте, n0va!
Скачай архив рассылки Калашникова с RusFaq.ru, можешь также взять книгу Юрова в качестве справочника (поищи в инете, ссылок полно), а также книгу Зубкова отсюда http://bobjohnson.nm.ru/files/zubkov.zip
А вообще почитал бы скачала архив этой рассылки, сколько раз уже спрашивали...
Ответ отправлен: 28.06.2003, 17:24
Отправитель: Алексей
Отвечает baldr
Добрый день, n0va!
Похвально... Но если опыта в программировании нет, то советую сначала изучить основы Basic, Pascal или C++...
Асм для начала очень труден и может отпугнуть... Можешь, конечно, достать книги Зубкова, Абеля и Нортона, но все=таки: попробуй бейсик или паскаль!
Ответ отправлен: 28.06.2003, 14:00
Отправитель: baldr
Отвечает Tigran K. Kalaidjian
Приветствую Вас, n0va!
Для начала:
О. Калашников "Ассемблер? Это просто!" (http://www.rusfaq.ru/issues.exe)
Для продолжения:
Юров "Ассемблер. Учебник"
Зубков "Ассемблер - язык неограниченных возможностей"
(см. на страничке Боба Джонсона)
Ещё очень неплохая штука - списки прерываний\портов\карты памяти и пр.справочные данные из архива Ральфа Брауна
Ну и архивы RusFAQ.ru и сама рассылка, естественно.
Ответ отправлен: 29.06.2003, 11:48
Отправитель: Tigran K. Kalaidjian
Отвечает Lynx
Приветствую Вас, n0va!
Я в этой рассылке зарегистрирован около полутора месяцев и слышу этот вопрос раз десятый. >| Зайди на RusFAQ.ru и посмотрив архиве рассылки ответы на подобные вопросы.
Ответ отправлен: 29.06.2003, 13:23
Отправитель: Lynx
Вопрос № 3593 |
Расскажите,пожалуйста,о принципе программирования на ASSEMBLER
Вопрос отправлен: 28.06.2003, 11:56
Отправитель: shuric
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Здравствуйте, shuric!
Сходи на мою страницу, в раздел files и скачай основные описания: bobjohnson.nm.ru
* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---
Ответ отправлен: 29.06.2003, 23:15
Отправитель: Bob Johnson
Отвечает Tigran K. Kalaidjian
Здравствуйте, shuric!
Качайте книгу Калашникова:
http://www.rusfaq.ru/issues.exe
И изучайте на здоровье !
Ответ отправлен: 28.06.2003, 16:59
Отправитель: Tigran K. Kalaidjian
Отвечает Алексей
Здравствуйте, shuric!
Принцип примерно следующий:
xor ecx,ecx
dec ecx
programing:
call GetAsmBook
m1:
call ReadBook
call IsReadComplete
test ax,ax
jnz m1
loop programing
:)
А вообще нужно конкретней вопросы задавать!
Ответ отправлен: 28.06.2003, 17:16
Отправитель: Алексей
Отвечает vitya
Приветствую Вас, shuric!
Прицип элементарен.
Берешь задачу. Придумываешь алгоритм.
Потом его кодишь в каком-нибудь редакторе,
а потом своим любимим компилятором + линкером компилируешь
и создаешь исполняемую программу.
Элементарно, не так ли?
:)
Ответ отправлен: 28.06.2003, 12:02
Отправитель: vitya
Отвечает Lynx
Добрый день, shuric!
Для начала тебе нужен компилятор, а потом выучишь синтаксис, а потом тебе ничто не поможет кроме твоей фантазии. :)))
Ответ отправлен: 29.06.2003, 13:23
Отправитель: Lynx
Отвечает _vt
Доброе время суток, shuric!
Такой же, как и на других языках...
---===*** E-Man 1.2 - Powerful toy***===---
Ответ отправлен: 30.06.2003, 08:56
Отправитель: _vt
Вопрос № 3594 |
День добрый !
Подскажите, почему при базе равной нулю после перехода дальним прыжком на физический адрес начала кода в защищенном режиме переходы на адреса, указанные tasm'ом для реального режима ( вроде 0250h), совершаются на заданную мной метку, а не конкретно на ,допустим, 0250h физический адрес, ведь , по идее, команда jmp кладет в регистр eip адрес метки, на которую должен быть совершен переход. Но это адрес совсем не соответствует физическому адресу этой метки. Так скажите, почему все-таки совершается правильный переход.
И еще, почему во многих источниках говорится, что окна98 не полностью 32-битная ось, я так понял, что говорящие это имеют ввиду, что окна используют досовские прерывания и переходят в реальный режим для их обслуживания. Это ли они имеет ввиду. По моему мнению все это фигня и говорящие это просто не знают ничего о PM. Если говорящие про окна98 что они не полностью 32 битные не правы ( в чем я не сомневаюсь), то почему нет нигде каких либо опровержений.
Вопрос отправлен: 28.06.2003, 14:52
Отправитель: Alexej (asm@e-mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Dark_Lord
Здравствуйте, Alexej!
1) при jmp short ты прыгаешьна расстояние от команды прыжка.
2) Win98 не совсем 32-битная, для совмести оставили кучу 16-битного кода!
Ответ отправлен: 29.06.2003, 11:17
Отправитель: Dark_Lord
Отвечает Broken Sword
Приветствую Вас, Alexej!
насчет первого вопроса - мы в реальном в базу кладем 0, а потом вычисляем ЛИНЕЙНЫЙ адрес метки входа (shl CS,4 + offset PM_entry), который СООТВЕТСТВУЕТ ФИЗИЧЕСКОМУ адресу.
насчет второго вопроса - имеются ввиду не досовские прерывания, а всякое барахло которое 9x использует от Win 3.1
Ответ отправлен: 29.06.2003, 17:41
Отправитель: Broken Sword
Отвечает Bob Johnson
Приветствую Вас, Alexej!
> сли говорящие про окна98 что они не полностью 32 битные не правы ( в чем я не сомневаюсь), то почему нет нигде каких либо опровержений
А что ты хочешь услышать? Официальное заявление от microsoft - "Да, win 98 не полностью 32-разрядный!". Услышишь, через года два, когда от его поддержки (и от всей линейки 9х) откажутся совсем.
Вот тебе текст из Windows 98 DDK (запускаем help, выбираем поиск, вводим "compatibility 16 bit", ищем - "Bitness", подойдет?):
For compatibility reasons, the Windows 95 system virtual machine executes as a 16-bit DPMI client. That implies that every Win32 application is considered a 16-bit application by the VMM. As a result, Win32 applications cannot communicate with VxDs by the same means that 16-bit Windows applications can (software interrupts, callbacks, VxD services, etc). Win32 applications must use the DeviceIOControl interface to communicate with VxDs that support device I/O calls.
Мало? На счет перехода в реальный режим скажу так: это вполне возможно в виндах (в этом случае на закладке "производительность" будет написано "внимание, система не настроена на оптимальную производительность и т.д."). А получается это, например, так: установим-ка 16-разрядный драйвер сканера (который в config.sys загружается до виндов) - и все, для работы со сканером винда будет переходить в 16-ти разрядный режим и вызывать его функции... На счет того, происходит ли это постоянно (при нормальной работе системы) - не знаю.
С такой самоуверенностью как у тебя тебе только в Microsoft идти работать.
* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---
Ответ отправлен: 29.06.2003, 23:15
Отправитель: Bob Johnson
Отвечает baldr
Здравствуйте, Alexej!
Винда 32-битная не полностью, потому как некоторые библиотеки ядра - все еще 16-битные. Например, user.dll... Это наследие win3.1, сделанное для совместимости. Прерывания винда не использует. В DOS-режим она тоже непереходит, ибо ей хватает эмуляции VCPI и DPMI.
Ответ отправлен: 28.06.2003, 15:20
Отправитель: baldr
Отвечает Igoryk
Здравствуйте, Alexej!
Если я не ошибаюсь, то переход jmp far действует несколько по-другому нежели jmp. При переходе в защищенный режим создается таблица дескрипторов, в которой помиомо всего прочего описываются сегментные регистры. Я так понимаю, jmp far в PM считывает смещение сегмента во всей памяти, и относительно его смещения соврешает переход.
Дело в том, что когда появилась Windows 3.1 - еще не операционная система, а только графическая оболочка DOS'а, то эта была соотвественно 16-ти битная ось. Затем появилась Win 95, которая стала "уже 32-битной" осью (а не графической оболочкой), но должна была поддерживать программы, которые шли под Win3.1. А Win98 не мог отпачковаться от Win95. Говорят, что полностью 32-битной стали оси начиная с WinNT...
Ответ отправлен: 29.06.2003, 14:54
Отправитель: Igoryk
Отвечает Hangatyr
Доброе время суток, Alexej!
1. Потому что смещение для команды jmp (в пределах одного сегмента)отсчитывается от команды, которая следует за ней, а не от начала сегмента.
2. Нет, прерывания DOS не используются. А говорят так потому что некоторые системные библиотеки содержат 16-разрядный код.
Ответ отправлен: 28.06.2003, 17:08
Отправитель: Hangatyr
Вопрос № 3595 |
Здравствуйте эксперты!
Исходные данные:
некий девайс поставляет данные со скоростью 22 мегабайта в секунду. Прием осуществляется так:
1) разрешаю связной плате генерировать прерывание
2) при получении его вызывается callback-функция, записывающая фрейм данных в буфер
3) выставляю флаг, что прерывание обработано, можно принимать следующий фрейм
Принятые данные нужно сохранять на диск в течение по меньшей мере 10-и секунд. Опробовано:
а) Если это делать до 3), то происходят пропуски фреймов, т.е. не обеспечивается максимальная скорость приема. Кэширование под XP эффективнее, пропуски одного-двух фреймов изредка (но и это недопустимо), под 98 периодически задержка до 2 секунд.
б) данные неоднородны, и RLE сжатие выигрыша по объему не дает, арифм. сжатие (LZ) сжимает в полтора раза, но напрягает процессор - опять же пропуски. Хаффмана не пробовал, но думаю, что примерно то же, что и c LZ.
в) MMF в памяти, запись данных туда, сброс на диск по окончании накопления - при заполнении свопа опять же начинаются тормоза. С 512 мег. оперативки это наступает позже, но все равно неотвратимо
г) Заранее заводится буферный файл нужного размера на диске, маппируется. Пропуски данных случаются
д) Дополнительный поток с несколько меньшим приоритетом, данные в главном потоке заносятся в потокозащищенный список, тут же демаскируется прерывание (3), а доп. поток потихоньку сбрасывает данные на диск, освобождая память. Требования по памяти несколько уменьшаются. Пропусков фреймов нет при указанном времени (10 сек, ок. 220 мегабайт), но постепенно список все же разбухает, вызывая свопирование.
Хотелось бы добиться увеличения времени непрерывной записи.
Возможно, кому-то приходилось сталкиваться с подобными задачами (при записи видеопотока, например, хотя его обычно сжимают).
Спасибо за ответы!
Вопрос отправлен: 28.06.2003, 15:18
Отправитель: Alex
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Приветствую Вас, Alex!
Тебе только остается комп апгрейдить. В первую очередь винт (может raid-массив поставить надо?).
Из того, что ты написал самый лучший вариант - последний, а запись лучше проводить в заранее созданный дефрагментированный файл нужного размера, расположенный как можно ближе к началу диска (там скорость больше). Есть вариант параллельного использования двух винчестеров (хотя это тот же raid, только программный).
Все-таки 22 мб/с это не мало для даже современного винчестера (у них линейная скорость около 40 мб/с), а у тебя же еще сама ось может что-то захотеть от винта.
Еще, выделяй буфер в памяти сразу же максимального объема, после чего проведи несколько холостых операций считывания из устройства и почитай свой буфер в никуда (чтобы винда выделила для него именно физическую память).
Если же вся описанная процедура очень важна, то докупи в компьютер памяти (если 10с = 220 мб, значит 1 гб на 35 - 40 секунд должно хватить, что видимо тебе и надо, а память сейчас стоит недорого).
* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---
Ответ отправлен: 29.06.2003, 23:15
Отправитель: Bob Johnson
Отвечает uzhas (Игорь)
Доброе время суток, Alex!
Мне бы тоже узнать ответ на этот вопрос, если можно! :-)
Ответ отправлен: 28.06.2003, 16:20
Отправитель: uzhas (Игорь)
Форма отправки вопроса |
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
(C) 2002-2003 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (38) C / C++ (24) Perl (4) Builder / Delphi (18) Pascal (25) Basic / VBA (8) Java / JavaScript (11) PHP (4) MySQL / MSSQL (5) |
Пользователю Windows 95/98/Me (29) Windows NT/2000/XP (24) "Железо" (21) Поиск информации (15) |
Администратору Windows NT/2000/XP (13) Linux / Unix (5) |
Юристу Гражданское право (7) Семейное право (3) Трудовое право (5) КоАП (4) |
Отправить вопрос всем экспертам выбранной рассылки.
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||