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

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.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
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.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.


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


В избранное