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

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


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

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

Выпуск № 684
от 08.01.2004, 04:40

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


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

ASMодей
Статус: Профессиональный
Общий рейтинг: 112.43
[Подробней >>]
fC
Статус: Профессиональный
Общий рейтинг: 145.33
URL: Тезка :)
[Подробней >>]
SedHg
Статус: Доверительный
Общий рейтинг: 116.12
[Подробней >>]
 
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 110.37
[Подробней >>]
Artemy
Статус: Опытный
Общий рейтинг: 118.63
Телефон: 8 905 549 38 66
[Подробней >>]
Евгений Иванов
Статус: Профессиональный
Общий рейтинг: 136.92
URL: Super Assembler Software
Телефон: Пчёлка +7 905 6601206
[Подробней >>]
 
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 146.84
URL: Программирование
[Подробней >>]
never_again
Статус: Опытный
Общий рейтинг: 127.87
[Подробней >>]
Gibbel
Статус: Профессиональный
Общий рейтинг: 106.11
URL: Savage Metal Club - жизнь в стиле рок-н-ролл
Телефон: +7 901 710 3146
[Подробней >>]
 
Ayl
Статус: Профессиональный
Общий рейтинг: 116.52
[Подробней >>]
St
Статус: Профессиональный
Общий рейтинг: 105.62
[Подробней >>]
Hangatyr
Статус: Профессиональный
Общий рейтинг: 108.87
[Подробней >>]
 
_vt
Статус: Профессиональный
Общий рейтинг: 118.2
[Подробней >>]


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

Вопрос № 4729. Здраствуйте. FASM Как в загрузчике сделать русский шрифт. Как запускать из загрузчика другое приложе... (ответов: 1)
Вопрос № 4730. Привет! Кто-нибудь знает, где можно скачать Soft-ICE для Windows XP и все необходимые патчи к нему? ... (ответов: 2)
Вопрос № 4732. Здравствуйте, уважаемые эксперты! С наступившим Вас! Я покопался в базе, но не нашел подробного алго... (ответов: 4)
Вопрос № 4736. Здравствуйте уважаемые эксперты. Если не затруднительно, помогите написать маленькую программку на а... (ответов: 2)
Вопрос № 4737. Здравствуйте. Подскажите пожалуйста, как можно определить, где начинется и где заканчивается свободн... (ответов: 2)
Вопрос № 4738. Здравствуйте уважаемые эксперты. Написал маленькую консольную програмку, которая должна проигрывать ... (ответов: 2)
Вопрос № 4739. Помогите разобраться со структурами в языке ассемблере. как обращаться к полям объявленной структуры... (ответов: 4)
Вопрос № 4740. 20 минут назад обратился с вопросом по структурам. За ответ спасибо но я внем ничего не понял. Я пол... (ответов: 4)
Вопрос № 4741. Здравствуйте. Как сделать, чтоб после выведения на экран текстовой строки, вторая выводимая строка в... (ответов: 7)

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


 Вопрос № 4729

Здраствуйте.
FASM
Как в загрузчике сделать русский шрифт.
Как запускать из загрузчика другое приложение (com)
Как вернуть упровление ОС при загрузке.



Вопрос отправлен: 01.01.2004, 23:07
Отправитель: Pawel

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

Отвечает ASMодей

Здравствуйте, Pawel!
Ручками, все ручками.
1. Находишь описание знакогенератора для стандартного VGA, смотришь как там организована работа со шрифтом и меняешь его на свой русифицированный.
2. Насчет запуска другого приложения все немного сложнее: для начала это приложение надо прочитать с диска, а для этого надо разбираться в файловой системе. Далее, если это COM-файл, то просто передаешь ему управление командой CALL (не забудь про смещение в 100h байт). Для запуска EXE-файла еще придется пройтись по нему и изменить все адреса сегментов.
3. Какой ОС ты собрался вернуть управление, если она еще не загружена? Загружай ее ядро и запускай его (см. п.2).

Ответ отправлен: 05.01.2004, 08:17
Отправитель: ASMодей


 Вопрос № 4730

Привет! Кто-нибудь знает, где можно скачать Soft-ICE для Windows XP и
все необходимые патчи к нему? Я из многих мест скачивал и ничего
стабильно не работало, доводило даже до синего экрана. Спасибо!



Вопрос отправлен: 02.01.2004, 00:30
Отправитель: Mafia32

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

Отвечает fC

Доброе время суток, Mafia32!
попробуй этот
http://reversing.kulichki.net/files/debug/sinstallnt.exe
патчи тут
http://reversing.kulichki.net/files/debug/debug.htm
Удачи!
P.S.
Че там с организацией? :)

Ответ отправлен: 02.01.2004, 09:47
Отправитель: fC


Отвечает SedHg

hi, Mafia32!
А смотрел ли ты тут - reversing.kulichki.net


Ответ отправлен: 05.01.2004, 19:14
Отправитель: SedHg


 Вопрос № 4732

Здравствуйте, уважаемые эксперты!
С наступившим Вас!
Я покопался в базе, но не нашел подробного алгоритма вывода вещественного числа.
Проблема такая: есть вещественное число, скажем в ST,
надо преобразовать его в ASCII строку (в формате с E+xxx на конце). Подскажите, плз, как это сделать, только поподробнее.
Спасибо.



Вопрос отправлен: 02.01.2004, 09:24
Отправитель: CoolerTheGreat

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

Отвечает Dark_Lord

Добрый день, CoolerTheGreat!
команда FPU fxtract помещает мантиссу st(0) в st(0), а экспоненту в st(1), нантисса - это число, экспонента - это степень 10, на которую число должно быть умножено! Эстественно всё это в HEX.

Ответ отправлен: 02.01.2004, 13:40
Отправитель: Dark_Lord


Отвечает Artemy

Добрый день, CoolerTheGreat!
Посмотри тут...
http://yas-egor.narod.ru/predchisinf.htm
... и на основе этого пиши алгоритм.

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


Отвечает Евгений Иванов

Добрый день, CoolerTheGreat!
Смотри исходники HLA.
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 03.01.2004, 15:26
Отправитель: Евгений Иванов


Отвечает Bob Johnson

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

* EMan1.5: ---===*** The game we play ***===---


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


 Вопрос № 4736

Здравствуйте уважаемые эксперты. Если не затруднительно, помогите написать маленькую программку на ассемблере, которая открывает файл, имя которого вводится с клавиатуры, выводит на экран все 256 символов и напротив каждого процентное содержание данного символа в файле.
Зачёты подошли к концу, голову уже сломал как сделать эту лабу :((. Заранее спасибо.



Вопрос отправлен: 02.01.2004, 22:21
Отправитель: Василий

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

Отвечает never_again

Приветствую Вас, Василий!
Что значит "процентное содержание данного символа в файле"????
всё же остальное (вернее предыдущее) сделать очень просто.


Ответ отправлен: 03.01.2004, 13:11
Отправитель: never_again


Отвечает Gibbel

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

Ответ отправлен: 04.01.2004, 01:43
Отправитель: Gibbel


 Вопрос № 4737

Здравствуйте. Подскажите пожалуйста, как можно определить, где начинется и где заканчивается свободная область памяти после загрузки ОС(DOS), чтобы в дальнейшем я мог туда что-нибудь записать, задавая адрес явно. Заранее благодарю.



Вопрос отправлен: 03.01.2004, 00:24
Отправитель: Vad

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

Отвечает Евгений Иванов

Доброе время суток, Vad!
Это неизвестно.
Используй:
Function 48h (72) Allocate Memory
Allocates a specified number of memory paragraphs.
On entry: AH 48h
BX Number of memory paragraphs to be allocated
Returns: AX Segment address of allocated memory
Error code, if CF is set
BX Size of largest available block (CF set)
Error codes: 7 Memory control blocks destroyed
8 Insufficient memory
Call Function 59h for extended error code information
(DOS 3.0 and above).
--------------------------------------------------------------------------
Function 48h dynamically allocates memory, in multiples of 16 bytes
(one paragraph). The amount of memory to be allocated, in paragraphs,
is specified in BX. If the function is successful, AX:0000 points to
the allocated memory block. (AX holds the segment address; the offset
is always 0000).
Notes: By setting BX=FFFFh before calling, this function
can be used to find the amount of available memory,
which will be returned in BX. (The call will return
an error, which can be ignored, since DOS cannot
allocate more than 640k of memory.)
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 03.01.2004, 16:16
Отправитель: Евгений Иванов


Отвечает Ayl

Доброе время суток, Vad!
Если тебе нужна просто область памяти в момент работы твоей программы, то ты ее можешь выделить с помощью вызова функции 48h прерывания 21h. Для программы типа .COM перед этим нужно освободить память за твоим программным сегментом.

Если же ты хочешь отхватить у DOS кусочек памяти, то тут есть несколько вариантов:
1. Пишешь резидентную программу, которая в момент установки будет выделять кусок памяти и больше не выполнять никаких действий (резидентная, потому что при выходе из нерезидентной программы вся выделенная ею память освобождается).
2. Пишешь нерезидентную программу, которая также выделяет кусок памяти и затем изменяет MCB для выделенного куска памяти так, чтобы он не принадлежал твоей программе.
3. Проходишь по цепочке MCB-блоков и находишь последний блок, помеченный как свободный. Выкусываешь из него кусок и изменяешь MCB.
4. Пишешь boot-программу, которая загружается до ДОС, "откусывает" нужную память и после этого загружает ДОС.


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


 Вопрос № 4738

Здравствуйте уважаемые эксперты. Написал маленькую консольную програмку, которая должна проигрывать WAV файл с командной строки. Вопрос в следующем, как узнать когда WAV файл полностью проиграится? В моей программе раздается только щелчок, если поставить бесконечный цикл перед ExitProcess то все нормально, за исключением выхода ;)). Помогите


Приложение:


Вопрос отправлен: 03.01.2004, 09:52
Отправитель: Виталий (ZAVitaliY@yandex.ru)

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

Отвечает Евгений Иванов

Добрый день, Виталий!
SND_ASYNC
The sound is played asynchronously and PlaySound returns immediately after beginning the sound. To terminate an asynchronously played waveform sound, call PlaySound with pszSound set to NULL.
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 03.01.2004, 16:23
Отправитель: Евгений Иванов


Отвечает Bob Johnson

Доброе время суток, Виталий!
Убери флаг SND_ASYNC, тогда функция не вернет управление до тех пор, пока файл не будет проигран полностью. Как узнать, закончилось ли воспроизведение асинхронного звука в этой функции я не знаю (это может быть вообще невозможно). Для этого можешь использовать wave-функции или DirectSound.

* EMan1.5: ---===*** The game we play ***===---


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


 Вопрос № 4739

Помогите разобраться со структурами в языке ассемблере.
как обращаться к полям объявленной структуры? Команды типа mov structura.pole,dx не работают!!
В книгах информации очень мало. очень прошу помогите. мой email: ivchencov@mail.ru
Заранее спасибо.



Вопрос отправлен: 04.01.2004, 00:12
Отправитель: Влад (ivchencov@mail.ru)

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

Отвечает never_again

Доброе время суток, Влад!
>>Команды типа mov structura.pole,dx не работают!!
простите, конечно, но то, что вы говорите - чушь несусветная!!!
если у вас правильно нписана структура и совпадают типы данных (mov word,word или mov byte,byte и не иначе), то всё прекрасно работает (физически не может не работать


Ответ отправлен: 04.01.2004, 11:21
Отправитель: never_again


Отвечает St

Привет, Влад!
Сначала вы (или кто-то до вас) в .inc файле объявляет структуру. к примеру:
UINT EQU

RECT struc
rcLeft UINT ?
rcTop UINT ?
rcRight UINT ?
rcBottom UINT ?
RECT ends
Затем вы в своем asm файле инициализируете эту структуру под неким именем в сегменте данных
MY_RECT RECT <0>
а затем в коде обращаетесь к любому полю, следя за типами данных
mov eax,MY_RECT.rcLeft
mov MY_RECT.rcBottom,25
St


Ответ отправлен: 05.01.2004, 14:25
Отправитель: St


Отвечает Евгений Иванов

Приветствую Вас, Влад!
t equ type
;------------ свойства буфера для обработки звукового файла
struc SoundBufInfo
mem dd ? ;буфер для обработки звукового файла
len dd ? ;длина всего буфера в байтах
position dd ? ;текущее смещение в буфере
present dd ? ;действительные данные в буфере
ends SoundBufInfo
Call GlobalAlloc, GPTR, size SoundBufInfo
or eax, eax
jz @@exitErr
mov [@@bi], eax
xchg edi, eax
;--
mov eax, [@@LenBuf]
mov [(t SoundBufInfo edi).len], eax
mov eax, [(t SoundBufInfo ebx).mem]
- = = = = -
t - это оператор TYPE
Бывай!
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 04.01.2004, 00:49
Отправитель: Евгений Иванов


Отвечает Ayl

Доброе время суток, Влад!

structura struc
pole1 db ?
pole2 dw ?
structura ends

...

.Data

s structura <>

...

lea bx, s
mov [bx.pole2], dx

...


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


 Вопрос № 4740

20 минут назад обратился с вопросом по структурам. За ответ спасибо но я внем ничего не понял. Я полный ламер в асме (пока). постараюсь сформулировать мой вопрос по другому.
имеем структуру
stud struc
fam db 20
im db 30
stud ends
Объявили переменнную
s1: stud <>;
как присвоить например s1.fam какоето значение (например строку 'hhh')?
В си это было просто
s1.fam:='hhh';
Я уже перепробовал все
Мне очень нужна ваша помощь!(Спросить не у кого а ехать на консультацию в институт далеко, УЧУСЬ ЗАОЧНО)
ЭЭто нужно для простейшей програмы записи структур в файл(курсовик), грубо говоря базы данных
заранее спасибо




Вопрос отправлен: 04.01.2004, 01:20
Отправитель: Влад (ivchencov@mail.ru)

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

Отвечает Hangatyr

Здравствуйте, Влад!
Во-первых, место под строку в структуре надо выделить так:
fam db 20 dup (0), а у вас получается, что выделен один байт ;)
Чтобы поместить в fam строку нужно сделать так:
lea edi, sl.fam
lea esi, some_string
mov ecx, sizeof some_string
rep movsb
или так:
lea edi, some_string
lea eax, sl
mov ecx, sizeof some_string
assume eax:ptr stud
lea esi, [eax].fam
rep movsb
assume eax:nothing
P.S. Если пишете под дос, то eax, edi, esi замените на ax, di, si

Ответ отправлен: 04.01.2004, 11:25
Отправитель: Hangatyr


Отвечает never_again

Добрый день, Влад!
поверте не всё! :)
вам нужно для начала выделить место под строку. Ведь просто так и в Си не получится. Нужно в Си делать так "char fam[20],im[30];" верно? В ассемблере абсолютно тоже самое!!! (Хм, интересно почему? :) )
ваша структура должна имете вид:
stud struc
fam db 20 dup (?) ; dup - от слова duplicate (кажется)
im db 30 dup(?)
stud ends
теперь прекрасно сработает такой метод задания переменных:
s1 stud <'Пупкин','Василий'>
это если вы хотите, чтобы в структуре была именно строка, ведь можно ещё и указатель на строку использовать...


Ответ отправлен: 04.01.2004, 11:04
Отправитель: never_again


Отвечает Евгений Иванов

Приветствую Вас, Влад!
:)
я хохочу до сих пор
спасибо за понятие настроения!
выздровлю точно! (болею сейчас)
во первых, надо писать так:
stud struc
fam db 20 dup(?)
im db 30 dup(?)
stud ends
во вторых:
что Это?!
> s1: stud <>;
надо так в Ассемблере:
s1 stud <>
в терьих, чтобы записать туда что-либо, делай так:
fam0 db "Сидоров",0
im0 db "Петя",0
lea edi,[(type stud s1).fam]
mov esi,offset fam0
call copysitodi
lea edi,[(type stud s1).im]
mov esi,offset im0
call copysitodi
ну и так далее
Бывай!
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 04.01.2004, 12:14
Отправитель: Евгений Иванов


Отвечает Ayl

Здравствуйте, Влад!
См. приложение.


Приложение:

Ответ отправлен: 05.01.2004, 18:02
Отправитель: Ayl


 Вопрос № 4741

Здравствуйте.
Как сделать, чтоб после выведения на экран текстовой строки, вторая выводимая строка выводилась бы уже с другой строки? Я догадываюсь, что скорее всего вместо $ должно стоять что-то другое... или нет?



Вопрос отправлен: 04.01.2004, 04:31
Отправитель: Torn (torn_bk_ru@bk.ru)

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

Отвечает Евгений Иванов

Доброе время суток, Torn!
13,10
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 04.01.2004, 22:34
Отправитель: Евгений Иванов


Отвечает never_again

Доброе время суток, Torn!
ну не совсем так. ведь интеррапт должен знать когда остановится. просто перед $ нужно вставить два символа -> New Line(0ah) и Carrige return(0dh). При этом строка в сегменте данных выглядит так:
str db 'some string',0ah,0dh,'$'


Ответ отправлен: 04.01.2004, 10:41
Отправитель: never_again


Отвечает _vt

Приветствую Вас, Torn!
Надо в конец строки вставить символы перевода "каретки" - коды символов 10 и 13 - примерно так:

message db "Hello, world!",10,13,"$"
--- E-Man 1.5+ : Happy New Year!


Ответ отправлен: 04.01.2004, 05:06
Отправитель: _vt


Отвечает Dark_Lord

Доброе время суток, Torn!
0Dh, 0Ah - после вывода этих двух сиволов всё последующее выводится с новой строки.

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


Отвечает Ayl

Доброе время суток, Torn!
Нужно еще дописать символ перевода строки. Для ДОС он формируется из пары символов:
возврат каретки (CR) - код 13 (0Dh)
перевод чтроки (LF) - код 10 (0Ah)

Т.е. твоя строка должна выглядить так:
stroka db \'Моя строка\', 13, 10, \'$\'

или так:
stroka db 13, 10, \'Моя строка$\'

В первом случае перевод строки будет выполнен после вывода строки "Моя строка", а во втором - до.


Ответ отправлен: 05.01.2004, 18:08
Отправитель: Ayl


Отвечает SedHg

Доброе время суток, Torn!
Это делается очень просто.
Достаточно прописать твою строку таким образом:
message db "Hello World!",0Dh,0Ah,'$'
Эти два символа: "0Dh,0Ah" осуществляют перевод строки
и возврат каретки, соответственно. Проще говоря, следующая текстовая строка будет
выводится на следующей строке «экрана». И символ $ трогать совсем не надо, он тут совсем ни причем ;).


Ответ отправлен: 05.01.2004, 19:07
Отправитель: SedHg


Отвечает Bob Johnson

Добрый день, Torn!
Поставь 13, 10.

* EMan1.5: ---===*** The game we play ***===---


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



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

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

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

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (25)
C / C++ (18)
Perl (4)
Builder / Delphi (20)
Pascal (21)
Basic / VBA (3)
Java / JavaScript (5)
PHP (13)
Криптография (7)
WinAPI (13)
Пользователю
Windows 95/98/Me (42)
Windows NT/2000/XP (58)
"Железо" (30)
Поиск информации (21)
Администратору
Windows NT/2000/XP (28)
Linux / Unix (12)
Юристу
Гражданское право (12)
Семейное право (8)
Трудовое право (9)
КоАП (8)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


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


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

В избранное