Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 749
от 13.07.2004, 14:00
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 5593 Отправлено ответов: 15176 Активность: 271.3 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
Foamplast Статус: Профессиональный Общий рейтинг: 139.89 URL: мой личный сайт [Подробней >>] |
ASMодей Статус: Профессиональный Общий рейтинг: 111.33 [Подробней >>] |
Tigran K. Kalaidjian Статус: Профессиональный Общий рейтинг: 194.07 URL: Оптимизация ПК [Подробней >>] |
Стас Статус: Опытный Общий рейтинг: 127 [Подробней >>] |
Евгений Иванов Статус: Профессиональный Общий рейтинг: 133.65 URL: Super Assembler Software Телефон: НСС +7 831 3107039 [Подробней >>] |
Dragoon Статус: Доверительный Общий рейтинг: 107.52 [Подробней >>] |
Горячев Игорь Статус: Начальный Общий рейтинг: 115.62 [Подробней >>] |
bocha Статус: Опытный Общий рейтинг: 134.78 [Подробней >>] |
_vt Статус: Профессиональный Общий рейтинг: 118.14 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 5568. По защищенному режиму: Если в реальном режиме мы можем пользоваться обычными метками (mov [metka],0)... (ответов: 2)
Вопрос № 5569. Простите за оффтоп, но я уже в отчаянии... Купил компик по частям,собрал его вчера, но он не включае... (ответов: 3)
Вопрос № 5571. Привет, Как прочитать файл не с самого начало а к примеру с 512 байта?... (ответов: 2)
Вопрос № 5573. Здраствуйте. Я что-то не могу понять как в OpenGL вычислять координаты куда нужно поместить объект, ... (ответов: 1)
Вопрос № 5574. Что означает след.: jmp xxxx:METKA?... (ответов: 4)
Вопрос № 5575. Привет! В окне моей программы постояно рисуются пиксели(api SetPixel). А вот когда окно исчезает а п... (ответов: 5)
Вопрос № 5576. Приветствую Вас, знатоки ассемблера! Не подскажете, как определяется термин "загрузка процессор... (ответов: 2)
Вопрос № 5577. Exprety esli ne trudno soobshite ,pls,sushestvuet li v assemblere takaya-je vesh\' kak #define v C.Y... (ответов: 7)
Вопросов: 8, ответов: 26
Вопрос № 5568 |
По защищенному режиму:
Если в реальном режиме мы можем пользоваться обычными метками (mov [metka],0) либо вычислять физический адрес (cs shl 4 + metka), то как быть в защищенном режиме использующем всего один дескриптор данных, описывающий сегмент от 0 до 4 Гб. То бишь после переключения в защищенный режим мы погружаемся во мрак. Что использовать в качестве ориентира либо как вычислить адрес? Кто-нибудь знает? Или всё равно придется дополнительным дескриптором описывать область данных!
Второй, если можно.
GDT позволяет описать около 8190 сегментов, а если требуется гораздо больше? Что делать? Ведь в LDT TSS определять запрещено?
Спасибо!
Вопрос отправлен: 07.07.2004, 00:41
Отправитель: Protopopius
[Следующий вопрос >>] [Список вопросов]
Отвечает Foamplast
Доброе время суток, Protopopius!
1. ...мы погружаемся во мрак - контролируемый, надо сказать, мрак. Ведь если программа в защищённом режиме запускается под какой-нибудь ОС, то ОС ответственна за загрузку программы по требуемомоу адресу. Если же переход в защищённый режим осуществляется самим программистом, то париться вообще повода нет, ассемблер сам рассчитвает смещения (как обычно). После перехода в защищённый режим код никуда не перемещается и остаётся по старому месту. Задача в том, чтобы верно описать области памяти. Для этого селектор, загружаемый в защищённом режиме должен описывать дескриптор с базой ноль и всё.
2. Область данных необходимо описывать отдельно. Ведь сегмент бывает либо кода, либо данных. А винде всё это совмещают (сегменты могут перекрываться).
3. ... а если требуется гораздо больше? - TSS это целый процесс, со всеми потрохами (потоками и ресурсами). У меня лично их в системе не более 30-50. Я думаю, 8192 за глаза хватит.
Ответ отправлен: 08.07.2004, 09:10
Отправитель: Foamplast
Отвечает ASMодей
Доброе время суток, Protopopius!
Что значит "во мрак"? Ты же код для защищенного режима где-то пишешь? Вот
там также указываешь и метки и потом по ним компилятор сам сгенерит 32-битные
смещения. Описывать дополнительный дескриптор для данных можно, но можно и
не описывать - это зависит от того нужен он тебе или нет.
GDT позволяет описать не около, а совершенно точно 8191 дескриптор (нулевой
не считается), а если нужно больше - все в твоих руках. Можно подменять часть
GDT, можно завести несколько GDT и переключаться на другие в случае
необходимости.
Ответ отправлен: 07.07.2004, 09:31
Отправитель: ASMодей
Вопрос № 5569 |
Простите за оффтоп, но я уже в отчаянии... Купил компик по частям,собрал его вчера, но он не включается. INWIN S500 300W, ASUS P4PE-X TE, Celeron 2000, DDR 256 Mb, видеокарты 4X у меня пока нет (а судя по nix.ru требуется как минимум такая), но дело не в этом похоже, потому что вчера ставил 4X карточку в AGP слот, но проблема осталась... Не запускается комп от питания... Когда я включаю болк питания тумблером на задней стенке корпуса (т.е. на блоке питания), кулера на проце и видюхе только закрутятся и тут же остановятся... Диод ATX загорается и горит, но больше ничего не происходит... Кнопка включения питания как будто не работает... От передней панели идут 4 проводка: Power Switch (я так понимаю это и есть соединение матери с кнопкой), Power LED (очевидно, индикатор включенности компа), HDD LED (индикатор работы винта) и Reset Switch. Все эти проводки я зацепил на мать в соответствии с книжкой по матери... И вот так вот всё печально пока закончилось... Подскажите, почему не работает питание и что вообще можно из этой ситуации извлечь. Спасибо огромное.
Вопрос отправлен: 07.07.2004, 06:56
Отправитель: Challenger (challenger@nm.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Tigran K. Kalaidjian
Доброе время суток, Challenger!
Похоже, что где-то коротит, и включается система предохранения. Попробуйте отключить БП от всего и вручную соединить серый и зёлёный(АКА салатовый) провода на выходе БП и включать/выключать его. Если это сработает, т.е. БП в норме, попробуйте другую мать, если нет – посмотрите БП. Далее процесс продолжается – система разбирается, а затем собирается по ступеням, как только обнаруживается неисправность, то она, скорее всего, связана с добавленным элементом. Отсюда делаются выводы.
Ответ отправлен: 07.07.2004, 10:19
Отправитель: Tigran K. Kalaidjian
Отвечает ASMодей
Добрый день, Challenger!
У меня точно такая же фигня была, и тоже на ASUS. Было подозрение, что мать коротит
на корпус, т.к. если ее немного сдвинуть все начинало работать. Поэтому
проложил между матерью и корпусом изоляционный материал (газету :), крепления
поставил пластиковые, и с тех пор все работает и горя не знаю.
Ответ отправлен: 07.07.2004, 09:32
Отправитель: ASMодей
Отвечает Стас
Здравствуйте, Challenger!
У меня (правда на блоке питания AT, P2) такое было когда села батарейка. Т.е. включаю: кулеры дергаются и останавливаются. Ни звука ни чего...
Ответ отправлен: 07.07.2004, 14:16
Отправитель: Стас
Вопрос № 5571 |
Привет, Как прочитать файл не с самого начало а к примеру с 512 байта?
Вопрос отправлен: 07.07.2004, 18:35
Отправитель: highQ
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Здравствуйте, highQ!
Перемести указатель на это значение.
в досе 42h функция
в окнах соответствующее название ищи..
Бывай!
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 07.07.2004, 22:53
Отправитель: Евгений Иванов
Отвечает Tigran K. Kalaidjian
Доброе время суток, highQ!
2 варианта:
1. Прочитать 512 байт, а обрабатывать с 513-го.
2. Установить текущую позицию с помощью ф-ции 42h прерывания 21h, а затем читать. Вот описание ф-ции:
АH = 42h
AL = откуда отступать
00h с начала файла
01h с текущей позиции
02h с конца файла
BX = хендл
CX:DX = количество байт, которые необходимо отсчитать от конца файла и установить на них указатель.
Возврат: CF чист если всё в порядке
DX:AX = новая позиция от начала файла
CF если ошибка
Подробнее о тонкостях читайте у Ральфа Брауна
Ответ отправлен: 07.07.2004, 20:16
Отправитель: Tigran K. Kalaidjian
Вопрос № 5573 |
Здраствуйте.
Я что-то не могу понять как в OpenGL вычислять координаты куда нужно поместить объект, всмысле какие числа использовать?В Си используются специальные единицы(1.0f, -6.0f), на асме они работают не так как надо.
Вопрос отправлен: 08.07.2004, 12:59
Отправитель: Семен
[Следующий вопрос >>] [Список вопросов]
Отвечает Dragoon
Добрый день, Семен!
Надо объявлять переменные так:
MASM
.data
float1 DD 1.0
FASM
В фасме можно писать прямо в коде
1.0f
Ответ отправлен: 09.07.2004, 21:49
Отправитель: Dragoon
Вопрос № 5574 |
Что означает след.: jmp xxxx:METKA?
Вопрос отправлен: 08.07.2004, 17:54
Отправитель: react
[Следующий вопрос >>] [Список вопросов]
Отвечает Tigran K. Kalaidjian
Приветствую Вас, react!
безусловный переход по адресу xxxx:METKA,
т.е. cs=xxxx и ip=METKA
Ответ отправлен: 09.07.2004, 09:14
Отправитель: Tigran K. Kalaidjian
Отвечает Dragoon
Приветствую Вас, react!
Ну вообще-то если надо прыгнуть в другой сегмент, то пишут
jmp far.
Ответ отправлен: 09.07.2004, 21:53
Отправитель: Dragoon
Отвечает Стас
Приветствую Вас, react!
Это значит что CS станет равным xxxx, а IP (EIP) = МЕТКА.
Ответ отправлен: 08.07.2004, 21:04
Отправитель: Стас
Отвечает Евгений Иванов
Переход по адресу.
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 09.07.2004, 17:06
Отправитель: Евгений Иванов
Вопрос № 5575 |
Привет!
В окне моей программы постояно рисуются пиксели(api SetPixel). А вот когда окно исчезает а потом опять появляется все нарисованное исчезает. Как сохранить нарисованые пиксели, чтоб потом можно было восстановить с помощью WM_PAINT?
Вопрос отправлен: 08.07.2004, 21:37
Отправитель: sequence
[Следующий вопрос >>] [Список вопросов]
Отвечает Горячев Игорь
Доброе время суток, sequence!
Как вариант: сохраняй картинку в метафайле, а по WM_PAINT перерисовывай.
Ответ отправлен: 08.07.2004, 23:01
Отправитель: Горячев Игорь
Отвечает Tigran K. Kalaidjian
Здравствуйте, sequence!
Загоняйте картинку в битмап. Вот краткое описание нужных функций, полное см. В MSDN
The GetDIBits function retrieves the bits of the specified bitmap and copies them into a buffer using the specified format.
int GetDIBits(
HDC hdc, // handle of device context
HBITMAP hbmp, // handle of bitmap
UINT uStartScan, // first scan line to set in destination bitmap
UINT cScanLines, // number of scan lines to copy
LPVOID lpvBits, // address of array for bitmap bits
LPBITMAPINFO lpbi, // address of structure with bitmap data
UINT uUsage // RGB or palette index
);
The SetDIBits function sets the pixels in a bitmap using the color data found in the specified device-independent bitmap (DIB).
int SetDIBits(
HDC hdc, // handle of device context
HBITMAP hbmp, // handle of bitmap
UINT uStartScan, // starting scan line
UINT cScanLines, // number of scan lines
CONST VOID *lpvBits, // array of bitmap bits
CONST BITMAPINFO *lpbmi, // address of structure with bitmap data
UINT fuColorUse // type of color indices to use
);
Ответ отправлен: 09.07.2004, 22:07
Отправитель: Tigran K. Kalaidjian
Отвечает bocha
Здравствуйте, sequence!
Можно рисовать в метафайл, а при WM_PAINT вызывать PlayMetafaile, или создавать неотображаемый контекст, рисовать на нем, а затем копировать его в свое окно.
Ответ отправлен: 09.07.2004, 01:14
Отправитель: bocha
Отвечает Евгений Иванов
Доброе время суток, sequence!
Надо рисовать в совместимом DC (в памяти).
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 09.07.2004, 17:07
Отправитель: Евгений Иванов
Отвечает _vt
Добрый день, sequence!
SetPixel вызывается в обработчике WM_PAINT, или еще где? Что значит, "нарисованное исчезает"? Объясни по-людски! "Сохранять пиксели" можно в BITMAP.
* Origin : Life begins at 1000Mhz!
Ответ отправлен: 11.07.2004, 03:25
Отправитель: _vt
Вопрос № 5576 |
Приветствую Вас, знатоки ассемблера!
Не подскажете, как определяется термин "загрузка процессора",
и каким образом степень этой загрузки определить (возможно,
средствами ассемблера)?
Вопрос отправлен: 09.07.2004, 00:17
Отправитель: lexa
[Следующий вопрос >>] [Список вопросов]
Отвечает Dragoon
Приветствую Вас, lexa!
Один из способов(простой) - Берем какой-либо тестовый участок и прогоняем определенное кол-во раз, засекаем время
выполнения. Чем больше кол-во прогонов, тем больше точность последующих вычислений
Ответ отправлен: 09.07.2004, 21:55
Отправитель: Dragoon
Отвечает Tigran K. Kalaidjian
Здравствуйте, lexa!
http://www.mainframeweek.com/code/showcode.php/0001/mw1cics1.txt
http://www.mainframeweek.com/journals/articles/0001/Displaying+CPU+usage+by+TCB
Ответ отправлен: 09.07.2004, 09:33
Отправитель: Tigran K. Kalaidjian
Вопрос № 5577 |
Exprety esli ne trudno soobshite ,pls,sushestvuet li v assemblere takaya-je vesh\' kak #define v C.Ya imeu v vidu mojno li v asme pri opredelenii postoyannoy dobavit kod:
kak v C:
#define name {...kod}
Zaranee spasibo!!!
Вопрос отправлен: 09.07.2004, 13:52
Отправитель: Rappa (rost81@hotmail.com)
[Следующий вопрос >>] [Список вопросов]
Отвечает Горячев Игорь
Доброе время суток, Rappa!
В ассемблере есть замечательная вещь под названием "макрос". Синтаксис в зависимости от компилятора может меняться, но суть нет.
Пример:
; Компилятор FASM
macro LoWord Value
{
mov ebx,Value
movzx eax,bx
}
Далее где нужно в коде, используешь: HiWord [lParam]
т.е. Структура макроса такая:
macro Имя_макроса Параметр1,Параметр2,.....
{
тело макроса ;нужный тебе код
}
Нужна более подробная информация, спрашивай...
P.S. Правда это не совсем аналог #define в С, но суть примерно та же.
Ответ отправлен: 09.07.2004, 22:47
Отправитель: Горячев Игорь
Отвечает Tigran K. Kalaidjian
Приветствую Вас, Rappa!
Да. В ассемблере есть макросы. Статьи из Зубкова по теме ушли мылом.
Ответ отправлен: 09.07.2004, 22:06
Отправитель: Tigran K. Kalaidjian
Отвечает Евгений Иванов
EQU
=
Var_0 EQU 200
Var_1 = 300
Var_1 = Var_1 - 100
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 11.07.2004, 21:01
Отправитель: Евгений Иванов
Отвечает Dragoon
Здравствуйте, Rappa!
Если я правильно понял, то ты имеешь в виду макросы.
Объявляются в MASM'е так:
имя макроса MACRO arg1,arg2,argN (аргументы можно опустить)
Здесь текст макроса....
ENDM
Ответ отправлен: 09.07.2004, 21:57
Отправитель: Dragoon
Отвечает Стас
Добрый день, Rappa!
да конечно, пишешь:
name = 25
или
name equ 25
вот тебе и константа.
Ответ отправлен: 09.07.2004, 15:02
Отправитель: Стас
Отвечает _vt
Доброе время суток, Rappa!
В некоторых реализациях ассемблера, например в FASM, это вообще главная фишка :)
* Origin : Life begins at 1000Mhz!
Ответ отправлен: 11.07.2004, 03:26
Отправитель: _vt
Отвечает Foamplast
Здравствуйте, Rappa!
Да, существует.
На самом деле такие вещи называются предварительной обработкой кода. Этим занимается препроцессор, как и следует из названия, работающий до компилятора (ассемблера).
Синтаксис этих инструкций сильно различается в разных ассемблерах. Следует отметить, что синтаксис препроцессора NASM очень похож с виду (и в действии) на С. Препроцессоры обоих ассемблеров (NASM и FASM) имеют свои особенности. В целом в FASM'е можно сделать всё, что в NASM'е, хотя совершенно другими средствами. FASM версии 1.5 не полностью поддерживает условные определения. То есть в нём можно задать различные значения констант в зависимости от значения другой константы (например, версии ОС), но нельзя по-разному определить структуры, а, значит, включаемые файлы Platform SDK на FASM в точности перевести нельзя. В FASM есть приоритеты определений. Константы, определённые с помощью fix, замещаются перед equ. Знак '=' равносилен equ при определении числовых констант. MASM обладает своим синтаксисом, но мне нравится простота и поэтому я не использую MASM.
Язык | C | NASM | FASM |
Константа | #define x 5 | %define x 5 | x = 5 |
Код | #define y(x) x*2 | %macro y 1 | macro y x |
Ответ отправлен: 13.07.2004, 02:37
Отправитель: Foamplast
Форма отправки вопроса |
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
(C) 2002-2003 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (24) C / C++ (12) Perl (3) Builder / Delphi (16) Pascal (25) Basic / VBA (5) Java / JavaScript (3) PHP (13) Криптография (7) WinAPI (11) Радиоэлектроника (7) |
Пользователю Windows 95/98/Me (37) Windows NT/2000/XP (54) "Железо" (34) Поиск информации (15) |
Администратору Windows NT/2000/XP (30) Linux / Unix (12) |
Юристу Гражданское право (8) Семейное право (6) Трудовое право (7) КоАП (5) |
Отправить вопрос всем экспертам выбранной рассылки.
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Адрес подписки |
Отписаться |
В избранное | ||