Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 444
от 16.12.2002, 12:40
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 2167 Отправлено ответов: 6613 Активность: 305.1 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
Beeblebrox Статус: Профессиональный Общий рейтинг: 111.43 URL: Beeblebrox / TMA HomePage [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 117.12 [Подробней >>] |
Broken Sword Статус: Профессиональный Общий рейтинг: 128 URL: моя рассылка по Protected Mode [Подробней >>] |
ASMодей Статус: Профессиональный Общий рейтинг: 118.92 [Подробней >>] |
toshka Статус: Начальный Общий рейтинг: 109.85 [Подробней >>] |
Bob Johnson Статус: Профессиональный Общий рейтинг: 152.41 [Подробней >>] |
masquer Статус: Профессиональный Общий рейтинг: 149.69 [Подробней >>] |
Traish Статус: Доверительный Общий рейтинг: 132.46 [Подробней >>] |
Maverick Статус: Профессиональный Общий рейтинг: 139.39 URL: Задачи по ассемблеру Телефон: 89039415024 (BeeLine GSM) [Подробней >>] |
Eugene Статус: Опытный Общий рейтинг: 109 URL: мощный файловый архив [Подробней >>] |
Dark_Lord Статус: Профессиональный Общий рейтинг: 122.65 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 2105. Здравствуйте Beeblebrox. Вопрос по поводу PIC. Хотелось узнать, какой программатор использовали (сво... (ответов: 1)
Вопрос № 2106. Здравствуйте! В рассылке "Ассемблер? Это просто! Учимся программировать" №29 был опубликов... (ответов: 3)
Вопрос № 2107. Здравствуйте Beeblebrox. Снова по поводу PIC'а. Посмотрел схему по указанной ссылке, возник вопросец... (ответов: 1)
Вопрос № 2108. Здравствуйте! Как можно выставить признак мерцания\повышенной яркости фона в текстовом режиме? Прога... (ответов: 4)
Вопрос № 2109. 1. >>Learn English better before using it. (Bob Johnson) Да Английский я знаю плохо но смысел всетак... (ответов: 2)
Вопрос № 2110. Здравствуйте, Эксперты ! Мне задали такое задание. Закодируйте два макроопределения для умножения: а... (ответов: 4)
Вопрос № 2111. Привет всем. Это опять я (Макс). Большое спасибо Traish'y за то, что почти написал мне вирус (с мен... (ответов: 3)
Вопрос № 2112. Приветствую. Не поделитесь ли вы, уважаемые Эксперты, описанием формата TSS (сегмент состояния задач... (ответов: 1)
Вопрос № 2113. Где можно найти все выпуски рассылки Калашникова... Заранее спасибо...... (ответов: 1)
Вопрос № 2114. Привет, уважаемые эксперты! Вот столкнулся с такой проблемой: как, под WinXP к примеру, заставить си... (ответов: 4)
Вопрос № 2115. Дарова. Я тут скачал icedump, хочу сфоткать окно отладчика. Пишу pagein n А он мне пишет, что ошибка... (ответов: 1)
Вопросов: 11, ответов: 25
Вопрос № 2105 |
Здравствуйте Beeblebrox.
Вопрос по поводу PIC. Хотелось узнать, какой программатор использовали (свой или какой-нибудь фабричный), если свой дайте пожалуйста ссылку.
И если сами выбирали контроллер, то почему выбрали PIC, а не AVR, Zilog и т.п.
Спасибо
Вопрос отправлен: 11.12.2002, 09:29
Отправитель: Алексей
[Следующий вопрос >>] [Список вопросов]
Отвечает Beeblebrox
Доброе время суток, Алексей!
Программатор спаял по схеме из http://www.jdm.homepage.dk
Драйвер попробовал там же, но более удобным оказался ic-prog
Найдешь его поисковиком. Пик выбрал только потому, что надо же с чего-то было начинать :)
Ответ отправлен: 11.12.2002, 10:20
Отправитель: Beeblebrox
Вопрос № 2106 |
Здравствуйте!
В рассылке "Ассемблер? Это просто! Учимся программировать" №29 был опубликован пример запуска внешней .exe программы.
Очень хотелось бы узнать, возможно ли как-то предусмотреть завершение процесса вызванной программы? Планирую создать резидент, который запускал бы exe программу, а по нажатию на "hot-key" выгружал ее. Буду признателен за любую полезную информацию.
Заранее спасибо.
Вопрос отправлен: 11.12.2002, 09:57
Отправитель: mike (myy@nm.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Ayl
Приветствую Вас, mike!
Хм.. Резидент... Запускал бы программу... Выгружал бы ее... В принципе, все возможно - посмотри на файловые оболочки... Там это реализовано, за исключением выгрузки.
Но есть куча токих мест.
Первое - запустить программу из резидента. Вся трудность в том, что резидентной программу очень трудно будет выделить память. Скорее всего, просто невозможно. Т.е. выделять блок памяти придется в момент инициализации, а это приведет к уменьшению свободной памяти для других программ и к тому, что с твоим резидентом никакая другая программа работать не сможет.
Другое дело, если тебе нужно запустить программу в момент инициализации и потом снять ее. Но тогда не нужен резидент, а достаточно просто обработчик прерывания от клавиатуры подменить на время своим.
Теперь по поводу выгрузки.
Подозреваю, что для этого достаточно просто вызвать функцию 4ch прерывания 21h. Дело в том, что несмотря на то, что CS указывает на твою процедуру, система по-прежнему сохраняет указатель на PSP прерванной программы. Соответственно, и выгружена будет она. Можно также в AL записать какой-нибудь специальный код для определения, что программа была выгружена принудительно.
Правда, желательно убедиться, что вызываемая программа не открывала файлы, не изменяла вектора прерываний, не выделяла память и вообще, не занималась непотребной деятельностью :-) Хотя и эти моменты можно предусмотреть.
Ответ отправлен: 11.12.2002, 12:26
Отправитель: Ayl
Отвечает Broken Sword
Доброе время суток, mike!
там же все написано:
...Как только она отработала, управление получает наша (родительская) программа
А что значит отработала? mov ah,4C int 21h вот и все завершение вызванной программы, ничего предусматирвать не нада, всё уже предусмотрели.
Ответ отправлен: 11.12.2002, 16:11
Отправитель: Broken Sword
Отвечает ASMодей
Добрый день, mike!
Используй API функцию TerminateProcess.
Ответ отправлен: 11.12.2002, 17:26
Отправитель: ASMодей
Вопрос № 2107 |
Здравствуйте Beeblebrox.
Снова по поводу PIC'а.
Посмотрел схему по указанной ссылке, возник вопросец: на каких элементах собирал программатор? По схеме или на советских аналогах и особо интересно какие конкретно стабилитроны применил (ну и элементы вообще, если на аналогах)?
Спасибо.
Вопрос отправлен: 11.12.2002, 11:28
Отправитель: Алексей
[Следующий вопрос >>] [Список вопросов]
Отвечает Beeblebrox
Доброе время суток, Алексей!
А почему через рассылку, а не по емейл?
Я сделал ту схему, где один стабилитрон на 5.1В, один на 13В, три диода и один транзистор. КС156А, Д814Г, КД522, КТ315Г соответственно. Дал бы свой адрес, я бы выслал. По-моему, на эту схему есть ссылка на сайте ic-prog
Ответ отправлен: 11.12.2002, 13:24
Отправитель: Beeblebrox
Вопрос № 2108 |
Здравствуйте!
Как можно выставить признак мерцания\повышенной яркости фона в текстовом режиме? Прога под ДОС.
То есть либо чтобы для фона старший бит означал либо мерцание, либо повышенную яркость....
Вопрос отправлен: 11.12.2002, 14:53
Отправитель: Роман
[Следующий вопрос >>] [Список вопросов]
Отвечает Broken Sword
Приветствую Вас, Роман!
Вопрос понятен. Тебе нужна 1003h ф-ция 10h прерывания (или можешь непосредственно изменить бит 5 байта 0040h:0065h)
INT 10 1003 - VIDEO - TOGGLE INTENSITY/BLINKING BIT
Inp.:
AX = 1003h
BL = new state
00h background intensity enabled
01h blink enabled
BH = 00h to avoid problems on some adapters
Return: nothing
Notes: although there is no function to get the current status on adapters prior to the VGA, bit 5 of 0040h:0065h indicates the state; on the VGA, use AH=1Bh and check offset 2Dh of the returned data (see #00040) when configured for a monochrome display, the Boca Research Multi-EGA with ROM v M1.1 Type D has its screen disrupted if BH is not clear this call is reported to be "Get Cursor Position" on the Tandy 1000SL/TL
Ответ отправлен: 11.12.2002, 19:20
Отправитель: Broken Sword
Отвечает toshka
Приветствую Вас, Роман!
Для управления признаком яркости/мигания фона существует функция 1003h прерывания 10h.
mov ax, 1003h
mov bl, (1 - мигание, 0 - яркость)
int 10h
Ответ отправлен: 11.12.2002, 15:48
Отправитель: toshka
Отвечает Ayl
Здравствуйте, Роман!
За интерпретацию старшего бита отвечает определенный бит некоторого регистра. Так расплывчато я написал, потому что для различных адаптеров и регистр, и номер бита отличаются.
См. приложение.
Приложение:
Ответ отправлен: 11.12.2002, 15:50
Отправитель: Ayl
Отвечает ASMодей
Доброе время суток, Роман!
Используй прерывание INT 10h, AX=1003h,
при этом:
BL = 00h - повышенная яркость
BL = 01h - мерцание
Ответ отправлен: 11.12.2002, 17:27
Отправитель: ASMодей
Вопрос № 2109 |
1. >>Learn English better before using it. (Bob Johnson)
Да Английский я знаю плохо но смысел всетаки
вы поняли?
2. Во вторых DirectX8 полное Г... >>(Bob Johnson)
(Допустим вы не сможете нарисовать линию на текстуре,
так как нет такой функции и много других затупов).
Собственно по этому я и спрашивал про графику на
ASM в прошлом вопросе, а кто не понял его суть поясняю:
Вы как выводите графику на асемблере? через int 21h
(или через BIOS) , а это не весть как тормознуто по этому я хочу использовать прямое обращение к видюхе, что бы она
порхала.
3. А как написать библиотеку com хотябы самую простецкую
что бы ее понимал VB? (Всем)
4. Скажем я хочу вызвать API GetWindowsDirectory
и вывести на экран результат. Как мне это сделать?
Вопрос отправлен: 11.12.2002, 15:51
Отправитель: Nimnul (Nimnul@atrus.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Добрый день, Nimnul!
> Во вторых DirectX8 полное Г... >>(Bob Johnson)
> Допустим вы не сможете нарисовать линию на текстуре,
> так как нет такой функции и много других затупов).
Ну и кто тебе такое сказал??? Что, если "нет такой функции", значит нельзя? А как ты себе представляешь такую функцию?: IDirect3D8::DrawLineOnTexture ???
Создаешь текстуру, указав ей D3DUSAGE_RENDERTARGET, далее SetRenderTarget, далее рисуешь все, что хочешь.
> и много других затупов).
Например?
Возможности DirectX зависят от того, какая у тебя карта и ничем (по функциональности) он не лучше, чем OGL.
А вот графика через Int 21h - это сильно...
> по этому я хочу использовать прямое обращение к видюхе,
> что бы она порхала
Вот по этому я и сказал (и повторяю еще раз) - используй Direct3D. А как ты еще хочешь обращаться напрямую к видюхе???
4.
char dir [255];
DWORD temp;
WriteFile (GetStdHandle (STD_OUTPUT_HANDLE), dir, GetWindowsDirectory (dir, 255), &temp, 0);
Ответ отправлен: 14.12.2002, 18:20
Отправитель: Bob Johnson
Отвечает masquer
Здравствуйте, Nimnul!
1. Это и так было понятно. Непонятно - зачем вопрос на английском задавать?
2. Через 21h, под Винды и чтоб летало? :))))) Успехов!
Когда надоест, попробуй все-таки DirectX или OpenGL, так, для разнообразия...
3. Так же, как и любую другую, главное - восстанавливать регистры после отработки функции. Я месяца 4-5 назад расписывал - что да как, смотри архивы рассылки.
4. В качестве первого параметра идет указатель на строку, которая после вызова функции будет содержать полный путь. Дальше уже что хочешь делай.
Ответ отправлен: 11.12.2002, 16:44
Отправитель: masquer
Вопрос № 2110 |
Здравствуйте, Эксперты !
Мне задали такое задание.
Закодируйте два макроопределения для умножения:
а) MULTBY должна генерировать код для умножения байта на байт;
б) MULTWD должна генерировать код для умножения слова на слово;
Что это вообще значит. т.е.
что значит закодировать два макроопределения ... ?
Вопрос отправлен: 11.12.2002, 16:45
Отправитель: Саша
[Следующий вопрос >>] [Список вопросов]
Отвечает Broken Sword
Добрый день, Саша!
макрос он и в африке макрос. смотри приложение
Приложение:
Ответ отправлен: 11.12.2002, 19:20
Отправитель: Broken Sword
Отвечает Ayl
Здравствуйте, Саша!
В ассемблере есть такая вещь - макросы. Это что-то типа подпрограммы, только текст макроса непосредственно подставляется на место его вызова. Например, пусть есть макрос:
DISABLE_INT macro
cli
endm
Тогда в своей программе можно написать так:
...
DISABLE_INT
...
и при трансляции вместо DISABLE_INT будет вставлена команда cli.
Язык макроопределений достаточно богат. Там есть и условные операторы, и повторы и даже рекурсивные вызовы. По этому поводу лучше всего почитать книжки.
Теперь к твоему заданию. Я приведу пример первого макроса, второй напишешь сам по образцу.
См. Приложение.
Приложение:
Ответ отправлен: 11.12.2002, 17:27
Отправитель: Ayl
Отвечает Traish
Приветствую Вас, Саша!
См. в приложении.
Приложение:
Ответ отправлен: 11.12.2002, 17:55
Отправитель: Traish
Отвечает toshka
Добрый день, Саша!
MultBy MACRO A, B
xor ah, ah
mov al, A ; в AX загружаем первый байт
xor bh, bh
mov bl, B ; в BX загружаем второй байт
mul bx ; Перемножаем, результат в AX
ENDM
MultWd MACRO A, B
mov ax, A ; в AX загружаем первое слово
mov bx, B ; в BX загружаем второе слово
mul bx ; Перемножаем, результат в DX:AX
ENDM
В программе пишеш. так:
MultBy dl, 23h ; AX = DL * 23h
MultWd 1234h, bx ; DX:AX = BX * 1234h
Ответ отправлен: 11.12.2002, 17:57
Отправитель: toshka
Вопрос № 2111 |
Привет всем.
Это опять я (Макс). Большое спасибо Traish'y за то, что почти написал мне вирус
(с меня причитается). Но в связи с этим возникают вопросы:
зачем в начале инструкция push dword ptr fs:[eax]? И что значит и зачем and al, not (111b)?
И для чего используется фрагмент:
push ebx
sgdt [esp - 02h]
pop ebx
xor eax, eax
sldt ax?
Заранее благодарен.
Приложение:
Вопрос отправлен: 11.12.2002, 17:20
Отправитель: Maxxx
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Приветствую Вас, Maxxx!
В общем так. push dword ptr fs:[eax] что-то там сохраняет из области обработки исключений - это я не помню. Далее -
push ebx просто уменьшает значение esp на 4 (здесь эту команду надо рассматривать так), т.к. сделать sub esp, 4 - значетельно больше памяти занимает команда.
После этого сохраняется предел и база gdt (6 байт) по адресу (esp - 2). Это означает, что предел (слово) попадет по адресу esp - 2, а линейный адрес (двойное слово) - по адресу esp. Тогда следующая команда pop ebx считает линейный адрес gdt из стека в ebx, одновременно вернув значение esp на место.
Теперь xor eax, eax и sldt ax - первая команда очищает eax (eax = 0), вторая записывает в младшую часть eax (т.е. в ax) - селектор LDT в GDT (т.е. номер дескриптора GDT, который описывает на самом деле не сегмент памяти, а таблицу LDT. Один элемент таблицы GDT занимает 8 байт, поэтому для получения адреса, где описывается таблица LDT необходимо взять номер ее селектора в GDT (он хранится в битах 3 - 15), умножить его на 8 и сложить с базой GDT. Умножение на 8 - это сдвиг на 3 разряда влево, но (на самом деле) ничего сдвигать не надо, т.к. биты и так уже храняться в позициях 3 - 15 - надо только занулить биты 0 - 2, чтобы они не испортили адрес. Вот это и делает команда and al, not (111b). Т.к. not (111b) = 011111000b, т.е. выполняется на самом деле and al, 011111000b.
И теперь остается эти два адреса (база GDT и смещение) сложить - add ebx, eax.
Ответ отправлен: 14.12.2002, 18:21
Отправитель: Bob Johnson
Отвечает Maverick
Здравствуйте, Maxxx!
Без исходного кода, тебе навряд ли объяснят, что делает тот фрагмент.
А эта инструкция push dword ptr fs:[eax]
Пихает в стек слово, находящееся в сегменте адрес которого в fs, по смещению в eax.
Ответ отправлен: 12.12.2002, 11:14
Отправитель: Maverick
Отвечает Traish
Здравствуйте, Maxxx!
1. Ну так это я SEH хотел пропатчить, а потом забыл про него. Допиши обработчик, чтобы не было проблем с NT и т.п.
push _offset_обработчика
push dword ptr fs:[0]
mov dword ptr fs:[0], esp
Так примерно.
2. Это значит то же, что и "and al, 11111000b".
3. Потому что по sldt мы получаем селектор, а дескриптор этого селектора где? Правильно - в GDT. (Отсюда необходимость "and al, not (111b)" - индекс получаем). Я так вопрос понял...
Ответ отправлен: 11.12.2002, 18:05
Отправитель: Traish
Вопрос № 2112 |
Приветствую.
Не поделитесь ли вы, уважаемые Эксперты, описанием формата TSS (сегмент состояния задачи)
- буду вам очень благодарен (пиво гарантирую).
С уважением,
Traish [ traish@mail.ru ]
P.S. Я серьезно насчет пива...
Вопрос отправлен: 11.12.2002, 19:12
Отправитель: Traish (traish@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Maverick
Здравствуйте, Traish!
Ага, поделюсь, гляди в ящик.
Пиво это хорошо :)
Ответ отправлен: 12.12.2002, 11:25
Отправитель: Maverick
Вопрос № 2113 |
Где можно найти все выпуски рассылки Калашникова...
Заранее спасибо...
Вопрос отправлен: 11.12.2002, 19:26
Отправитель: P_A_P
[Следующий вопрос >>] [Список вопросов]
Отвечает Maverick
Здравствуйте, P_A_P!
На subcrib'e
У меня есть архив в chm, но там не все, там же есть под винду.
Кто-нибудь, выложите его на своем сайте!!!!!!!!!!!!(полный архив)
Ответ отправлен: 12.12.2002, 12:09
Отправитель: Maverick
Вопрос № 2114 |
Привет, уважаемые эксперты!
Вот столкнулся с такой проблемой:
как, под WinXP к примеру, заставить системный
динамик издавать звуки?
Приведённый код работать не хочет. Может из-за
NT-ядра???...
И вообще как мне динамик заставить
издавать звуки разной тональности,
ну т.е. какие значения нужно в ax сувать и т.п.
Вообщем прошу помощи.
Приложение:
Вопрос отправлен: 12.12.2002, 00:13
Отправитель: max
[Следующий вопрос >>] [Список вопросов]
Отвечает Maverick
Добрый день, max!
Могу дать исходник с музыкой.
Это из Infected Voice.
Приложение:
Ответ отправлен: 12.12.2002, 12:09
Отправитель: Maverick
Отвечает Broken Sword
Доброе время суток, max!
В XP динамик пищит будь здоров - единственная запорка: В XP НЕ РАБОТАЕТ INT 15h !!!!!!!!!!!!
Поэтому звук есть, просто ты его не успеваешь уловить. Организуй другую задержку (на циклах тоже не проканает), самый реальный способ для XP - через перехват таймера
Ответ отправлен: 12.12.2002, 04:57
Отправитель: Broken Sword
Отвечает Eugene
Здравствуйте, max!
Вот этот код работает.
Приложение:
Ответ отправлен: 12.12.2002, 09:20
Отправитель: Eugene
Отвечает Dark_Lord
Здравствуйте, max!
В ХР очень много вещёй недоступно в досе, вернее там сам дос не достопен, есть только его ну очень эмуляция, чисто что-б не особо ругались...
Ответ отправлен: 12.12.2002, 21:45
Отправитель: Dark_Lord
Вопрос № 2115 |
Дарова. Я тут скачал icedump, хочу сфоткать окно отладчика. Пишу
pagein n
А он мне пишет, что ошибка синтаксиса?! В чём дело? не подскажите?
Вопрос отправлен: 12.12.2002, 12:39
Отправитель: Пупс
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Здравствуйте, Пупс!
А надо pagein d address, size_in_hex, path
Естественно, последние три параметра ты сам уже заполняй
Ответ отправлен: 12.12.2002, 13:06
Отправитель: masquer
Форма отправки вопроса |
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
© 2002 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (39) C / C++ (29) Perl (6) Delphi (23) Pascal (25) Basic / VBA (10) Java / JavaScript (9) PHP (5) MySQL / MSSQL (7) |
Пользователю Windows 95/98/Me (30) Windows NT/2000/XP (22) "Железо" (30) Поиск информации (13) |
Администратору Windows NT/2000/XP (11) Linux / Unix (15) |
Юристу Гражданское право (10) Семейное право (3) Трудовое право (6) КоАП (3) |
Отправить вопрос всем экспертам выбранной рассылки.
© 2002 Россия, Москва. Авторское право: RusFAQ.ru |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||