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

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


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

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

Выпуск № 517
от 06.04.2003, 18:20

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


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

Eugene
Статус: Профессиональный
Общий рейтинг: 109.31
URL: мощный файловый архив
[Подробней >>]
Samodelkin
Статус: Доверительный
Общий рейтинг: 135.35
[Подробней >>]
Igoryk
Статус: Профессиональный
Общий рейтинг: 124.23
URL: IgorykSoft
[Подробней >>]
 
masquer
Статус: Профессиональный
Общий рейтинг: 142.27
[Подробней >>]
keleb-glin
Статус: Опытный
Общий рейтинг: 108.93
[Подробней >>]
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 115.38
[Подробней >>]
 
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 150.48
URL: Программирование
[Подробней >>]
WNA
Статус: Начальный
Общий рейтинг: 106.22
[Подробней >>]
Gibbel
Статус: Профессиональный
Общий рейтинг: 108.31
URL: Страничка обо мне и моих друзьях
Телефон: +7 902 168 02 65
[Подробней >>]
 
Broken Sword
Статус: Профессиональный
Общий рейтинг: 124.4
URL: моя рассылка по Protected Mode
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 118.4
[Подробней >>]
DiGiT[old]
Статус: Профессиональный
Общий рейтинг: 111.2
[Подробней >>]
 
St
Статус: Опытный
Общий рейтинг: 109.07
[Подробней >>]


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

Вопрос № 2879. кому надо могу поделиться DDK XP... (ответов: 1)
Вопрос № 2880. Понимаю - вопрос совершенно глупый и ответ на него можно найти если искать, но времени мало, а пока ... (ответов: 6)
Вопрос № 2883. Приветствую Вас господа эксперты! Следующий кусок кода был написан и прекрасно работал под XP, а вот... (ответов: 3)
Вопрос № 2885. Еще раз здравствуйте. Вопрос 2883-результат кривого API-справочника. Следующий код должен устанавлив... (ответов: 1)
Вопрос № 2886. Хочу подправить експерта internet explorer может сохранять полностью html страницу с картинками в фо... (ответов: 2)
Вопрос № 2887. Здравствуйте эксперты! Подскажите как в программе под DOS можно получить объём оперативной памяти... (ответов: 5)
Вопрос № 2888. Здраствуйте эксперты! Ответьте пожелуйсто на следующие вопросы: Как запихать в edit больше 64Кб текс... (ответов: 4)
Вопрос № 2889. Столлингс "Операционные системы" Таненбаум "Современные ОС" Кто что может сказат... (ответов: 1)
Вопрос № 2890. Люди, помогите, пожалуйста... Я попробовал спрогать что-нить в Паскале с инлайнами, но некоторые про... (ответов: 2)

Вопросов: 9, ответов: 25


 Вопрос № 2879

кому надо могу поделиться DDK XP



Вопрос отправлен: 01.04.2003, 11:00
Отправитель: sergeysy (sergeysy@nm.ru)

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

Отвечает Eugene

Здравствуйте, sergeysy!
Положи в инете и ссылку закинь. А народ если хочет, скачает.

Ответ отправлен: 01.04.2003, 16:36
Отправитель: Eugene


 Вопрос № 2880

Понимаю - вопрос совершенно глупый и ответ на него можно найти если искать, но времени мало, а пока не нашел - ассемблером под Win32 начал заниматься совсем недавно, а программка нужна срочно. Вобщем, надо записать в конкретную определенную область памяти некое значение. Допустим по адрессу 05555555h. Попробовал так - ругается.
mov eax, 05555555h
mov [WORD ds:eax], 88h
Что не так?
Win32, MASM32.



Вопрос отправлен: 01.04.2003, 12:44
Отправитель: Ivan

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

Отвечает Samodelkin

Доброе время суток, Ivan!
ты можешь совбодно заносить значения в сегмент данных, либо стека ... если ты выходишь за их границы - это уже критическая ошибка... так что тебе надо будет создать сегмент данных куда попадает твоя ячейка 05555555h а потом записывай туда на здоровье что вздумается

Ответ отправлен: 02.04.2003, 11:06
Отправитель: Samodelkin


Отвечает Igoryk

Приветствую Вас, Ivan!
Насколько я знаю, eax никогда не признавался указателем на байт (слово и т.п.). Используй ebx или edi.

Ответ отправлен: 01.04.2003, 21:40
Отправитель: Igoryk


Отвечает masquer

Добрый день, Ivan!
Не так то, что ты не можешь писать в память, которая процессу не принадлежит, а твой адрес явно не принадлежит.

Ответ отправлен: 01.04.2003, 13:05
Отправитель: masquer


Отвечает keleb-glin

Приветствую Вас, Ivan!
Э, да ты асма совсем не знаешь! Учить его надо.
а делается это:
mov eax, 055555555h
mov word ptr ds:[eax], 88h


Ответ отправлен: 02.04.2003, 21:07
Отправитель: keleb-glin


Отвечает Dark_Lord

Приветствую Вас, Ivan!
mov eax,05555555h
mov word ptr [eax],88h

Ответ отправлен: 01.04.2003, 22:50
Отправитель: Dark_Lord


Отвечает Bob Johnson

Приветствую Вас, Ivan!
В tasm зависит от определения сегментов и других заморочек. Если нет assume ds: что-то, то можно так:
mov word ptr ds:[055555555h], 88h
иначе следует добавить assume ds: nothing.
Но еще можно вот так:
mov eax, 055555555h
mov word ptr [eax], 88h


Ответ отправлен: 01.04.2003, 19:44
Отправитель: Bob Johnson


 Вопрос № 2883

Приветствую Вас господа эксперты!
Следующий кусок кода был написан и прекрасно работал под XP, а вот под WEin98 работать отказывается! В чем тут дело??? Пробовал заменить Global не Local (а вообще есть разница?) и никаких результатов. Память выделяется, я могу с ней делать все, что угодно, а вот функция GlobalUnlock возвращает 0.
Еще вопрос: имеется программа; добавляю в сегмент инициализированных данных пару десятков байт; компилю, а размер остается прежним.


Приложение:


Вопрос отправлен: 01.04.2003, 16:14
Отправитель: GHopper

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

Отвечает WNA

Приветствую Вас, GHopper!
1. GlobalUnlock и должен возвращать 0, если внутренний счетчик локов стал равен нулю. Вызови после нее GetLastError - должен возвратить NO_ERROR
2. В компиленной программе секции кода и данных выравниваются на размер, задаваемый при линковке, пэтому при добавлении данных размер может и не увеличиться


Ответ отправлен: 02.04.2003, 09:43
Отправитель: WNA


Отвечает Gibbel

Добрый день, GHopper!
В GlobalUnlock передаешь Mem1 а не Mem2, так как функция работает с хэндлом...
А Mem2 - это адресс, куда спроецировалась выделенная тобой память...

Ответ отправлен: 01.04.2003, 16:51
Отправитель: Gibbel


Отвечает Bob Johnson

Приветствую Вас, GHopper!
Странно, что работало под XP... Смотрим описание на GlobalUnlock - что передается ей параметром? HGLOBAL hMem, а не LPVOID, который возвращает GlobalLock. Т.е. ей нужно передать хэндл на область памяти, который возвращается функцией GlobalAlloc!!! В твоем случае это Mem1.


Ответ отправлен: 02.04.2003, 00:20
Отправитель: Bob Johnson


 Вопрос № 2885

Еще раз здравствуйте.
Вопрос 2883-результат кривого API-справочника. Следующий код должен устанавливать текст в editе, путем смены его буфера, но почему-то он этого не делает...
Проверено - в буфер файл читается, только этот буфер не хотит стать буфером editа. С EM_SETHANDLE надо передавать хендл или указатель (a2 или a3 в моем случае), надо-ли вызывать LocalUnlock?
В умных книжках пишут: "For a multiple-line edit control outside of a dialog box, this local heap will be in the application's data segment.". Если дело в этом, то как мне сделать этот "will be in the application's data segment""???


Приложение:


Вопрос отправлен: 01.04.2003, 20:33
Отправитель: GHopper

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

Отвечает Bob Johnson

Приветствую Вас, GHopper!
1. Заметь, что в Windows 98 это сообщение не поддерживается. Если у тебя 98, то все ясно.
Передавать тебе надо хэндл, т.е. а3.
То, что касается heap и data segment - то это для 16-разрядных виндов. Там сегменты были по 64 кбайта и это было важно. При 32-х разрядах все всегда находится в твоем сегменте данных (потому что он 4 гб).


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


 Вопрос № 2886

Хочу подправить експерта internet explorer может сохранять полностью html страницу с картинками в формате mht!
Opera этого делать не позволяет!!
Вопрос ?2856
Большое спасибо за существование рассылки



Вопрос отправлен: 01.04.2003, 21:58
Отправитель: xant

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

Отвечает Samodelkin

Приветствую Вас, xant!
К стыду моему понятия не имел о таком формате, хотя ие вроде ужо много лет пользуюсь ... веб-архивы создаю раром и зипой ... и впредь так же буду делать ... а в mht не было надобнности и не будет

Ответ отправлен: 02.04.2003, 11:17
Отправитель: Samodelkin


Отвечает Bob Johnson

Доброе время суток, xant!
Согласен. Но вот какая фишка - не помню точно, или для сохранения, или только для просмотра такого файла на компьютере должен быть установлен Outlook Express.


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


 Вопрос № 2887

Здравствуйте эксперты! Подскажите как в программе под DOS можно получить объём оперативной памяти



Вопрос отправлен: 02.04.2003, 13:47
Отправитель: Serega (dobeerman@mail.ru)

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

Отвечает Bob Johnson

Приветствую Вас, Serega!
Какой именно памяти? Размер максимального свободного блока нижней памяти в параграфах (1 пар = 16 байт) вернет в BX функция выделения памяти 48h если у нее запросить слишком много.
mov bx, 0F000h
mov ah, 48h
int 21h
Но для начала ты должен изменить размер блока памяти, отведенного твоей программе, т.к. в начале вся память отводится ей и свободной остается 0. Функция 4Ah.


Ответ отправлен: 02.04.2003, 20:57
Отправитель: Bob Johnson


Отвечает Broken Sword

Приветствую Вас, Serega!
Ага, размечтался... в RM проц не видит больше 1Мб, как не крутись. В PM тоже не все так просто... Знаешь как при POST-е определяется объем оперативы? Никогда не задумывался, почему так "долго" это происходит? Дело в том, что сначала POST тестирует первые 64 Кб в начале адресного пространства 1 Мб (сразу тестирует, а не проверяет, есть ли память в первых 64 Кб, т.е. POST просто уверена, что КАК МИНИМУМ,
эти первые 64 Кб ОЗУ существуют), а потом POST определяет, сколько еще памяти (кроме первых 64 КБ) есть в компе, а когда POST определит размер ОЗУ, она станет последовательно записывать тестовые значения с адреса 10000h и до конца оперативки. Т.е. POST сначала определяет, сколько ОЗУ выше 64 Кб имеется в наличии, а потом - тестирует всю оперативку, которую обнаружила. Другой интересный вопрос: КАК определить последний байт оперативы? А очень просто: здесь все зависит от реакции чипсета на материне. Либо он выставит фиктивные данные, либо пошлет сигнал RESET (этого и ждет POST). Дальше подключается байт SHUTDOWN (именно благодаря этому байту кстати после перезагрузки компа и при определенных установках в bios-е тест памяти НЕ ПРОИЗВОДИТСЯ а производится только при ВКЛЮЧЕНИИ компа).

Ответ отправлен: 02.04.2003, 14:41
Отправитель: Broken Sword


Отвечает keleb-glin

Доброе время суток, Serega!
Можно int 12h, она возвращает в AX кол-во килобайт, свободных для резидентов и пр. (не более 640К)


Ответ отправлен: 02.04.2003, 21:05
Отправитель: keleb-glin


Отвечает Ayl

Здравствуйте, Serega!
Тебе какой объем - установленной, свободной или еще какой?
1. Для получения информации об объеме conventional memory можно использовать прерывание 12h (без параметров). В регистре AX будет объем в Кбайтах. Чаще всего оно равно 0280h (640 Кб) и также сохраняется в области данных BIOS по адресу 0040:0013 (2 байта).
2. Размер extended memory (память выше 1Мб) можно определить с помощью функции 88h прерывания 15h. В AX будет объем в Кбайтах. Это же значение можно получить из CMOS из ячеек 17 и 18. Кстати, там же (ячейки 15 и 16) находится размер base memory.
3. Наибольший свободный размер основной памяти (в пределах 640К) можно получить с помощью прерывания 21h с такими параметрами:
AH = 48h
BX = 0ffffh
В результате этого вызова в регистре BX будет находится размер свободной памяти в параграфах (16 байт).
4. Кроме этих значений можно также воспользоваться интерфейсами, которые позволяют работать:
- с верхней памятью (UMB - Upper Memory Block) - требуется загрузка драйвера EMS или XMS. Для ее использования надо работать с функцией 58h (содержит несколько подфункций) прерывания 21h
- с 64Кб пространством выше 1Мб (область HMA - High Memory Area). Для работы с ней требуется драйвер himem.sys. Также может быть установлен XMS. Работа осуществляется через прерывания 2fh сервис функции 43h.
- с расширенной памятью (extended memory) с помощью сервисов XMS, EMM (прерывание 67h, но должен быть установлен драйвер EMM) или DPMI (прерывание 2fh функция 16h и прерывание 31h).

Ответ отправлен: 02.04.2003, 14:32
Отправитель: Ayl


Отвечает Samodelkin

Приветствую Вас, Serega!
Как вариант - malloc поболее ... то есть затребовать выделить памяти скока и быть-то не могет ... тогда ДОС вернет сообщение об ошибке и сообщит кол-во доступной для выделения памяти

Ответ отправлен: 04.04.2003, 11:36
Отправитель: Samodelkin


 Вопрос № 2888

Здраствуйте эксперты!
Ответьте пожелуйсто на следующие вопросы:
Как запихать в edit больше 64Кб текста? Я хочу работать напрямую с буфером, а не отсылать сообщения editу, но как мне узнать хендл его буфера под Win98? Существует-ли под Win98 аналог сообщения EM_SET/GETHANDLE? И вообще может для создания текстового редактора надо использовать другой контрол?ы (читал о каком-то RichEditе).
Заранее спасибо!



Вопрос отправлен: 02.04.2003, 14:32
Отправитель: GHopper

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

Отвечает DiGiT[old]

Приветствую Вас, GHopper!
Для работы с большим блоком текста используй RichEdit. Все точка

Ответ отправлен: 03.04.2003, 05:39
Отправитель: DiGiT[old]


Отвечает Bob Johnson

Здравствуйте, GHopper!
1. Под 98 я думаю, что никак.
2. Действительно, попробуй Rich Edit. Он еще поддерживает разные шрифты, цвета (в общем, помнишь такой редакторчик Wordpad - вот это и есть rich edit). Создать его просто - указываешь класс окна "RichEdit20A" или "RICHEDIT". Но Rich Edit не поддерживает EM_SETHANDLE, т.к. (как написано) он хранит текст не просто как массив символов.


Ответ отправлен: 02.04.2003, 20:57
Отправитель: Bob Johnson


Отвечает masquer

Добрый день, GHopper!
Аналог? А мне MSDN врет, например, про EM_GETHANDLE что:
Requirements 
Windows NT/2000: Requires Windows NT 3.1 or later.
Windows 95/98: Requires Windows 95 or later.
Header: Declared in Winuser.h; include Windows.h.


Ответ отправлен: 02.04.2003, 17:03
Отправитель: masquer


Отвечает St

Привет, GHopper!
В edit нельзя запихать больше 65 Кб - это тяжелое наследство Win16. Придется работать с RichEdit - там можно пренебречь его возможностями по работе со шрифтами, цветом и форматом и использовать, как обычный Edit, но только запихивать и получать из него текст несколько сложнее (сообщения EM_STREAMIN и EM_STREAMOUT) и работа с выделениями тоже немного другая.
St

Ответ отправлен: 02.04.2003, 15:13
Отправитель: St


 Вопрос № 2889

Столлингс "Операционные системы"
Таненбаум "Современные ОС"
Кто что может сказать об этих книгах?
Конкретно:
1. Это книги типа "ОС состоит из того-то, например ОС Виндовз,
а еще есть ЮНИКС" (теория) или "загрузчик пишется так, а ядро - так" (практика)?
2. Есть ли эл. версии этих книг?



Вопрос отправлен: 02.04.2003, 15:15
Отправитель: Юзеръ

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

Отвечает DiGiT[old]

Доброе время суток, Юзеръ!
Это рульные книги я уже писал. Там дается информация о проектировании ОС. Ведь ОС это не просто ядро и загрузчик, а это СИСТЕМА прежде всего. И многие допускают ошибку проектируя ОС, как набор модулей в лучшем случае. В этих книгах как раз и дается такая инфа. Могу сказать про столлингса: рассматривается управление процессами, памятью, обзор файловых систем, планирование.(подробно) и про такие ОС как Win2k, версии UNIX а также другие ОС. Электронных версий не нашел. Но книжная гораздо приятнее.

Ответ отправлен: 03.04.2003, 05:37
Отправитель: DiGiT[old]


 Вопрос № 2890

Люди, помогите, пожалуйста...
Я попробовал спрогать что-нить в Паскале с инлайнами, но некоторые процедурки, в которых используется var не работают...
Я знаю, что в таких случаях в стек кидаются сегмент и смещение этих данных, поэтому я использовал POP DI/POP ES/.../STOSW, но он чисто на тестовой процедурке работает, а там, где надо - нет...
Хотелось бы узнать, как это исправить...
Для пояснений см.Приложение.


Приложение:


Вопрос отправлен: 02.04.2003, 18:17
Отправитель: Viland

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

Отвечает Bob Johnson

Добрый день, Viland!
А зачем тебе inline? В паскале есть ведь asm...
Вот тебе пример, как работать с параметрами в процедуре.


Приложение:

Ответ отправлен: 02.04.2003, 20:57
Отправитель: Bob Johnson


Отвечает Ayl

Доброе время суток, Viland!
Так хорошо в первом примере откоментировал каждый байт кода, а во втором - нет. А если бы откомментировал бы, то и сам бы нашел ошибку. Все у тебя выполняется, только в переменную b ничего не заносится, потому что вместо команд mov ax, bx; stosw (коды $8b/$c3/$ab) у тебя выполняется просто mov ax, 0abc3h (код $b8/$c3/$ab). Неправильно записал код команды.


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



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

Внимание!
Форма может работать некорректно в почтовых программах "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 (34)
C / C++ (25)
Perl (6)
Delphi (16)
Pascal (21)
Basic / VBA (9)
Java / JavaScript (8)
PHP (5)
MySQL / MSSQL (6)
Пользователю
Windows 95/98/Me (32)
Windows NT/2000/XP (24)
"Железо" (29)
Поиск информации (15)
Администратору
Windows NT/2000/XP (11)
Linux / Unix (12)
Юристу
Гражданское право (8)
Семейное право (5)
Трудовое право (5)
КоАП (6)

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




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

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


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

В избранное