Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 705
от 12.03.2004, 03:40
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 5078 Отправлено ответов: 14008 Активность: 275.8 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
Foamplast Статус: Опытный Общий рейтинг: 155.49 URL: мой личный сайт [Подробней >>] |
Snowm@n Статус: Доверительный Общий рейтинг: 119.68 [Подробней >>] |
Gibbel Статус: Профессиональный Общий рейтинг: 105.8 URL: Savage Metal Club - жизнь в стиле рок-н-ролл Телефон: +7 901 710 3146 [Подробней >>] |
vitya Статус: Профессиональный Общий рейтинг: 108.79 [Подробней >>] |
Евгений Иванов Статус: Профессиональный Общий рейтинг: 133.6 URL: Super Assembler Software Телефон: Пчёлка +7 905 6601206 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 116.52 [Подробней >>] |
_vt Статус: Профессиональный Общий рейтинг: 117.77 [Подробней >>] |
Pawel Статус: Профессиональный Общий рейтинг: 163.48 [Подробней >>] |
ASMодей Статус: Профессиональный Общий рейтинг: 111.88 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 5046. Уважаемые эксперты, подскажите пожалуйста какую систему управление сайтом выбрать. Я слышал, что сущ... (ответов: 1)
Вопрос № 5047. Как работать на прямую с видио памятью? Программа работает в реальном режиме, и должна рисовать на э... (ответов: 3)
Вопрос № 5049. Доброго времени суток, ув. эксперты! Есть ли функция типа GetOpenFileName, но для директорий (ака в ... (ответов: 3)
Вопрос № 5050. Здравствуйте эксперты! Какой сообщение получает контрол, когда на него "наезжает" курсор м... (ответов: 3)
Вопрос № 5052. драсьти... честно говоря я уже начинаю подумывать: "а мож я тупой??" ну что-то ничего не п... (ответов: 2)
Вопрос № 5053. Здравствуйте, вы не подскажите где в нете можно найти информацию о СОВРЕМЕННОМ сервисе BIOS. В частн... (ответов: 1)
Вопрос № 5055. Привет эксперты. Помогите в программе под винду вырубить многозадачность. На сколько я знаю в реаль... (ответов: 2)
Вопрос № 5056. Для чего иногда в начале кода используют дельта смещение, это что антиотладочный метод или что? Прим... (ответов: 2)
Вопрос № 5057. Уважаемые эксперты! Если у меня поступают данные в буфер малыми порциями (скажем по 8 байт) и мне н... (ответов: 4)
Вопрос № 5058. Доброе время суток, знатоки Ассемблера! Решаю задачу для многозадачной ОC (совместимой с Win32). Над... (ответов: 2)
Вопрос № 5059. Доброго времени суток уважаемые эксперты! Уже 3-ю неделю парюсь над этим примером: Задан любой тек... (ответов: 3)
Вопросов: 11, ответов: 26
Вопрос № 5046 |
Уважаемые эксперты, подскажите пожалуйста какую систему управление сайтом выбрать.
Я слышал, что существует система управления сайтом Битрикс(www.bitrix.ru)
Также существует множество других системам управления сайта, их очень много. Часть из них можно посмотреть на сайте www.cmslist.ru
Вопрос. Подскажите пожалуйста какую систему лучше выбрать, чтобы она была такая же функциональная как Битрикс, и такая же доступная как phpnuke
Вопрос отправлен: 05.03.2004, 01:22
Отправитель: Alexey
[Следующий вопрос >>] [Список вопросов]
Отвечает Foamplast
Добрый день, Alexey!
Выбирай NASM.
Или пиши в другую рассылку.
Ответ отправлен: 06.03.2004, 14:45
Отправитель: Foamplast
Вопрос № 5047 |
Как работать на прямую с видио памятью?
Программа работает в реальном режиме, и должна рисовать на экране картинку не используя функции BIOS.
Можно-ли задавать разрешение свыше 800Х600(1024Х768 ...) и высокую цветность 16,24,32бит.
Можно-ли задавать частоту обновления?
Желательно с примерами или выдержками кода.
Спасибо.
Вопрос отправлен: 05.03.2004, 12:29
Отправитель: ProgramMan
[Следующий вопрос >>] [Список вопросов]
Отвечает --- Нет данных ---
Доброе время суток, ProgramMan!
Для этого лучше использовать ф-ии VESA BIOS (цветов до 16М, разрешение до 1280*1024 )
Ответ отправлен: 05.03.2004, 18:16
Отправитель: --- Нет данных ---
Отвечает Snowm@n
Приветствую Вас, ProgramMan!
Можно, но для этого нужен драйвер.
Ответ отправлен: 05.03.2004, 20:46
Отправитель: Snowm@n
Отвечает Foamplast
Здравствуйте, ProgramMan!
Рисовать на экране - пожалуйста. А вот задавать режим уже сложнее без BIOS. У видеоадаптера куча портов, причём их назначение может отличаться в разных моделях.
Проще всего установить 32-разрядный режим с помощью BIOS, например, режимы 115h - 122h, а затем прямо писать в память структуры типа {r,g,b,0}. При этом функцию BIOS надо вызывать их реального режима, поэтому ты замучаешься переключать банки памяти.
Если заинтересовался тем, как спалить видеоплату, программируя порты ввода-вывода, пиши мне на foamplast@hexx.ru
Ответ отправлен: 06.03.2004, 14:53
Отправитель: Foamplast
Вопрос № 5049 |
Доброго времени суток, ув. эксперты!
Есть ли функция типа GetOpenFileName, но для директорий (ака в tree-view controle), если нет то как получить handle Desktop-а, не как окно, а как часть файловой системы!?
Вопрос отправлен: 05.03.2004, 17:37
Отправитель: Dark_Lord
[Следующий вопрос >>] [Список вопросов]
Отвечает Gibbel
Здравствуйте, Dark_Lord!
SHBrowseForFolder(). Хотя, некоторые умельцы и GetOpenFileName под это дело приспосабливают...
Ответ отправлен: 05.03.2004, 19:20
Отправитель: Gibbel
Отвечает --- Нет данных ---
Добрый день, Dark_Lord!
SHGetDesktopFolder
Ответ отправлен: 05.03.2004, 21:47
Отправитель: --- Нет данных ---
Отвечает vitya
Приветствую Вас, Dark_Lord!
SHBrowseForFolder.
Ответ отправлен: 06.03.2004, 10:54
Отправитель: vitya
Вопрос № 5050 |
Здравствуйте эксперты!
Какой сообщение получает контрол, когда на него "наезжает" курсор мыши? И вообще как
сделать рисованную кнопочку с тремя состояниями: простое, когда мышь над кнопкой и когда кнопка нажата?
Вопрос отправлен: 05.03.2004, 21:30
Отправитель: Sauerkraut (Sauerkraut@yandex.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает --- Нет данных ---
Доброе время суток, Sauerkraut!
На окно постуают события WM_MOUSEMOVE WM_LBUTTONDOWN, нужно их отслеживать, когда координаты курсора будут над нужным регионом надо будет выполнять необходимое действие, (например менять изображене кнопки)
Ответ отправлен: 05.03.2004, 21:58
Отправитель: --- Нет данных ---
Отвечает vitya
Здравствуйте, Sauerkraut!
WM_MOUSEMOVE. И создаешь OwnerDraw кнопку и переезжаешь его обрисовку .
Ответ отправлен: 06.03.2004, 10:52
Отправитель: vitya
Отвечает Евгений Иванов
Доброе время суток, Sauerkraut!
WM_MOUSEMOVE
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 06.03.2004, 14:28
Отправитель: Евгений Иванов
Вопрос № 5052 |
драсьти...
честно говоря я уже начинаю подумывать: "а мож я тупой??"
ну что-то ничего не понятно, я тут еще Зубкова немножко читаю, так вот там в оазделе Управляющие структуры есть такая фенька, как конечные автоматы, сначала там обьясняется как проверками передовать управление в различные участки кода при разных состояниях переменной-флага, а потом описан другой метод, вот тут и не понятно каким образом управление передается (тем более там написано, что оно передается без проверок)
теперь можно посмотреть код....
у меня тока одно предположение, что в переменной state лежит смещение, и к ниму в коде надо прибавлять определенной число, чтобы он перешел на определенную метку, правильно???
Приложение:
Вопрос отправлен: 06.03.2004, 06:40
Отправитель: очень хочу научиться
[Следующий вопрос >>] [Список вопросов]
Отвечает --- Нет данных ---
Приветствую Вас, очень хочу научиться!
В переменной State хранится адрес метки, на которую передается управление, в нее записывается новое значение при выполнении условия
Приложение:
Ответ отправлен: 07.03.2004, 18:13
Отправитель: --- Нет данных ---
Отвечает Ayl
Добрый день, очень хочу научиться!
Судя по всему, этот код является частью процедуры, вызываемой из основной программы (в конце каждого участка кода стоит ret). При получении управления первая команда процедуры (jmp state) передает управление на соответствующую строчку, согласно текущему состоянию КА. При первом проходе - на state_0. В конце каждого куска производится изменение текущего состояния КА по правилу:
state_0 -> state_1 -> state_2 -> state_3 -> state_0.
Текущее состояние заносится в переменную state:
mov state, OFFSET state_N, где N равно 0, 1, 2 или 3.
> у меня тока одно предположение, что в переменной state лежит смещение, и к ниму в коде надо прибавлять определенной число, чтобы он перешел на определенную метку, правильно
Почти. В переменной state действительно лежит смещение, но к нему ничего не нужно прибавлять, т.к. там уже находится реальный адрес первой команды для выполнения операции, определяемой состоянием КА.
Ответ отправлен: 09.03.2004, 15:50
Отправитель: Ayl
Вопрос № 5053 |
Здравствуйте, вы не подскажите где в нете можно найти информацию о СОВРЕМЕННОМ сервисе BIOS. В частности о его возможностях по работе с больщими дисками
Вопрос отправлен: 06.03.2004, 14:43
Отправитель: Pin
[Следующий вопрос >>] [Список вопросов]
Отвечает --- Нет данных ---
Добрый день, Pin!
В книжке Кулакова все прикольно расписанно "Программирование На Аппаратном Уровне"
Ответ отправлен: 06.03.2004, 21:39
Отправитель: --- Нет данных ---
Вопрос № 5055 |
Привет эксперты.
Помогите в программе под винду вырубить многозадачность.
На сколько я знаю в реальном режиме процессор многозадачности не поддерживает. И я решил перейти в реальный режим. Но вот только ошибка выскакивает. Кстати проц у меня Athlon.
Еще может кто знает как в XP привелегированными командами можно воспользоваться? А то пишу в программе cli а она мне выдает в XP, что команда привелигерованная и на работает.
Приложение:
Вопрос отправлен: 06.03.2004, 16:21
Отправитель: gozz
[Следующий вопрос >>] [Список вопросов]
Отвечает --- Нет данных ---
Приветствую Вас, gozz!
Из под WIN32 перейти в реальный режим не получится, т.к. не позволит само ядро, и из реального в защищенный перейти и программу выполнять не так просто, нужно куууучу всего сформировать и.т.д.
Ответ отправлен: 06.03.2004, 21:39
Отправитель: --- Нет данных ---
Отвечает _vt
Здравствуйте, gozz!
Судя по-всему, у Вас не слишком ясные представления о работе процессора. Реальный режим - это сохранившийся для совместимости с 16-разрядными процессорами режим, в котором можно адресовать 1мБ памяти, не более. Все процессоры, начиная с 386, работают в защищенном режиме, адресующем до 4гБ (в PIV -еще больше)памяти и имеющие аппаратную поддержку многозадачности и четырехуровневой привилегированности программ. Т.к. программы "под Винду" работают в среде, предоставляемой "Виндой"(а это 32-разрядный защищенный режим), то "вырубить" многозадачность нельзя. И по поводу многозадачности - ее можно реализовать и на 16-разрядном процессоре 8088, не имеющим аппаратной реализации многозадачности, но на более современных процессорах это реализуется гораздо проще. И кстати, способ перехода в защищенный режим у Вас в приложении используется на процессорах 80286 - 16-разрядный защищенный режим. Для перехода в защищенный режим на современных процессорах манипулируют с регистром cr0. Более подробно - в соответствующей литературе.
--- E-Man 1.5+ : Life begins at 1000 Mhz!
Ответ отправлен: 06.03.2004, 22:39
Отправитель: _vt
Вопрос № 5056 |
Для чего иногда в начале кода используют дельта смещение, это что антиотладочный метод или что?
Пример получение дельта смещения:
Call Get
Get:
pop ebp
sub ebp,offset Get
Спасибо всем кто поможет.
Вопрос отправлен: 07.03.2004, 02:45
Отправитель: Dr. (doktor_lektor@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Ayl
Приветствую Вас, Dr.!
Это не антиотладочный метод, хотя его можно и так использовать. Чаще всего это применяется в вирусах и в прикрепляемых модулях защиты программ. Смысл в том, что если надо свою процедуру вставить в другую программу без перекомпиляции, то получается следующая картина:
наш модуль
XXXX <- точка входа модуля на этапе компиляции
YYYY <- OFFSET вычислен на этапе компиляции
чужая программа с добавленным нашим модулем
ZZZZ <- точка входа нашего модуля в чужой программы
YYYY <- OFFSET вычислен на этапе компиляции
Т.к. точки входа модуля не совпадают, то для доступа к элементам нашего модуоя надо подкорректировать адрес на величину ZZZZ - XXXX. Это и выполняет приведенный тобой код.
Ответ отправлен: 09.03.2004, 16:01
Отправитель: Ayl
Отвечает Foamplast
Приветствую Вас, Dr.!
http://fly.cc.fer.hr/~lethe/asmjournal/html/apj_7/Extending%20DOS%20Executables.shtml
(перевод с англ.)
Вставляя код, приходится сталкиваться со следующей проблемой: так как код может располагаться по любому смещению в памяти, он не может зависеть от абсолютных адресов данных, получаемых при компиляции из меток данных. Для решения этой проблемы используется техника, называемая вирусописателями "дельта-смещением". Дельта-смещение - это разница между реальным и полученным при компиляции адресами данных. Когда наш код обращается к данным, он добавляет дельта-смещение к адресам времени компиляции, чтобы получить верный адрес времени выполнения. Следующий участок кода вычисляет дельта-смещение.
call GET_START
GET_START:
pop bp
sub bp, offset GET_START
Call запихивает в стек значение регистра ip, являющееся реальным адресом времени выполнения метки "GET_START". Вычитая адрес времени компиляции из реального мы получаем дельта-смещение.
Ответ отправлен: 10.03.2004, 19:07
Отправитель: Foamplast
Вопрос № 5057 |
Уважаемые эксперты! Если у меня поступают данные в буфер малыми порциями (скажем по 8 байт) и мне нужно
сохранять их в файл (WriteFile), я вызываю WriteFile для каждых 8 байт, и, если комп отключится, то я потеряю
последние 8 байт, либо функция WriteFile будет заполнять свой буфер и не сразу сбрасывать данные на диск, и я
потеряю больше данных (сколько?) и мне нет смысла вызывать многократно WriteFile, а выделить буфер аналогичный
буферу WriteFile (сбрасывать данные в файл при заполнении буфера) и работать быстрее?
Вопрос отправлен: 07.03.2004, 14:28
Отправитель: Alex
[Следующий вопрос >>] [Список вопросов]
Отвечает vitya
Добрый день, Alex!
Будет ли WriteFile буфферизировать данные - зависит от флагов в CreateFile - е. Если задать соответсвующим образом эти флаги - тогда потерь не будет.
Ответ отправлен: 07.03.2004, 14:32
Отправитель: vitya
Отвечает Snowm@n
Приветствую Вас, Alex!
В худшем случае потеряешь 8 байт.
Ответ отправлен: 07.03.2004, 22:05
Отправитель: Snowm@n
Отвечает --- Нет данных ---
Приветствую Вас, Alex!
Запись происходит при вызове WriteFile, поэтому ты потеряеш последние 8 Байт
Ответ отправлен: 07.03.2004, 17:56
Отправитель: --- Нет данных ---
Отвечает Gibbel
Приветствую Вас, Alex!
При создании/открытии файла функцией CreateFile вы можете указать, будут ли буферизироваться данные, либо они будут писаться непосредственно на диск. По умолчанию буферизация включена. Для отключения необходимо установить флаги FILE_FLAG_NO_BUFFERING и FILE_FLAG_WRITE_THROUGH в параметре dwFlagsAndAttributes функции CreateFile.
Ответ отправлен: 09.03.2004, 12:59
Отправитель: Gibbel
Вопрос № 5058 |
Доброе время суток, знатоки Ассемблера!
Решаю задачу для многозадачной ОC (совместимой с Win32).
Надо, что бы одна прога записывала массив в оперативную память, а другая прога этот массив читала. Стандарнтые функции С++ не помогают. Как это сделать с помощью Ассемблера, не подскажете?
Спасибо за ответ!
Вопрос отправлен: 08.03.2004, 00:13
Отправитель: lexa
[Следующий вопрос >>] [Список вопросов]
Отвечает Pawel
Добрый день, lexa!
Вы не пробывали создать массив в своей области памяти,и другой прогой читать данные из него. Или воспользоваться WinApi(если вы пишите под виндовс).
Решение такой задачи на asm зависет от защиты ОС.
mov [100h],ax - пишем байт из AX в память по адресу 100h
mov ax,[100h] - читаем байт в AX из память по адресу 100h
Ответ отправлен: 08.03.2004, 13:37
Отправитель: Pawel
Отвечает ASMодей
Приветствую Вас, lexa!
Если эта ОС совместима с Win32, то попробуй использовать средства IPC (InterProcess Communications). В частности - разделяемую память или проецируемые в память файлы.
Ответ отправлен: 11.03.2004, 08:04
Отправитель: ASMодей
Вопрос № 5059 |
Доброго времени суток уважаемые эксперты!
Уже 3-ю неделю парюсь над этим примером:
Задан любой текстовый файл, без знаков переноса (предполагается что строки разделены кодом 13,10), содержащий текст на естественном языке. Необходимо вывести список номеров строк, в которые входит первое слово данного текста. А результат записать во второй текстовый файл.
Пробовал хотя бы найти и записать какой-нибудь символ (типа 'а') - ничего, видимо что-то с записью в файл напортачил или вобще все никуда не годится. Я примерно представляю, что нужно прочитать первое слово до пробела(код 20), или то как сравнить любой символ с байтом в буфере. НО КАК сравнить ЦЕЛОЕ СЛОВО с тем, что лежит в буфере, да еще при этом как-то нумеровать строки, и записать номера нужных строк в другой файл... Для меня, пока, остается загадкой.
Вся надежда на Вас эксперты! Если у Вас есть хотя бы похожие примеры присылайте, я буду рад даже этому.
ЗАРАНЕЕ БЕЗМЕРНО ВСЕМ БЛАГОДАРЕН!!!
Приложение:
Вопрос отправлен: 08.03.2004, 03:37
Отправитель: Beginner (_zipcode@rambler.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Добрый день, Beginner!
У тебя всё более менее нормально, не считая вот этих грубых ошибок.
;создаем файл itog.txt
mov ah,3ch
mov cx,32
lea dx,PATH2
int 21h
jc EXIT
; НЕ НУЖНО ЕГО ОТКРЫВАТЬ, ОН УЖЕ СОЗДАЛСЯ
; ;открываем его
; mov ax,3d01h
; lea dx,PATH2
; int 21h
; jc ER
mov HANDLE2,ax
;ставим указатель
mov bx,HANDLE1
xor cx,cx
xor dx,dx
mov ax,4200h
int 21h
READ:
;читаем
lea dx,BUFER ;#
mov cx,100 ;#
mov ah,3fh
int 21h
jc EXIT
FIND:
mov bx,HANDLE1
dec ax
js CLOSE1
cmp byte ptr BUFER,'a'
jne FIND
REC:
;пишем в itog.txt
mov bx,HANDLE2
mov ah,40h
;! inc cx
; inc cx
lea dx,BUFER
mov cx,1
int 21h
jc EXIT
jmp FIND
ER:
mov ah,9
lea dx,ERROR
int 21h
CLOSE1:
mov ah,3eh
mov bx,HANDLE1
int 21h
CLOSE2:
mov ah,3eh
mov bx,HANDLE2
int 21h
EXIT:
mov ah,4ch
int 21h
CODE ends
end BEGIN
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 08.03.2004, 21:19
Отправитель: Евгений Иванов
Отвечает Pawel
Здравствуйте, Beginner!
Зачем ты откарываешь фаил второй раз?
...
mov ax,3d01h
lea dx,PATH2
int 21h
jc ER
...
Вообше-то всё должно работать.
Ответ отправлен: 09.03.2004, 12:36
Отправитель: Pawel
Отвечает Ayl
Здравствуйте, Beginner!
Да очень просто. Заводишь переменную, которая будет считать строки. Вначале она равна 0. Тебе нужна процедура, считывающая в память одну строку из файла. Она же будет корректировать счетчик строк.
Далее. Прочитав первую строку выделяешь самое первое слово и сохраняешь его в переменной. Записываешь в результирующий файл 1 (в первой строке слово всегда есть).
Считываешь очередную строку из файла. Проверяешь вхождение слова в эту строку. Делается это, например, так. Ищешь первую букву слова в строке. Далее сравниваешь 2 строки посимвольно до первого несовпадения либо пока количество сравнений не превысит длину строки. Проверяешь, является ли текущий символ в строке разделителем. Если является - выводишь в файл текущий номер строки. Если нет или если обнаружили несовпадение символов - восстанавливаем позицию первого символа проверяемого слова в строке и продолжаем поиск первой буквы.
Как только строка закончится - переходишь к чтению следующей. И так продолжаешь до конца файла.
Ответ отправлен: 09.03.2004, 16:15
Отправитель: Ayl
Форма отправки вопроса |
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
(C) 2002-2003 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (30) C / C++ (21) Perl (4) Builder / Delphi (20) Pascal (22) Basic / VBA (9) Java / JavaScript (7) PHP (14) Криптография (7) WinAPI (16) Радиоэлектроника (11) |
Пользователю Windows 95/98/Me (41) Windows NT/2000/XP (61) "Железо" (36) Поиск информации (20) |
Администратору Windows NT/2000/XP (29) Linux / Unix (12) |
Юристу Гражданское право (14) Семейное право (12) Трудовое право (12) КоАП (10) |
Отправить вопрос всем экспертам выбранной рассылки.
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||