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

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


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

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

Выпуск № 311
от 08.07.2002, 02:00

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


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

masquer
Статус: Профессиональный
Общий рейтинг: 160.84
[Подробней >>]
Spike
Статус: Доверительный
Общий рейтинг: 120.47
[Подробней >>]
Артём Шегеда
Статус: Профессиональный
Общий рейтинг: 123.47
URL: Пристанище неодинокого программиста
[Подробней >>]
 
kvINT
Статус: Опытный
Общий рейтинг: 113.29
[Подробней >>]
Александр
Статус: Опытный
Общий рейтинг: 113.99
[Подробней >>]
Vint by Shz
Статус: Опытный
Общий рейтинг: 113.09
[Подробней >>]
 
freeseacher
Статус: Опытный
Общий рейтинг: 111.14
Телефон: 8(3832)366362
[Подробней >>]
AnSim
Статус: Опытный
Общий рейтинг: 109.54
[Подробней >>]


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

Вопрос № 611. Люди! Как при помощи досовской функции 4Eh получить все подкаталоги?... (ответов: 1)
Вопрос № 612. Здрвствуйте эксперты!!! Все из нас знают, что лучший и быстрый способ научится писать программы, - э... (ответов: 1)
Вопрос № 613. Ув. Артём Шегеда, Извините за оффтопик, но Вам не кажется, что басня про лису и виноград-Эзопа, а не... (ответов: 1)
Вопрос № 614. Уважаемые программисты ! Я тут потихоньку-тихоньку изучаю программирование под Win. Делаю это на Tur... (ответов: 4)
Вопрос № 615. Доброго дня - ув. эксперты! Не работает функция FindFirstFile и иже с ними. Вот вам кусок кода. и н... (ответов: 1)
Вопрос № 617. Сам отвечаю на свой вопрос.ИМХО кому-то пригодиться. Вопрос: Вопрос по сайсу.Цель-заставить сабж гру... (ответов: 1)
Вопрос № 618. Добрый день (можно Бодрый день..., но это не про меня)! Как воспользоваться установленной задержкой ... (ответов: 2)
Вопрос № 619. Как сделать DLL-файл на ассемблере? А именно на TASM. Мне нужно следующее: что вводить в командную с... (ответов: 3)
Вопрос № 620. тут вот при обсуждении ОСки - автор проекта написал: >> И последнее это отказ от стека(ядро его >> и... (ответов: 4)
Вопрос № 621. Привет Spike Благодарю за задачи, но мы же не в детском саде. :) ... (ответов: 2)
Вопрос № 622. Здравствуйте господа эксперты! Скажите пожалуйста, как востановить затертые файлы на CD-RW, и как эт... (ответов: 3)
Вопрос № 623. Хэлоу, эксперты! Нужна ваша помощь. Объясните начинающему асм-кодеру, самыми простыми словами, что т... (ответов: 3)

Вопросов: 12, ответов: 26


 Вопрос № 611

Люди! Как при помощи досовской функции 4Eh получить все подкаталоги?



Вопрос отправлен: 02.07.2002, 21:31
Отправитель: Nekto

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

Отвечает masquer

Добрый день, Nekto!
установи 4 бит атрибутов в единицу
mov cx, 10h; 00010000b

Ответ отправлен: 02.07.2002, 22:35
Отправитель: masquer


 Вопрос № 612

Здрвствуйте эксперты!!!
Все из нас знают, что лучший и быстрый способ научится писать программы, - это практика.
Знает ли кто-нить ресурс в нете, где можно скачать упражнения, задачи по программированию на ассемблере.
Заранее благодарен.



Вопрос отправлен: 03.07.2002, 03:23
Отправитель: Сергей (cppdummy@narod.ru)

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

Отвечает Spike

Здравствуйте, Сергей!
Вот те задачи:
1. Ввести с клавиатуры два числа, сложить и вывести результат.
2. Ввести с клавиатуры имя текстового файла, считать его и вывести на экран, если он слишком большой, сделать вывод постранично.
3. В графическом видеорежиме вывести крестик, который управляется с клавиатуры, еще лучше мышью, при нажатии например клавиши 1 крестик оставляет след, клавиша 2 - просто перемещение.
Spike.


Ответ отправлен: 03.07.2002, 15:11
Отправитель: Spike


 Вопрос № 613

Ув. Артём Шегеда,
Извините за оффтопик, но Вам не кажется, что басня про лису и виноград-Эзопа, а не Крылова? Я почти уверен...



Вопрос отправлен: 03.07.2002, 05:18
Отправитель: Шура

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

Отвечает Артём Шегеда

Приветствую Вас, Шура!
Вы знаете, сначала хотел возмутиться, но потом пытливый ум решил проверить: так ли это? Запросил на Rambler - и получил подтверждение: идея басни про лису и виноград впервые пришла на ум именно Эзопу. Не знаю, передрал ли Крылов эту басню, перевёл ли её красиво с латыни или просто сам додумался, но нам, глупым никто Эзопов текст не показывал :(. Поэтому сослался на русского баснописца.
Во, блин оффтопик...

Ответ отправлен: 04.07.2002, 17:09
Отправитель: Артём Шегеда


 Вопрос № 614

Уважаемые программисты !
Я тут потихоньку-тихоньку изучаю программирование под Win. Делаю это на Turbo Ass. Помогите научиться создавать и подключать рессурсу к проекту ( например: создать и скомпилить диалог, обработку введенных значений. Какие для этого нужны проги и КЛЮЧИ ДЛЯ КОМПИЛЯТОРА ? )
Буду благодарен за предоаставленные исходники для изучения.
Илья
mis421@chat.ru



Вопрос отправлен: 03.07.2002, 08:54
Отправитель: Ilya

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

Отвечает masquer

Приветствую Вас, Ilya!
Люди, я уже охрип кричать - скачай пакет МАСМ32, там есть все ответы на вопросы начинающего. По твоему вопросу - создаешь ресурс, где - не важно, хоть в визуал студии, хоть вручную, есть программка rc.exe - Resource compile, он создает res-файл, потом "cvtres /machine:ix86 rsrc.res" - создается obj, потом "Link /SUBSYSTEM:WINDOWS %1.obj rsrc.obj". Усе!

Ответ отправлен: 03.07.2002, 09:16
Отправитель: masquer


Отвечает Spike

Добрый день, Ilya!
На мыло кинул 233 кило инфы по этому поводу, жди и оно придет.
Spike.


Ответ отправлен: 03.07.2002, 15:11
Отправитель: Spike


Отвечает kvINT

Приветствую Вас, Ilya!
Меню, диалоги пишутся в текстовом редакторе, сохраняются с расширением .rc. Затем программой brcc32.exe получается файл ресурсов с расширением .res.
Вот пример .bat-файла, к-рый компилирует, линкует и выводит инф-цию о результатах в текстовый файл:
c: asm5inrcc32.exe %1
c: asm5in link32 /v %1,%1,,c: asm5libimport32,,%1 >c:kbaq1.txt

Ответ отправлен: 03.07.2002, 18:35
Отправитель: kvINT


Отвечает Александр

Приветствую Вас, Ilya!
Ключи нужны не для компилятора! А для линковщика. Вообще вопрос с подключением ресурсов выглядит так. Сначала необходимо создать файл(ы) ресурсов. Потом откомпилировать их с помощью RC(Resource Compiler, у дядьки Borland'а - BRC). В результате из файла формата RC получаем файл формата RES. Потом прилинковываем всё это, с помощью того же BRC к уже готовому EXE-файлу(программу должна быть собрана с использованием соответствующего .DEF-файла). Вот и всё! Ещё вопросы?


Ответ отправлен: 05.07.2002, 15:56
Отправитель: Александр


 Вопрос № 615

Доброго дня - ув. эксперты! Не работает функция FindFirstFile и иже с ними.
Вот вам кусок кода. и не работает. Где я не прав?
Sorry за С


Приложение:


Вопрос отправлен: 03.07.2002, 10:35
Отправитель: Dима (ldu@ua.fm)

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

Отвечает masquer

Доброе время суток, Dима!
FindFirstFile все правильно работает.
Вместо cook=FindFirstFile("c:windowsCookies*.*",cokdat);
пиши
SetCurrentDirectory("c:windowsCookies");
cook=FindFirstFile("*.*",cokdat);

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


 Вопрос № 617

Сам отвечаю на свой вопрос.ИМХО кому-то пригодиться.
Вопрос:
Вопрос по сайсу.Цель-заставить сабж грузить КОД И ИСХОДНИК.
Под дос-все нормально(действовал согласно мануалке айса и TASM-а 2.0).Под WIN32(опять же согласно мануалке в masm32):
1.Ассемблирую: ml /c /coff /Zi 1.asm -нормально!
2.Линкую: link.exe /SUBSYSTEM:WINDOWS /DEBUG /DEBUGTYPE:CV 1.obj -OK!
ЛИБО :link.exe /SUBSYSTEM:WINDOWS /DEBUG /DEBUGTYPE:CV /PDB:NONE - Выбрасывает ошибку CVPACK error
3.Загружаю SYMBOL LOADER -ом - загружается(C:masm321.exe opened successfully).
4.Жму TRANSLATE-выскакивает ошибка:Error: Can't find Visual C++ MSPDBXX.DLL in path. Add the DevStudiosharedidein directory to path.
..........................................................
ВОПРОС:Как бороться?!!!!
ОТВЕТ: в стандартном пакете MASM32 не было утилиты Cvpack.exe .Использование ее из MASM61 результатов не давало ИМХО из-за несовместимости версий МАСМов.
ВЫХОД:взял файлы Cvpack.exe,Mspdb60.dll из Microsoft Visual C++ 6.0, переписал в masm32Bin и все заработало!!!
С уважением Aice. (nashostrov.mailru.com)



Вопрос отправлен: 03.07.2002, 12:49
Отправитель: Alice (nashostrov@mailru.com)

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

Отвечает Vint by Shz

Приветствую Вас, Alice!
Всё, ясно!


Ответ отправлен: 04.07.2002, 20:54
Отправитель: Vint by Shz


 Вопрос № 618

Добрый день (можно Бодрый день..., но это не про меня)!
Как воспользоваться установленной задержкой используя:
int 15h ah = 86h?
В своей игре "дикий червяк" хочу сделать n-е количество задержек...!



Вопрос отправлен: 03.07.2002, 13:28
Отправитель: kuper

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

Отвечает Vint by Shz

Здравствуйте, kuper!
Вот описание етой функции:
"86H Ждать.Циклит с разрешением прерывания до истечения интервала времени.
Вход: СХ,DX -сколько секунд ждать до возврата к пользователю."
Вот отседова и делай выводы...


Ответ отправлен: 04.07.2002, 20:54
Отправитель: Vint by Shz


Отвечает Spike

Приветствую Вас, kuper!
Используй прерывание 1Ch. BIOS получает управление от системного таймера, делает нужную задержку и вызывает прерывание 1Ch. Только не забудь сохранять все используемые регистры и выходить IRET'ом.
Spike.


Ответ отправлен: 03.07.2002, 17:12
Отправитель: Spike


 Вопрос № 619

Как сделать DLL-файл на ассемблере? А именно на TASM. Мне нужно следующее: что вводить в командную строку, какие файлы должны быть и т.п.



Вопрос отправлен: 03.07.2002, 16:12
Отправитель: Игорь

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

Отвечает masquer

Добрый день, Игорь!
Так же, как и везде, создал def-файл, в нем экспорт прописал, при линковке ключ указывать Link /DLL /DEF:mydll.def .... В остальном все как и exe.

Ответ отправлен: 04.07.2002, 10:51
Отправитель: masquer


Отвечает Spike

Доброе время суток, Игорь!
Для создания DLL-файла нужно сделать следующее:
1. При компиляции и компоновке использовать ключи:
TAsm.exe /m /x /ml name.asm
TLink.exe /Tpd /c name.obj,,,,name.def
2. Создать файл name.def, в который надо включить имена функций:
EXPORTS FunctName1C FunctName1 FunctName2C и т.д.
3. В основном тексте программы сделать общими имена функций:
.386
.model flat
public FunctName1C
public FunctName1
public FunctName2C
...
4. В сегменте кода добавить следующие процедуры:
.code
;Процедура DLLEntry получает три параметра - идентификатор, причину вызова и зарезервированный параметр.
_start@12:
mov al,1 ;Надо вернуть не ноль (TRUE)
ret 12 ;Снять со стека параметры и выйти
;Дальше идут свои процедуры:
;Функция 1 для вызова из C. Т.к. C передает параметры через стек нужно делать отдельную точку входа.
FunctName1C proc
pop ecx ;Сохранить адрес возврата (он хранится первым при вызове функции)
... ;Здесь надо снять все параметры, которые передавались функции (pop eax, pop ebx, ...)
push ecx ;Адрес возврата обратно в стек (нам же нужно будет выйти)
... ;Здесь находится основной текст функции
ret ;Выход
FunctName1C endp
;Функция 1 для вызова из ассемблера
FunctName1 proc
... ;Здесь находится основной текст функции
ret ;Выход
FunctName1 endp
;Для остальных функций специфика та же
Если не предпологается использование функции из C, то соответствующую процедуру можно удалить. Вообще главное знать, как передаются параметры в функцию и следить за этим. Если подумать, то можно сделать один обработчик для функций C и ASM, преобразовав параметры к общему виду.
Я это все не проверял, так что если возникнут проблемы, мыль на spgroup@i.com.ua.
Spike.


Ответ отправлен: 04.07.2002, 12:08
Отправитель: Spike


Отвечает Александр

Добрый день, Игорь!
открываем книгу Зубкова С.В. "Ассемблер - язык неограниченных возможностей" или руководсто по TASM и находим следующее.
tasm /m /x /ml dllsrc.asm
tlink32 -Tpd -c dllsrc.obj,,,,dllsrc.def
Где dllsrc.def файл с именами экспортируемых функций, т.е. он должен выглядеть так:
EXPORTS func1 func2 func3
В .ASM файле эти функции должны быть объявлены как public. И вообще скелетный файл DLL для TASM в приложении.


Приложение:

Ответ отправлен: 05.07.2002, 15:56
Отправитель: Александр


 Вопрос № 620

тут вот при обсуждении ОСки - автор проекта написал:
>> И последнее это отказ от стека(ядро его
>> использует для снятия установки задачи - процессор так
>> сделан(тоесть один стек в системе для всех и то не большой на 3
>> регистра - больше не надо для переключения модулей))стековые
>> регистры не используются на уровне модуля(отсюда еще меньще
>> контекст - еше быстее переключение(реакция системы выше)).
>> Потому что стек это - геморой, все пихают, у каждого кольца свой стек,
>> никто не контролирует, нереполнение стека - это бичь всех систем
>> кто его использует и с этим ника не побороться.
Я с этим не согласен.
Уважаемые эксперты - проясните плиз - кто из нас ламер ???
И вообще - кто нить видит реальным писать прогу без использования процедур (CALL NNNN) и стека вообще ???
PS товарищи - а куд знаменитый WizardX делся ??? - привет ему огромный :-)



Вопрос отправлен: 03.07.2002, 16:50
Отправитель: Scolitex

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

Отвечает Vint by Shz

Здравствуйте, Scolitex!
Нет,я считаю ,что написать прогу без процедур написать можно.Но если ОНА ОЧЕНЬ МАЛЕНЬКАЯ!!И если вообще выбросить стек, то какая на фиг вообще оптЯмизация может быть?


Ответ отправлен: 04.07.2002, 20:54
Отправитель: Vint by Shz


Отвечает Spike

Здравствуйте, Scolitex!
Во-первых не без стека вообще, останется системная работа со стеком (переключение задач, вызов исключений и т.д.) и обойти это нельзя.
Во-вторых работа без CALL nnnn элементарно делается вот так:
mov ax, offset RetFromFunct
jmp near CallFunct
RetFromFunct:
...
Функция:
CallFunct:
...
jmp ax

Так что ламеры отдыхают ...
Spike.


Ответ отправлен: 03.07.2002, 21:52
Отправитель: Spike


Отвечает masquer

Добрый день, Scolitex!
В принципе можно и без стека работать, точто так же как можно и на руках ходить. И переполнение стека, имхо, проблема не операционной системы, а программиста, пишущего приложение. Вообще мне интересно будет посмотреть на такую систему :)

Ответ отправлен: 04.07.2002, 10:43
Отправитель: masquer


Отвечает kvINT

Добрый день, Scolitex!
ИМХО, написать можно. Но это будет полный изврат, и код разбухнет до неприличного размера.

Ответ отправлен: 04.07.2002, 12:18
Отправитель: kvINT


 Вопрос № 621

Привет Spike
Благодарю за задачи, но мы же не в детском саде. :)



Вопрос отправлен: 03.07.2002, 20:32
Отправитель: Сергей (cppdummy@narod.ru)

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

Отвечает Vint by Shz

НЕ Доброе время суток, Сергей!
И как?Может хватит загаживать рассылку?Отправляй свой вопрос тока Spike!


Ответ отправлен: 04.07.2002, 20:54
Отправитель: Vint by Shz


Отвечает Spike

Доброе время суток, Сергей!
Тогда напиши свой уровень или опиши, что ты умеешь.
Spike.


Ответ отправлен: 03.07.2002, 23:35
Отправитель: Spike


 Вопрос № 622

Здравствуйте господа эксперты!
Скажите пожалуйста, как востановить затертые файлы на CD-RW, и как этот CD прочитать по секторам и дорожкам.



Вопрос отправлен: 04.07.2002, 00:57
Отправитель: Сергей

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

Отвечает freeseacher

Доброе время суток, Сергей!
если при помощи _быстрого стирания_ стиралось то именно читать по секторами дорожкам, ведь там стирается toc. как? ищи проги на эту тему что-то вроде directCD
при помощи _полного_ никак!

Ответ отправлен: 04.07.2002, 15:28
Отправитель: freeseacher


Отвечает masquer

Доброе время суток, Сергей!
Смотри в DDK на все, что с ASPI связано, это так, в качестве напрвления, сам не пробовал.

Ответ отправлен: 04.07.2002, 10:56
Отправитель: masquer


Отвечает Александр

Добрый день, Сергей!
ЭЭЭ... Так они же затёрты. В лучшем для тебя случае, быстром стирании затирается только оглавление диска, поэтому без известного оглавления информацию практически нельзя восстановить. Хотя конечно если использовать нестандартные аппаратные средства, которые могут различать что тут было записано 5 сессий назад, но это что-то похожее на электролнный микроскоп, т.е. очень дорого. Так с помощью LongRead и в ДОС тоже можно, главное чтобы драйвер CD был.


Ответ отправлен: 05.07.2002, 15:56
Отправитель: Александр


 Вопрос № 623

Хэлоу, эксперты!
Нужна ваша помощь. Объясните начинающему асм-кодеру, самыми простыми словами,
что такое обработка прерываний, желательно с самым простым примером обработки их же.
С уважением, Святой Дух.



Вопрос отправлен: 04.07.2002, 01:58
Отправитель: Святой Дух (d_den@mail.ru)

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

Отвечает AnSim

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

Ответ отправлен: 04.07.2002, 10:55
Отправитель: AnSim


Отвечает masquer

Добрый день, Святой Дух!
Лучше все-таки книгу прочитать, чем в двух словах... Деляться на аппаратные и программные - аппаратные: клавиатура, мышка, порты, программные: определяемые ОС (21h, например). Обработка соответственно - это ракция твоей программы на возникновение этих прерываний.

Ответ отправлен: 04.07.2002, 10:59
Отправитель: masquer


Отвечает Spike

Доброе время суток, Святой Дух!
Прерывания могут быть аппарытными и програмными. Аппаратные вызываются таймером, клавиатурой, мышью, винтом и т.д., а програмные вызовом прерывания, например INT 21h, INT 10h и т.д.
Для того, чтобы перехватить прерывание нужно узнать текущий вектор прерывния, например попробуем поработать с таймером, прерывание таймера INT 08h, поэтому вызываем функцию DOS:
mov ah, 35h ;Функция DOS - получить вектор прерывания
mov al, 08h ;Номер вектора 08h
int 21h ;Вызов DOS
Первые две строки можно заменить одной: mov ax, 3508h.
Теперь в ES:BX будет текущий вектор, который нужно сохранить:
mov word ptr OldInt08, bx
mov word ptr OldInt08[2], es
В блоке данных сделать переменную:
OldInt08 dd ?
Дальше нужно поставить свой вектор, для этого в DS:DX нужно занести адрес нашего обработчика:
mov ax, 2508h ;Функция DOS - установить вектор прерывания INT 08h
mov dx, offset NewInt08 ;Адрес нового (нашего) обработчика прерывания
int 21h ;Вызов DOS
Теперь сам обработчик, перед тем как что-нибудь сделать нужно сохранить все используемые регистры:
NewInt08 proc
push ax ;Сохранить используемые регистры
push ds
mov ax,cs ;Настроить сегмент данных нашего обработчика
mov ds,ax
mov ax, Counter ;Берем значение счетчика
inc ax ;Увеличиваем значение
mov Counter, ax ;Сохранить новое значение
pop ds ;Восстановить регистры
pop ax
iret ;Выйти из прерывания, если нужно передать управление дальше по цепочке обработчиков, вместо IRET надо использовать JMP DWORD PTR OldInt08
NewInt08 endp
Пока все. Если чего непонятно, мыль на spgroup@i.com.ua
Spike.


Ответ отправлен: 04.07.2002, 12:08
Отправитель: Spike



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

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

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




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

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


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

В избранное