Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
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.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту 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 |
Отписаться
Убрать рекламу |
В избранное | ||