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

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


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

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

Выпуск № 380
от 01.10.2002, 15:10

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


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

masquer
Статус: Профессиональный
Общий рейтинг: 156.91
[Подробней >>]
igorash
Статус: Профессиональный
Общий рейтинг: 119.58
[Подробней >>]
ASMодей
Статус: Опытный
Общий рейтинг: 122.98
[Подробней >>]
 
Kiss
Статус: Опытный
Общий рейтинг: 135.48
[Подробней >>]
Pablo
Статус: Профессиональный
Общий рейтинг: 132.33
URL: Моя страничка
[Подробней >>]
Bob Johnson
Статус: Опытный
Общий рейтинг: 143.22
[Подробней >>]
 
Portnov
Статус: Профессиональный
Общий рейтинг: 120.37
URL: Мой сайтик...
[Подробней >>]
Beeblebrox
Статус: Профессиональный
Общий рейтинг: 114.8
URL: Beeblebrox / TMA HomePage
[Подробней >>]
LIFO
Статус: Опытный
Общий рейтинг: 132.88
Телефон: 8 01710 24758
[Подробней >>]
 
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 132.02
[Подробней >>]
Biv
Статус: Доверительный
Общий рейтинг: 123.52
[Подробней >>]
Топор
Статус: Профессиональный
Общий рейтинг: 116.4
URL: Хорошая Русская Металлическая команда
Телефон: (8462)500298
[Подробней >>]
 
Илья
Статус: Начальный
Общий рейтинг: 106.45
[Подробней >>]
Dron
Статус: Профессиональный
Общий рейтинг: 118.76
URL: Операционная система с нуля!
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 133.55
URL: моя рассылка по Protected Mode
[Подробней >>]


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

Вопрос № 1345. Ув. эксперты. Скиньте мне пожалуйста на мыло архивчик с инклудами(wiproc, wintype, winconst ...) для... (ответов: 3)
Вопрос № 1346. Ссылка на криптотекст вобщем такая http://lvbnhbq.fromru.com/text.zip... (ответов: 1)
Вопрос № 1347. Ув. эксперты! Я скачал инклуды, когда я их добавлял в файл(include kernel32.inc) а тасм пишет на раз... (ответов: 3)
Вопрос № 1348. Привет! Собственно не вопрос, а так, мелкая придирка к вашему ответу на вопрос 1303 Вы писали: "... (ответов: 1)
Вопрос № 1350. Доброе время суток всем!!! Кто нить знает алгоритм контрольной суммы (кс) в протоколе TCP/IP, при п... (ответов: 1)
Вопрос № 1351. Доброе время суток уважаемые Эксперты! Пожалуйста, помогите мне устранить проблему. Есть программа, ... (ответов: 3)
Вопрос № 1352. Глубоко извиняюсь уважаемые Эксперты, я послал Вам не ту ассемблерную вставку (Срр код). Привожу в п... (ответов: 1)
Вопрос № 1353. Assemblerу все возрасты покорны? так хочу научиться... Но как без постороней помощи это сделать не з... (ответов: 11)
Вопрос № 1354. Ув. эксперты. Компилю файл масмом версии 5.1 (masm.exe) в файл вписал include kernel32.inc делаю в п... (ответов: 4)
Вопрос № 1355. Уважаемые эксперты! Вот вычитал в одной доке по функции DOS 2cH: "..Поскольку ситемные часы име... (ответов: 7)

Вопросов: 10, ответов: 35


 Вопрос № 1345

Ув. эксперты.
Скиньте мне пожалуйста на мыло архивчик с инклудами(wiproc, wintype, winconst ...) для написания приложений под Винды, а то я весь Интернет перерыл так и ничего не нашел.
Заходил на страницу интела (http://developer.intel.com/design/pentium4/manuals/index2.htm) заказать книжки(это наверно MSDN?) написали типа позвоните по такому то телефону и тд и тп.
На сайте (помоему типа www.itanium.com или что то подобное) можно скачать отсканированые книги, ноя не имею возможности, т.к связь очень плохая и все время обрывается и большой файл скачать для меня проблема.
Может подскажите где еще можно заказать эти книжки.
Заранее спасибо.



Вопрос отправлен: 26.09.2002, 16:20
Отправитель: SonicX (asm86@mail.ru)

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

Отвечает masquer

Здравствуйте, SonicX!
качай пакет masm32 с www.movsd.com - там все инклуды есть.
Ссылка на заказ книг пробегала недавно, не помню напамять.
Причем здесь МСДН???
Посмотрел на строки о плохой связи - вот 3-им раром папку сжал
http://lvbnhbq.fromru.com/include.rar

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


Отвечает igorash

Приветствую Вас, SonicX!
на сайте интела мсдн не может быть по определению - конторы разные немного :))
книги те про процессоры фирмы интел и их инструкции.. на сайте http://developer.intel.com/design/pentium4/manuals/index.htm эти же книги можно скачать.... а мсдн на сайте www.microsoft.com


Ответ отправлен: 26.09.2002, 18:28
Отправитель: igorash


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

Здравствуйте, SonicX!
Книжки от Intel - это полная документация по процессорам
Intel, а не MSDN. Вообще странно, что ты надеялся найти
MSDN на сайте Интела, скорее уж поискал бы на сайте Microsoft.


Ответ отправлен: 27.09.2002, 10:25
Отправитель: ASMодей


 Вопрос № 1346

Ссылка на криптотекст вобщем такая
http://lvbnhbq.fromru.com/text.zip



Вопрос отправлен: 26.09.2002, 17:04
Отправитель: masquer (masquer@pochta.ws)

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

Отвечает Kiss

Доброе время суток, masquer!
Спасибо. Теперь все пашло!


Ответ отправлен: 27.09.2002, 11:07
Отправитель: Kiss


 Вопрос № 1347

Ув. эксперты!
Я скачал инклуды, когда я их добавлял в файл(include kernel32.inc) а тасм пишет на разные там PROTO :DWORD, :DWORD типа illegal instruction.
Что делать? Мне кажется надо масм использовать?
И еще когда я пишу комы у меня стандартные загаловки:
cseg segment
assume cs:cseg
org 100h
Start:
...
cseg ends
end start
А как мне начинать писать файлы для послед. компиляции в вин приложения?
Я пишу модуль для Дельфи на асме.В Дельфи нельзя вставить инклуды.Надо писать OBJ и вставлять их в виде внешних процедур.
И как же мне написать OBJ с процедурой которая брала бы переданные ей параметры, возвращала бы параметры, отдавала управления назад?



Вопрос отправлен: 26.09.2002, 18:57
Отправитель: SonicX (asm86@mail.ru)

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

Отвечает Pablo

Приветствую Вас, SonicX!
Лучше не используй инвуки т.к. их использование в качестве передачи параметров ИМХО ограничено, я думаю что тип передачи __fastcall, который используется в Дельфях, он не поддерживает.
Ты можешь просто сделать объектный файл на тасме. Тебе нужно только правильно описать функцию в зависимости от того каким типо передаци параметров в функцию ты будешь использовать.
Распише типы передачи параметров:
__stdcall
параметры передаются через стек по порядку справа налево, то есть первым в стек помещается последний параметр в списке.
Стек восстанавливает вызваемая функция. Если будешь делать с этим типом передачи, то восстанавивать стек должна твоя функция используя инструкцию ret n. Возвращаемое значение в большинстве случаев выдается вызываемой функией в eax.
Имя функции, которое ты должен определить для этого типа, без использования декорирования имеет обычный вид: функция TestFunc(), ее определение в таблице экспорта TestFunc, а с использованием декорирования определние имеет вид: @TestFunc$qqsv.
__fastcall
eax: первый парамер
edx: второй параметр
ecx: третий параметр
остальные параметры передаются через стек как для формата __stdcall. Стек восстанавливает также вызваемая функция.
Для этого типа определения функции TestFunc будут выглядеть без декорирования: @TestFunc
с декорированием: @TestFunc$qqrv
__cdecl
В этом типе передачи параметры передаеются через стек в томже направлении что и в типе __stdcall. Отличием является то что стек востанавливает не вызваемая функция в вызывающая.
Для этого типа определения функции TestFunc будут выглядеть без декорирования: _TestFunc
с декорированием: @TestFunc$qv
Вообщем этот класс используется обычно для тех функция которые не могут сами узнать и не определяют фиксированно сколько было параметров передано в им стеке.
Вообщем насколько я знаю в Дельфах в основном используется тип __fastcall. Вот тебе и следует его использовать для программирования объектника.
При программировании своей функции заметь, что регистры ecx, edx, а если возвращаемое значение определено как void и eax не обязаны имею действительные значения на выходе функции, то есть ты не обязан созранять входные значения в этих регистрах.

Ответ отправлен: 30.09.2002, 15:40
Отправитель: Pablo


Отвечает Bob Johnson

Здравствуйте, SonicX!
1. Скорее всего ты скачал не те инклюды... У меня ТАСМ не ругается на разные прото и т.д. (пример: WaitForInputIdle ProcDesc StdCall :DWord, :DWord) - вот так описываются процедуры в ТАСМ. Все свои проги под винды на ассемблере я писал в ТАСМЕ и, мне кажется, он менее глючен, чем МАСМ. Еще версия - возможно ты пытаешься компилировать программу под Вин32 с помощью ТАСМ - ОБЯЗАТЕЛЬНО надо использовать TASM32.exe и TLINK32.EXE!
2. У меня проги для Вин32 начинаются как приведено в приложении. Все инклюды находятся в файле w32.inc (кажется он идет к тасму...)
3. В дельфи ты можешь пользоваться встроенным ассемблером - например вот так:
function proc1 (a: integer; b: integer) : integer; stdcall;
asm
mov eax, [a]
add eax, [b]
end;
При этом следует иметь ввиду, что дельфи при оптимизации передает параметры в регистрах процессора - поэтому необходимо отдельно указывать stdcall. Возвращается результат в eax.
Еще можешь легко использовать свою функцию, находящуюся в DLL библиотеке - тогда в дельфи даже либ-файл не нужен!
function MessageBox(HWnd: Integer; Text, Caption: PChar; Flags: Integer): Integer;
stdcall; external 'user32.dll' name 'MessageBoxA'; - вот так!
Правила такие же (т.к. метод вызова - stdcall) - параметры в стеке, начиная с последнего, результат - в eax. В случае возврата результата типа real, он должен находится на вершине стека сопроцессора:
function proc2 (a : real; b: real) : real; stdcall;
asm
fld [a]
fadd [b]
end;
Удачи!
P.S. Применение ОС Windows на компьютерах типа "Пентиум" позволяет производить набор текстовых документов в реальном времени.

Приложение:

Ответ отправлен: 27.09.2002, 23:04
Отправитель: Bob Johnson


Отвечает masquer

Приветствую Вас, SonicX!
для тасма несколько другой синтаксис, что-то типа
Extrn ExitProcess:Proc
Можно библиотеку создать и ее юзать.

Ответ отправлен: 26.09.2002, 21:04
Отправитель: masquer


 Вопрос № 1348

Привет!
Собственно не вопрос, а так, мелкая придирка к вашему ответу на вопрос 1303
Вы писали:
"Когда Intel разрабатывала свой первый проц, она (компания) решила, чтобы в нем для работы с отрицательными числами
использовался дополнительный код, который позволяет выполнять сложение и вычитание как положительных, так и
отрицательных чисел одними и теми же командами."
А что у нее (компании) были другие варианты? Если да, то какие? Ведь я то, темный, думал, что дополнения используются по причине способности процессора физически выполнять лишь одну арифметическую операцию -- сложение (а все остальные на ее основе).



Вопрос отправлен: 26.09.2002, 23:14
Отправитель: vlad

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

Отвечает Bob Johnson

Здравствуйте, vlad!
Узнаю свой ответ... ОК, да, вариантов представления отрицательных чисел в двоичном коде несколько. Среди них:
- дополнительный код (который используется сейчас);
- обратный код;
- модифицированный код.
(может есть и еще...)
Так вот, про последний я сейчас уже не помню (давно в институте это все было), а вот про обратный еще что-то в памяти осталось - там самый старший разряд (левый) используется для указания знака (0 - положительное число, 1 - отрицательное), а остальные - содержат модуль числа. Т.е. (для 8 разрядов)
21 = 0001 0101,
-21 = 1001 0101.
Числа в таком формате обычным сумматором не сложишь - надо задумываться о знаке каждого слагаемого перед сложением (в дополнительном коде такой необходимости нет!), а вот умножение в обратном коде проще (т.к. знаки можно просто сложить по xor).
Первым процессором Intel, получившим широкую известность стал 8080 (наш аналог - КР580ВМ80А, применялся реально до года 99!). Он был 8-разрядным (на его основе впоследствии фирмой Zilog был выпущен на мой взгляд наиболее удачный по соотношению цена/(производительность + возможности) 8-рязрядный процессор - Z80) и в нем не было команд умножения и деления. Поэтому (скорее всего) Intel предпочла дополнительный код.
На счет способности процессора физически только складывать не согласен. Достаточно легко разработать электрическую схему, которая бы выполняла вычитание вместо сложения. И вообще - представим, что нужно создать логическую схему, которая бы выполняла очень быстро (за 1 такт) операцию умножения 8-разрядных чисел. Невозможно? Нет, вполне реально - на входе у нас два 8-разрядных числа, на выходе - одно 16-разрядное. Берем ПЗУ 64К*16 (т.е. 128 кбайт) и программируем ее так, чтобы при подаче первого операнда в двоичном коде на шины А0-А7, а второго - на А8-А15 на выходах Д0-Д15 получался результат в двоичном коде. Не считая экономическую эффективность, получается, что такой процессор будет способен физически выполнять операцию умножения... Такой способ называется табличной реализацией функций и часто применяется в программировании - вот на Z80 (использовался в ZX-спектруме), например, программа умножения (такой команды там не было) занимала около 700 тактов процессора. Никакого реалтайм, конечно. А вот табличный способ при умелом подходе позволял выполнять умножение тактов за 60-70 и использовать при этом 16 кб памяти (всего было 128) - в демострационных программах применялся очень часто. А сама таблица рассчитывалась при запуске программы однократно.
P.S. Комиссия по Языкам и Средствам Программирования постановила: "Исключить Русский язык из употребления в связи с тем, что он совсем не поддается компиляции".

Ответ отправлен: 27.09.2002, 23:04
Отправитель: Bob Johnson


 Вопрос № 1350

Доброе время суток всем!!!
Кто нить знает алгоритм контрольной суммы (кс)
в протоколе TCP/IP, при посылке пакета есть поле
где записывается эта кс.
Если есть доки или ссылки какие шлите на мыло sbtr@mail.ru



Вопрос отправлен: 27.09.2002, 00:53
Отправитель: Andrey

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

Отвечает masquer

Приветствую Вас, Andrey!
http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc1146.html
http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc1071.html
Насколько я из єтой ссылки понял - это несколько простых суммирований и CRC. Вообще смотри в RFC

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


 Вопрос № 1351

Доброе время суток уважаемые Эксперты!
Пожалуйста, помогите мне устранить проблему.
Есть программа, написанная для АЦП. В ней есть ассемблерные вставки.
Мы хотели создать интерфейс для работы с АЦП с помощью C++ Builder.
Мы исходник программы прикрепили к проекту. Но при компиляции компилятор
выдаёт ошибки следующего содержания: " Operand types do not match" и указывает на строку:
" mov AL, byte ptr [ebp+12]" . Это строка из отладки.
В приложении приводятся ассемблерская вставка из срр - ного кода и отладочная версия этой вставки.
Я не очень силён в ассемблере. Прошу Вас помочь мне.
Заранее благодарю. Рифат.


Приложение:


Вопрос отправлен: 27.09.2002, 08:50
Отправитель: Рифат (orw@ngs.ru,abriofh@mail.ru)

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

Отвечает Portnov

Доброе время суток, Рифат!
Во втором случае правильно ругается - надо либо mov edx,dworrd ptr..., либо mov dx,word ptr... Остальное не знаю.

Ответ отправлен: 27.09.2002, 11:49
Отправитель: Portnov


Отвечает Beeblebrox

Добрый день, Рифат!
mov DX, dword ptr [ebp+8] <- тут ругается
Здесь точно ошибка. DX - word, а не dword

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


Отвечает Pablo

Приветствую Вас, Рифат!
При переделке программ с 16-битной платформы на 32-битную нужно знать, что все 16-битные регистры становятся по умолчанию 32-битными. Так что тебе нужно писать не mov ax, variable, а mov eax, variable. Второе это то, что в Виндовс появились закрытые порты и ОС часто не дает ПО проводить ввод и вывод через них. Так что не факт что ты сможешл читать и писать в те порты которые ты хочешь, обычно в виндах для какого либо внешнего устройства пишут драйвер, который имея 0-й (высший) уровень привилегий может выводить в порт данные и вводить из порта данные. Я немного поправил приведенный тобой код, он у меня скомпилировался на Билдере без ошибок.
Поправленный код можешь посмотреть в приложении. Да и еще совет, когда ты прогу компилируешь с ассемблерными вставками, то если там произошли ошибки и в файле, например, unit1.asm, то после изучения ошибок, закладку с этим файлом следует закрыть, потому что если ошибки появятся снова, то Билдер покажет в старом файле новые ошибки.

Приложение:

Ответ отправлен: 27.09.2002, 18:26
Отправитель: Pablo


 Вопрос № 1352

Глубоко извиняюсь уважаемые Эксперты, я послал Вам не ту ассемблерную вставку (Срр код).
Привожу в приложении нужную.


Приложение:


Вопрос отправлен: 27.09.2002, 09:06
Отправитель: Рифат (orw@ngs.ru,abriofh@mail.ru)

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

Отвечает Bob Johnson

Доброе время суток, Рифат!
Смотрю помощь к С++ билдеру на unsigned:
When the base type is omitted from a declaration, int is assumed.
Это значит, что когда ты просто пишешь unsigned как тип подразумевается unsigned int, а int в 32-разрядных программах 32-разрядные! Вот и ошибка - надо писать так:
mov dx, word ptr [Base]
У билдера существенный недостаток! Когда ты включаешь в него ХОТЬ одну ассемблерную строчку, он компилирует весь код модуля через ассемблер! Это ужасно, тем более, что иногда и не работает... (т.е. нормально компилирующийся код через АСМ не компилится).
Лучше ты вынеси нужную процедуру в отдельный АСМ-файл (а вот это, в отличии от дельфи, билдер позволяет), который включи в проект... Билдер позволяет достаточно много чего добавлять в проект - нажми Project-Add и в типах файлов в открывшемя диалоге посмотри - там есть и АСМ.
Вернемся к твоему примеру. Отсюда же и возникает ошибка, которую ты описал в предыдущем вопросе - просто она находится внутри асм-исходника, сгенерированного компилятором.
Если же ты оставишь АСМ внутри проги, то сделай лучше так:
void WriteIOR(unsigned Base, unsigned char Data)
{
__asm
{
mov AL, Data;
mov DX, word ptr [Base];
add DX, 3;
out DX, AL;
}
}
тогда не придется писать АСМ на каждой строчке. И помни, что ни процедуры, реализованные в отдельном модуле, написанном на ассемблере, ни куски АСМ, включенные в код не должны менять значение регистров EBX, ESI, EDI, EBP и ESP.
Пример рабочего АСМ файла, использованного мной в проекте для билдера прилагаю. Как видишь, он использует и переменные, определенные в программе на С++ и экспортирует функции, которые потом вызываются из С++ кода...
P.S. Сенсация ! Новая версия Windows 98 стала занимать на 50% больше ! И это за теже самые деньги ! Microsoft - платите меньше, получаетe больше ! Windows - ведь с ними даже Вы становитесь экономным пользователем.


Приложение:

Ответ отправлен: 27.09.2002, 23:05
Отправитель: Bob Johnson


 Вопрос № 1353

Assemblerу все возрасты покорны? так хочу научиться...
Но как без постороней помощи это сделать не знаю.Подскажите,
если есть возможность.



Вопрос отправлен: 27.09.2002, 11:29
Отправитель: Rosa (comtech@gmx.de)

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

Отвечает Kiss

Доброе время суток, Rosa!
Книги надо читать и научишся, а если по нету помощи просить не чего не поймеш.

Ответ отправлен: 28.09.2002, 19:51
Отправитель: Kiss


Отвечает Kiss

Доброе время суток, Rosa!
Книги надо читать и научишся, а если по нету помощи просить не чего не поймеш.

Ответ отправлен: 28.09.2002, 19:51
Отправитель: Kiss


Отвечает Portnov

Здравствуйте, Rosa!
Подпишитесь на рассылку Калашникова "Ассемблер? Это просто! учимся программировать!". Я сам с нее по сути начал изучение асма. Так что вам прямой дорогой на subscribe.ru, код рассылки - comp.soft.prog.faq. Скачайте архив и изучайте помаленьку...
С уважением, Portnov.

Ответ отправлен: 27.09.2002, 11:54
Отправитель: Portnov


Отвечает igorash

Добрый день, Rosa!
есть куча литературы, в смысле учебников по этой теме в инете, из бумажных - зубков, юрова не бери


Ответ отправлен: 28.09.2002, 00:56
Отправитель: igorash


Отвечает LIFO

Здравствуйте, Rosa!
Читай книги(Зубкова), рассылки (hi-tech или Assembler - это просто...) если возникнет вопрос - обращайся к сюда:)

Ответ отправлен: 29.09.2002, 12:40
Отправитель: LIFO


Отвечает Dark_Lord

Приветствую Вас, Rosa!
Купить книгу по асму и всё!

Ответ отправлен: 29.09.2002, 10:31
Отправитель: Dark_Lord


Отвечает Bob Johnson

Здравствуйте, Rosa!
Возможно... Но чаще это детская привычка.
Чтобы выучить ассемблер с самого начала лучше всего воспользоваться достаточно простой книгой - здесь рекомендуют Юрова, Зубкова и др. Проще учить ассемблер, если уже знаешь ассемблер какого-то другого процессора. Поэтому если самые начальные моменты непонятны (для чего нужны регистры вообще и т.д.), можно воспользоваться любой другой литературой (хоть даже и про другой процессор), в которой это доступно описано.
Заканчивать же обучение лучше всего спецификацией производителя - т.е. Intel, попутно решая возникающие программные задачи с помощью АСМ.
P.S. Использование ОС Windows 95 позволяет свести к минимуму количество клавиш, которые надо нажать для зависания компьютера.

Ответ отправлен: 27.09.2002, 23:05
Отправитель: Bob Johnson


Отвечает Biv

Добрый день, Rosa!
Как? А зачем по-вашему эта рассылка, чтобы такие вопросы задавать?
Читайте книги! Задавайте вопросы? Не начнешь - не выучишь!
З.Ы. Совет: книга Зубкова С.В. Асм для дос выньдос и линух

Ответ отправлен: 27.09.2002, 20:01
Отправитель: Biv


Отвечает masquer

Здравствуйте, Rosa!
Ну, если действительно решил изучать и определился - зачем тебе это нужно - успехов.
Начни с того, что купи хорошую книгу. Затем, определившись под какую платформу/систему писать будешь, соответствующую литературу по системе.
Эту рассылку скачай, поищи ответы на вопросы - 90% того, что они уже будут озвучены.
Пока все. Если появятся КОНКРЕТНЫЕ вопросы - you are welcome here

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


Отвечает Pablo

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

Ответ отправлен: 27.09.2002, 17:17
Отправитель: Pablo


Отвечает Топор

Доброе время суток, Rosa!
Это, конечно, моё личное мнение, но всем говорю - сначала по бумажной литературе. Начальное представление лучше по учебнику В.Юрова "Assembler - Учебник". Хотя там масса ошибок в примерах, как теория очень даже ничего. Затем переходите к "Assembler для DOS, Windows и UNIX" С.Зубкова. Там ошибок поменьше и примеры более доходчивы, но теория пожиже. В качестве настольной справочной литературы - все остальные книжки Юрова по Асму. А если Вам удастся достать "Использование Turbo Assembler при разработке программ" Чекаткова (Киев, Диалектика, 1993), то Вам сильно повезло. Единственная до сих пор книжка, где вменяемо изложено ООП на Асме.


Ответ отправлен: 27.09.2002, 18:45
Отправитель: Топор


 Вопрос № 1354

Ув. эксперты.
Компилю файл масмом версии 5.1 (masm.exe) в файл вписал include kernel32.inc делаю в проге так:
push 0
call exitprocess
Масм пишет:
Kernel32.inc(###): error A2105: Expected: instruction, directive, or label
prog.asm(#): error A2009: Symbol not defined EXITPROCESS
?????
ничего не понимаю.
Что это такое?

Скиньте пожалуйста мне на мыло как писать win32 приложения
Не подскажите где в эл. варианте найти описания процедур Виндов(типа exitprocess), мне нужно знать какие передавать параметры процедурам и какие она возвращает
Заранее спасибо.PS Большое спасибо эксперту Masquer за инклуды


Приложение:


Вопрос отправлен: 27.09.2002, 15:01
Отправитель: SonicX (asm86@mail.ru)

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

Отвечает Bob Johnson

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


Ответ отправлен: 27.09.2002, 23:05
Отправитель: Bob Johnson


Отвечает Dark_Lord

Доброе время суток, SonicX!
На счёт проблеммы с компиляцией, не знаю, но думаю, что это из-за того, что masm 5.11, для windows лучше использовать 7.хх!
А на счёт описания процедур: у меня есть хэлр библиотека размером в 5 Мб, которая вполне подробно описывает многие функции, пишите мне на Dark_Lord@RusFAQ.ru , если вам интересна эта библиотека!

Ответ отправлен: 29.09.2002, 10:35
Отправитель: Dark_Lord


Отвечает Pablo

Здравствуйте, SonicX!
Вообщк в ассемблере используются регистрозависимая компиляция имен, а т.к. функция ExitProcess начинается с заглавной буквы и имеет еще одну большую букву, то у тебя ошибки и полезли.

Ответ отправлен: 27.09.2002, 18:26
Отправитель: Pablo


Отвечает masquer

Доброе время суток, SonicX!
Ох, еще либы должны быть. Весят прилично.
includelib \masm32\lib\kernel32.lib
скачай масм32 - у тебя 75% вопросов сами сабой отпадут, поверь.
http://w1.612.telia.com/~u61202518/masm32v7.zip


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


 Вопрос № 1355

Уважаемые эксперты!
Вот вычитал в одной доке по функции DOS 2cH: "..Поскольку ситемные часы имеют частоту 18.2 тиков в секунду (интервал 55мс), DL имеет точность 0.04 секунд...". Вопрос:
1. Можно ли програмными методами увеличить частоту "тикания" часов?
2. Можно ли какими-нибудь увеличить точность в регистре DL?
Если можно представить сие как ассемблерную вставку в С++.
Заранее благадарю.
С уважением, Дмитрий.



Вопрос отправлен: 27.09.2002, 15:10
Отправитель: Дмитрий (dm_dds@mail.ru)

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

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

Доброе время суток, Дмитрий!
Все сказанное ниже будет работать только для DOS. В Windows
это или не будет работать вовсе, или будет работать неточно.
Итак:
1. Частоту "тиканья" часов увеличить можно. Для этого нужно
перепрограммировать канал 0 системного таймера. Частота
таймера составляет 1193180 Гц, так что минимальный
временной интервал будет примерно 0.84 мкс.
2. Побочным эффектом от перепрограммирования таймера будет
неверное время, возвращаемое функцией 2Ch. Поскольку
DOS не узнает, что частота таймера увеличилась, часы
в DOS будут страшно спешить.


Ответ отправлен: 28.09.2002, 16:06
Отправитель: ASMодей


Отвечает Bob Johnson

Добрый день, Дмитрий!
1. Если ты пишешь прогу под чистый ДОС и тебе все равно, что часы в компе будут показывать неточное время, можешь изменить частоту прерываний таймера - по умолчанию он делит частоту около 1,2 мгц на 65536 (т.е. максимально возможный для него коэффициент деления). Можно этот коэф уменьшить и заставить приходить прерывания чаще. Для этого можно просто последовательно записать новый коэффициент деления в порт 40h, например:
mov dx, 40h
mov al, 80h
out dx, al
mov al, 00h
out dx, al
Если же программа должна работать под виндовс - такое не пройдет (т.к. вин использует таймер для своих нужд и не позволяет всем менять его частоту) - тогда пиши свою процедуру задержки.
2. Никак ты точность в DL не увеличишь, т.к. он целочисленный...


Ответ отправлен: 27.09.2002, 23:05
Отправитель: Bob Johnson


Отвечает Dark_Lord

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

Ответ отправлен: 29.09.2002, 10:39
Отправитель: Dark_Lord


Отвечает Илья

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

Ответ отправлен: 28.09.2002, 02:10
Отправитель: Илья


Отвечает Biv

Приветствую Вас, Дмитрий!
1) НЭТ (вроде бы)
2) НЭТ (вроде бы)

Ответ отправлен: 27.09.2002, 20:01
Отправитель: Biv


Отвечает Dron

Приветствую Вас, Дмитрий!
Увеличить можно, только DOS то об этом не знает...
фигню помоему будет выдавать... тут нужен свой обработчик.


Ответ отправлен: 27.09.2002, 15:34
Отправитель: Dron


Отвечает Broken Sword

Добрый день, Дмитрий!
Осмелюсь привести свой ответ на вопрос 36 из рассылки №168 (от 10 января 2002 года) :)
Это сделать можно, но только на уровне портов. На самом деле программируемый интервальный таймер - весьма сложная система, состоящая из трех частей - трех каналов таймера, каждый из которых можно запрограммировать для работы в одном из шетси режимов. (открой 331 стр. Зубков SE)...
В двух словах - после долбания портов (см. приложение) мы записываем число в другой порт, которое начинает уменьшаться со скоростью 1193180 раз в секунду, и когда оно достигает 0 - канал 0 вызывает прерывание IRQ0. Начальное значение этого счентчика по умолчанию составляет FFFFh, т.е. прерывание вызывается 1193180/65536=18,20648 раз в секунду, т.е. это минимально возможное кол-во вызовов прерывания в секунду. Но запомни: таймер - глобальный ресурс )), пререпрограммировать его в виндах можно только с ведома самой ОС если она это вообще позволяет (а она это не позволяет).
Кроме того, при перепрограммировании в другой режим сбываются системные часы и перестают норамльно функционировать устройства, использоующие информацию от системного таймера (например, накопители гибких дисков), так что be careful.


Приложение:

Ответ отправлен: 27.09.2002, 18:04
Отправитель: Broken Sword



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

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

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




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

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


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

В избранное