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

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 508
от 20.03.2003, 23:50

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 2806
Отправлено ответов: 8361
Активность: 297.9 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Beeblebrox
Статус: Профессиональный
Общий рейтинг: 109.54
URL: Beeblebrox / TMA HomePage
[Подробней >>]
Joy
Статус: Опытный
Общий рейтинг: 131.48
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 150.52
URL: Программирование
[Подробней >>]
 
Maverick
Статус: Профессиональный
Общий рейтинг: 137.55
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
akul
Статус: Доверительный
Общий рейтинг: 116.96
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 118.43
[Подробней >>]
 
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 116.04
[Подробней >>]
baldr
Статус: Профессиональный
Общий рейтинг: 113.52
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
Eugene
Статус: Опытный
Общий рейтинг: 109.16
URL: мощный файловый архив
[Подробней >>]
 
masquer
Статус: Профессиональный
Общий рейтинг: 143.64
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 2778. Здравствуйте, тов. эксперты! Вопрос у меня такой: Как сделать так чтобы на экране высветилось меню и... (ответов: 4)
Вопрос № 2779. Добрый день уважаемые эксперты !!!! У меня есть программа , и я хочу сделать её резидентной, или что... (ответов: 3)
Вопрос № 2780. Мен нужно прочитать элементы оглавления . Программа формирует окно и выводит на экран название э... (ответов: 1)
Вопрос № 2781. Здраствуйте Эксперты! Это опять я ! Почему то пример из рассылки Калашникова не работает! Линкуется ... (ответов: 4)
Вопрос № 2782. Как написать прогу на Assembler'e, которая подсчитывает количество символов в строке? Или хотя бы, к... (ответов: 6)
Вопрос № 2783. Доброго времени суток, уважаемые эксперты, не знаете ли как задетектить RAID контроллер и узнать его... (ответов: 1)
Вопрос № 2784. 1.Люди подскажите как использовать NETBIOS в защищенном режиме(под win32) я так понял что для доступ... (ответов: 1)
Вопрос № 2785. Здравствуйте, уважаемые эксперты. Объясните пожалуйста - как вывести на дисплей результат какого либ... (ответов: 4)
Вопрос № 2786. Доброго времени суток ув. Эксперты! В институте начал изучать Assembler(TASM). Подскажите лит-ру и г... (ответов: 3)

Вопросов: 9, ответов: 27


 Вопрос № 2778

Здравствуйте, тов. эксперты!
Вопрос у меня такой: Как сделать так чтобы на экране высветилось меню и играла музыка (для музыки у меня алгоритм есть - но это цикл...). Тоесть дело обстоит так: у меня будет boot loader (тоесть тока биос + порты) Он высветит меню и будет играть музон (пусть просто какой-то цикл - может даже не музон а пграфическая анимация типа бегущей строки). Но как сделать так чтобы выполнялось сразу а лучше 3 задачи?
1) Цикл для музыки
2) Цикл для графики
3) Цикл который проверяет не нажал ли я клавишу чтобы передать управления загрузчику нужной ОС.
ведь как то это люди в demo делают... Первыя мысля это переписать обработчик какого нибудь частого прерывания и написать туда чтобы он проверял не нажата ли клавиша... Тоесть скажем у меня прога рисует графику на цикле - а ведь аппаратно прерывание то всё равно происходит када я жму клаву (правельно?), а я его заменю на свой адрес в котором и будет проверяться что нажато и возвращаться обратно. Скажите я правельно мыслю? Если нет то расскажите pls как надо (не подумайте что я пишу написать код - меня тока интересует как сделать чтобы несколько вещей сразу делались).
ps: если у кого инфа есть по написанию и структуре boot loaderov pls киньте ссылку или сырец (про то как устроен виндовый xp бутлодер и линуковское LILO).
с уважением.



Вопрос отправлен: 15.03.2003, 23:57
Отправитель: Эдвард Самохвалов (zeleniy_kot@yahoo.com)

[Следующий вопрос >>] [Список вопросов]

Отвечает Beeblebrox

Добрый день, Эдвард Самохвалов!
Посмотри мою дему "Mostly Harmless" (лежит в разделе наших работ на http://beeblbrx.narod.ru)

Ответ отправлен: 17.03.2003, 10:00
Отправитель: Beeblebrox


Отвечает Joy

Здравствуйте, Эдвард Самохвалов!
В ДемоСцене используют кучу способов одновремменного выполнения. Например, вложенные циклы. Вообще посоветую тебе ресурсы www.enlight.ru и www.demoscene.ru


Ответ отправлен: 17.03.2003, 11:34
Отправитель: Joy


Отвечает Bob Johnson

Доброе время суток, Эдвард Самохвалов!
Это обычно делается так: вызывается процедура, которая отвечает за музыку, затем вызывается процедура, которая отвечает за графику, затем проверяется клавиатура и т.д.
При этом каждая из этих процедур только проверяет текущее время (не пойми буквально - это обычно время от таймера) и выполняет необходимые действия, если их время пришло - т.е. пусть имеем дело с проигрыванием музыки на спикере, тогда эта процедура смотрит текущее время и, если момент настал, изменяеть тональность звучания ноты выводом соответствующих значений в порты таймера, после чего определяет следующий момент времени и возвращает управление обратно. По такому же принципу работают и остальные процедуры. Так обычно делают однозадачные дема. На счет клавиатуры - если ты перехватишь int9, то все равно тебе надо будет предпринять какие-либо действия, а это надо делать не из обработчика, а из основного цикла, т.е. связь с ним все равно должна быть. Поэтому можно ничего и не писать.


Ответ отправлен: 17.03.2003, 02:27
Отправитель: Bob Johnson


Отвечает Maverick

Здравствуйте, Эдвард Самохвалов!
Есть же в нете исходники Linux, можешь в них поглядеть.
Да и вообще там пресс исходников всяких проектов.
Кидаю тебе на мыло один.
Там впринципе подробно рассмотрена реализация многозадачности (псевдо) в реальном режиме.


Ответ отправлен: 18.03.2003, 05:33
Отправитель: Maverick


 Вопрос № 2779

Добрый день уважаемые эксперты !!!!
У меня есть программа , и я хочу сделать её резидентной,
или что бы оно не отображалась на рабочем столе не на TASKBARe что бы Windows Не переходил на неё по Alt-Tab,Alt-Esc , тоесть программа выполнялась как обычный процесс Windows. И не могли ли вы подсказать где можно найти хорошую книгу по Ассемблеру для начинающих, и компилятор



Вопрос отправлен: 16.03.2003, 02:06
Отправитель: WeSeL (wesel@ua.fm)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Здравствуйте, WeSeL!
Под Windows нет понятия "резидента". Чтобы у програмы не было taskbar button достаточно, чтобы у нее не было никакого окна (т.е. она не должна быть и консольной) - тогда она будет просто висеть в памяти и делать то, что ей нужно, но не по alt-tab, не через taskbar ты к ней не переключишься. Но, соответственно, и окон у нее не будет. Если нужно окно - тогда уже сложнее. Нужно делать его WS_EX_TOOLWINDOW (если ты понимаешь, о чем я).
Но все равно твой процесс будет присуствовать в списке процессов, а с этим бороться значительно сложнее.


Ответ отправлен: 17.03.2003, 02:27
Отправитель: Bob Johnson


Отвечает akul

Добрый день, WeSeL!
дык программа сама не на таскбаре не на алт-таб не показывается, она только в списке процессов. показываются ОКНА программы. если твоя программа не будет иметь окна, то соответственно ее будет видно только в списке процессов. а оттуда убрать нельзя, если только прицепиться к какому-нибудь системному процессу, но это задача явно не для начинающих :)

Ответ отправлен: 16.03.2003, 14:39
Отправитель: akul


Отвечает Joy

Добрый день, WeSeL!
А у тебя программа написана под какую операционку? Если под выньду, то ты ее ни как не сделаешь резидентной (в выньде нет такого понятия как резидент). А если под ДОС.....
Вообще чувствуется, что ты не в зуб ногой. Посмотри литературу на сайте http://www.bobjohnson.nm.ru/
Там есть уроки Калашникова, есть Зубков и много еще что...

Ответ отправлен: 17.03.2003, 11:34
Отправитель: Joy


 Вопрос № 2780

Мен нужно прочитать элементы оглавления .
Программа формирует окно и выводит на экран название элементов оглавления и их значения.
Описание работы:
- Прочитать ф-ей INT 25h c диска A: 0-ой сектор в буфер размером в 512 байт;
- Взять число из 16h ячейки буфера (это число секторов в FAT), умножить его на 2 и прибавить 1; получим номер N сектора оглавления;
- Прочитать ф-ей INT 25h c диска A: сектор с номером N в буфер размером в 512 байт;
- В цикле вывести на экран содержимое оглавления (по 32 байта каждое) в HEX -коде.

Я с мог только вывести имя и расширение файла(32 ), а размер, дату создания, атрибуты я не могу...

0 2 Количество дескрипторов, закрепленных за данный файлом
2 1 Режим доступа к файлу, заданный при его открытии
7 4 Указатель на драйвер, обслуживающий устройство, содержащее файл
11 2 Номер первого кластера файла
13 2 Время последней модификации файла
15 2 Дата последней модификации файла
17 4 Размер файла в байтах
21 4 Указатель В файле
32 11 Имя и расширение файла
46 2 Сегментный адрес PSP программы, открывшей файл
50 2 Номер последнего прочитанного кластера

Есть еще такое, н оя не знаю как этим пользоваться:
N байта Назначение
0...7 Имя файла ( 1-й байт может указывать на статус файла: 00 - файл не используется; E5 - файл удален; 2E - элемент подоглавления;)
8...10 Расширение файла
11 Атрибут ( 00-обычный файл, 01 - только чтение, 02 - "скрытый" файл, 04 - системный, 08 - метка тома, 10 - подоглавление, 20 - архивный )
12...21 Резерв
22...23 Время дня создания (представляется в двоичном формате ЧЧЧЧЧМММ МММССССС)
24...25 Дата создания (представляется в двоичном формате: ГГГГГГГ|М МММДДДДД, где
год начинается с 1980 и может принимать значения от 0 до 119).
26...27 Начальный кластер
28...31 Размер файла в байтах
Что это такое? где это лежит?
Как вывести размер файла? и т.д.


Приложение:


Вопрос отправлен: 16.03.2003, 06:09
Отправитель: shal (shal@nsk.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Ayl

Приветствую Вас, shal!
В общем, то что ты привел в качестве первой структуры - это описание блока DFCB - Data File Control Block (вроде бы так). Для чтения оглавления диска она тебе никак не поможет, она поможет только для определения информации об ОТКРЫТЫХ файлах. Если она тебе интересна - посмотри книжку А.Фролов, Г.Фролов "MS-DOS для программиста", вып.18, часть 1, гл.2 "Векторная таблица связи MS-DOS", раздел 2.6 "Системная таблица файлов SFT" (http://softmaster.h10.ru; логин: bsp0990, пароль: DhfmX94w).
Второе - действительно структура записи каталога для DOS. Насчет вывода - да, таким образом ты сможешь вывести имя и расширение файла. Но остальные данные (аттрибут, дата и время создания, размер, номер первого кластера) тебе вывести не удастся. Потому что ф-ция 40h выводит СИМВОЛЫ, а тебе нужно выводить ЧИСЛА. Так что перед выводом тебе надо преобразовать полученные данные в строку. Причем учти, что дата и время хранятся в упакованном формате. Размер файла - длинное целое число без знака (4 байта), а байт аттрибутов содержит информацию о 6-ти аттрибутах файла (read-only, hidden, system, volume, subdirectory, archive). Кстати, про структуру каталога и т.п. также можно прочитать у Фроловых (вып.19, гл.2 "Логическая структура диска в MS-DOS", раздел 2.4 "Файлы и каталоги".

Ответ отправлен: 17.03.2003, 13:26
Отправитель: Ayl


 Вопрос № 2781

Здраствуйте Эксперты!
Это опять я !
Почему то пример из рассылки Калашникова не работает!
Линкуется и ассамблируются нормально!
А почему не чего не появляеться не знаю!
Странно но файл шел месте с уроками и не работает !
Заранее спасибо


Приложение:


Вопрос отправлен: 16.03.2003, 06:33
Отправитель: LANDO (lando@list.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Maverick

Приветствую Вас, LANDO!
Хе, ты его наверное в XP запускал....
Там надо сначала текстовый режим установить, при помощи прерывания 10h.
Погляди в описании.


Ответ отправлен: 16.03.2003, 16:18
Отправитель: Maverick


Отвечает Bob Johnson

Здравствуйте, LANDO!
А ОС-то у тебя небось Windows XP? Да? Тогда см. на моей странице в разделе FAQ: bobjohnson.nm.ru


Ответ отправлен: 17.03.2003, 02:27
Отправитель: Bob Johnson


Отвечает Joy

Добрый день, LANDO!
А может быть ты просто не увидел? Там появляется рожица на синем фоне в верхнем левом углу. Если ты уверен, что ее нет, то попробуй установить активной нулевую видео страницу.

Ответ отправлен: 17.03.2003, 11:16
Отправитель: Joy


Отвечает Ayl

Добрый день, LANDO!
Хм, а ты его не под XP ли запускаешь? Эта "замечательная операционка всех времен и народов" требует принудительной установки нулевой страницы. Это можно сделать, если вставить в начало программы строки:
mov ax, 3
int 10h

Ответ отправлен: 17.03.2003, 12:47
Отправитель: Ayl


 Вопрос № 2782

Как написать прогу на Assembler'e, которая подсчитывает количество символов в строке? Или хотя бы, какие надо использовать опер-ры?
Спасибо



Вопрос отправлен: 16.03.2003, 14:17
Отправитель: Olga

[Следующий вопрос >>] [Список вопросов]

Отвечает Dark_Lord

Доброе время суток, Olga!
Не знаю под дос или под Windows, если подл дос, то просто убери все е-:
push edi
push ecx
mov edi,offset string
xor ecx,ecx
dec ecx
xor eax,eax
repne scasb
neg ecx
mov eax,ecx
inc eax
inc eax
pop ecx
pop edi

Ответ отправлен: 16.03.2003, 16:59
Отправитель: Dark_Lord


Отвечает Bob Johnson

Здравствуйте, Olga!
> Или хотя бы, какие надо использовать опер-ры?
mov; cmp; jz/jnz; add/inc.


Ответ отправлен: 17.03.2003, 02:27
Отправитель: Bob Johnson


Отвечает Joy

Добрый день, Olga!
Существует очень много способов подсчета длинны строки. Вот, например:
Описываем нашу строку как stroka db "Строка$"
Потом делаем mov di,offset storka
А затем в цикле lodsb. Проверяем AL='$'
Если не равно, то inc счетчик.


Ответ отправлен: 17.03.2003, 11:16
Отправитель: Joy


Отвечает baldr

Добрый день, Olga!
Ну, это делается так:
Если известно, что строка, например, заканчивается символом 0h, то:
mov di, offset stroka
mov cx, 0FFFFh
xor ax, ax
repne scasb
inc cx
inc cx
neg cx

И в cx будет длина.
Ввод и вывод оставляю на Вас.


Ответ отправлен: 16.03.2003, 23:39
Отправитель: baldr


Отвечает Maverick

Здравствуйте, Olga!
Ну это зависит от того, что ты или препод подразумеваете под понятием строка.
Если это набор символов заканчивающийся например 0dh, то так...
.model tiny
.386
.code
org 100h
Begin:
lea di,stroka
go:
cmp byte ptr [di],0dh
je exit
inc di
jmp go
exit:
sub di, offset stroka
ret
stroka db '123456',0dh
end Begin
На выходе di будет содержать кол-во символов.

Ответ отправлен: 16.03.2003, 16:18
Отправитель: Maverick


Отвечает akul

Доброе время суток, Olga!
если для zero-terminated строки то вот моя процедура. Результат возвращается в eax.
k_strlen PROC C USES edi ecx es pStr:DWORD
push ds
pop es
mov edi, pStr
xor eax, eax
or edi, edi
jz f_out
start:
cld
mov ecx, -1
repne scasb
xchg eax, ecx
not eax
dec eax
f_out:
ret
k_strlen ENDP


Ответ отправлен: 16.03.2003, 14:42
Отправитель: akul


 Вопрос № 2783

Доброго времени суток, уважаемые эксперты, не знаете ли как задетектить RAID контроллер и узнать его порты ввода/вывода.
Через PCI функции ничего не получается, видяха обнаруживается, звуковуха - тоже, а RAID - не хочет. И ещё, может подскажите какой нибудь путный форум по кодированию видео, проблема: перекодировать DV1 (за'capture'нный)- в MPEG 4, Layer3.



Вопрос отправлен: 16.03.2003, 15:41
Отправитель: XAB (monarch1@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Eugene

Добрый день, XAB!
Есть очень хороший ресурс по технике и софту с ним связанному. Называется ixbt.com. Тебе, например, может подойти раздел видеозахват
http://forum.ixbt.com/?id=29
или про тв тюнеры
http://tuner.ixbt.com/

Ответ отправлен: 18.03.2003, 16:08
Отправитель: Eugene


 Вопрос № 2784

1.Люди подскажите как использовать NETBIOS в защищенном режиме(под win32) я так понял что для доступа к функциям вместо прерывания используется 32 разрядная точка входа, но где и как ее получить нигде не нашел. Если кто работал с этой штукой подскажите как, или киньте ссылку на доку мона на инглише.
2.Да еще доступно обьясните как набор функций организовать в виде DLL, я раньше DLLки никогда ни писал и как ее дальше юзать.
Если не лень продублируйте на мыло aston@torba.com



Вопрос отправлен: 16.03.2003, 16:25
Отправитель: Alexandr (aston@torba.com)

[Следующий вопрос >>] [Список вопросов]

Отвечает masquer

Добрый день, Alexandr !
2. dll от exe одним флажком в заголовке отличается.
Пишешь DllEntry, затем свои функции, плюс оформляешь def файл, в котором должны быть имена экспортируемых функций.
А вообще я раньше более подробно об этом писал...

Ответ отправлен: 17.03.2003, 12:30
Отправитель: masquer


 Вопрос № 2785

Здравствуйте, уважаемые эксперты.
Объясните пожалуйста - как вывести на дисплей результат какого либо математического выражения, например a=2+2 (числа десятичные). Или посоветуйте литературу.



Вопрос отправлен: 16.03.2003, 22:18
Отправитель: Alexey (wwwLexus@list.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Joy

Здравствуйте, Alexey!
На wasm.ru сможешь найти статью, посвященную выводу шестнадцатиричного числа из AX. Так же, есть пример в книге у Юрова. А вообще принцип прост. Допустим у нас в регистре AL число 34h. Берем первое число, прибавляем к нему 30h и выводим на экран. Потом то же самое со вторым числом.

Ответ отправлен: 17.03.2003, 12:22
Отправитель: Joy


Отвечает Bob Johnson

Доброе время суток, Alexey!
Тебе нужно преобразовать число в строку - т.е. в набор ascii символов. Обычно это делают постепенным делением на 10 (т.к. система счисления у нас десятичная) и далее по остатку можно легко получить число справа налево.


Ответ отправлен: 17.03.2003, 15:53
Отправитель: Bob Johnson


Отвечает Maverick

Здравствуйте, Alexey!
У Юрова неплохо рассмотрены эти аспекты.
В приложении 2 исходника по выводу двоичного и шестнадцатиричного числа на дисплей.



Приложение:

Ответ отправлен: 18.03.2003, 05:33
Отправитель: Maverick


Отвечает Ayl

Доброе время суток, Alexey!
Элементрано. Считаешь результат, потом преобразуешь в строку - и выводишь. По поводу преобразования числа в строку - посмотри на http://rusfaq.ru/cgi-bin/Forum.cgi?Action=ShowOpin&Number=89&Forums=Computers&Qty=25&Sort=

Ответ отправлен: 17.03.2003, 17:30
Отправитель: Ayl


 Вопрос № 2786

Доброго времени суток ув. Эксперты!
В институте начал изучать Assembler(TASM).
Подскажите лит-ру и где скачать.
Можно кинуть на мыло.
Спасибо!



Вопрос отправлен: 16.03.2003, 23:42
Отправитель: Mark

[Следующий вопрос >>] [Список вопросов]

Отвечает Maverick

Приветствую Вас, Mark!
Смотря на каком уровне вы его изучаете...
Если так, для ознакомления, то хватит рассылки Калашникова.
Если более серьезно, то понадобится Зубков.
Ну а дальше в зависимости от потребностей.
Если вас там, вдруг начнут обучать вирмейкингу, то этих книг тебе будет мало :)


Ответ отправлен: 18.03.2003, 05:33
Отправитель: Maverick


Отвечает Bob Johnson

Здравствуйте, Mark!
См. книгу Зубкова - можешь на моей странице (там кстати еще немного есть информации, но большей частью для программирования под винды): bobjohnson.nm.ru


Ответ отправлен: 17.03.2003, 15:53
Отправитель: Bob Johnson


Отвечает Joy

Здравствуйте, Mark!
По Assembler'у очень много всякой литературы. Посоветую тебе почитать учебник Юрова (как раз по TASM'у).
P.S. Очень много полезного на http://www.bobjohnson.nm.ru/

Ответ отправлен: 17.03.2003, 11:16
Отправитель: Joy



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

Внимание!
Форма может работать некорректно в почтовых программах "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 (35)
C / C++ (30)
Perl (6)
Delphi (16)
Pascal (18)
Basic / VBA (11)
Java / JavaScript (10)
PHP (7)
MySQL / MSSQL (6)
Пользователю
Windows 95/98/Me (32)
Windows NT/2000/XP (26)
"Железо" (29)
Поиск информации (14)
Администратору
Windows NT/2000/XP (11)
Linux / Unix (14)
Юристу
Гражданское право (7)
Семейное право (3)
Трудовое право (4)
КоАП (4)

Отправить вопрос всем экспертам выбранной рассылки.




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное