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

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
x equ 5
x fix 5
Код
#define y(x) x*2
%macro y 1
  Shl %1, 1
%endmacro
macro y x
{
  Shl x, 1
}



Ответ отправлен: 13.07.2004, 02:37
Отправитель: Foamplast



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

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

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


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

http://subscribe.ru/
E-mail: ask@subscribe.ru
Адрес подписки
Отписаться

В избранное