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

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.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
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
Отписаться
Убрать рекламу

В избранное