Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: akaGM
Дата сообщения: 14.03.2013 13:51

Цитата:
насчет кода значения неимеет просто пример мне он более менее понятен...

я только хотел сказать, что граф.смайлы -- маздай и больше ничего...
Автор: ne_viens
Дата сообщения: 14.03.2013 20:57

Цитата:
нет, ты ошибаешься, -- всё-таки _количество байт_, передаваемых в функу...


Да, так будет правильней.


Цитата:
если
#pragma comment(lib, "C:\\WinDDK\\2600\\lib\\wxp\\i386\\ndis.lib")
можно собрать чарез cl linktest.c без ndis.obj тотол командер правда показывает при этом что функции ndis нет в системе и файл получаеться 14кВ вместо 2 при первом варианте да и из kernel32 пытается кучу импорта получить...
поэтому вопрос задам глупый а что такого береться из библиотек?


Если линковать с C:\WinDDK\2600\lib\wxp\i386\ndis.lib, то linktest.exe будет искать код, который в \system32\drivers\ndis.sys, a не тот, который специально для него написан в ndis.asm У тебя WINDDK вообще установлен? Вообще-то с не хорошего примера начали, так как пользовательский код и код ядра отделены, и один к другому не обращаются.

Из kernel32.dll? Ф-ии (HeapAlloc(), GetCommandLine(), итд), необходимые для stdlib. Если stdlib не требуется, надо линковать с ключами /NOSTANDARTLIB /ENTRY:main
Автор: inf158704
Дата сообщения: 15.03.2013 10:48
ddkXP, ddk98 и VC++ 6 использую
готовые настройки проекта взял из книги Walter Oney да и разбираю его проет WDMSTUB
оставил 4 экспортируемые функции для шаблона а остальные удалил, пытаюсь теперь добавить свою
да из kernel32.dll берет именно эти функции ну и еще штук 30
сделать просто LINK несмогу слижком уж там все наворочено поэтому постараюсь вставить в си
для размышления себе нашол щас это:

Цитата:

При линковке asm функций в С программу следует учесть следующие моменты:
транслятор ассемблера по умолчанию переводит все имена в верхний регистр, myfunc станет MYFUNC;
компилятор С и линковщик могут различать или не различать символы верхнего и нижнего регистра, что собственно зависит от настроек;
компилятор С (не С++!) к имени функции добавляет подчеркивание в начале, вызываешь функцию func(), линковщик будет искать _func();
при вызове функции С/С++ программа размещает параметры в стеке и чистит стек после завершения функции, возвращаемое значение берется из регистра AX (EAX),

Объявлять функции в asm коде необходимо таким образом (чтоб можно было вызвать из С)
PUBLIC _MYFUNC
_MYFUNC PROC C FAR
где PUBLIC открывает доступ к функции из других модулей, подчеркивание перед _MYFUNC приводит имя к С виду, PROC C сообщает транслятору asm что твоя функция предназначена для вызова из С, FAR размещает функцию в отдельном сегменте данных, что позволяет получить доступ к функции если размер программы в памяти больше 64К (необходимо для больших моделей памяти)
Кроме этого в masm-е и tasm-е есть множество макросов предназначенных для работы с параметрами как в С.

Для вызова asm функции _MYFUNC из С потребуется:
создать прототип функции
extern far int MYFUNC();
включить поддержку линковщиком символов в верхнем регистре;
подключить obj или lib (если сделал) к проекту.

Автор: ne_viens
Дата сообщения: 15.03.2013 11:18
Описание относится к 16 битному асму для DOS.

Я на VC 16.0 (MS SDK v7.1) собирал.
Есть смысл использовать текущие версии компиляторов, так как старые версии ничего не знают о современных процессорах, и не умеют оптимизировать под них код. Да и ошибки исправляются с каждой версией.
Не видев проект немогу ничего другого посоветовать.

Проект?!
В Studio собираешь, чтоли? Всё, что я выше писал, относится к Microsoft Windows SDK v7.1 командной строке.
Автор: inf158704
Дата сообщения: 15.03.2013 14:03
да я это понял тепер насчет линковки, спасибо вам за помощ
свои глупые мисли по ходу работы собираю здесь
http://forum.shelek.ru/index.php/topic,28935.0.html
суда обратился имено по поводу асемблера спасибо за помощ всем
Автор: ne_viens
Дата сообщения: 15.03.2013 14:39

Цитата:
http://forum.shelek.ru/index.php/topic,28935.0.html


Аа, теперь понял суть проблемы.
Автор: redradist
Дата сообщения: 21.03.2013 00:09
Вопрос:
К примеру у нас IBM совместимая машина, но у нее на борту 1МБайт памяти типа EPROM с записанным BIOS-ом. По архитектуре памяти IBM PC первые 640КБайт памяти отведено под:
1. Вектора прерываний (1024 Байт)
2. ....
3. ....
4. Память для загрузки ядра MS DOS
5. ....

Вопрос, если первый Мегабайт отведен под BIOS? да еще и типа EPROM, то куда будет грузиться MS DOS ???
Иными словами, отличается ли карта памяти старых машин IBM PC от новых, хотя везде написано что карта памяти одинакова начиная от 8086/8088 до Pentium 4 ???
Автор: MERCURY127
Дата сообщения: 21.03.2013 09:16
Так биос то не весь 1й мб занимает, а только старшие (верхние те) 64-128 кб, а то и меньше учите матчасть...
Автор: redradist
Дата сообщения: 21.03.2013 11:00
Да, но микросхема типа EPROM размера 1МБайт, т.е. не записываемая, куда же будет грузиться DOS или такого размера микросхем EPROM памяти в старых машинах не было ???
Автор: bomzzz
Дата сообщения: 21.03.2013 11:05
у тебя винт на 500 гиг, куда будет грузится винда есть памяти оперативной 512 мб?
Автор: redradist
Дата сообщения: 21.03.2013 11:12
В память будет грузиться, винт на 500гиг относится к пространству ввода/вывода, ... К чему вопрос ???? Я спрашиваю про распределение памяти в реальном режиме, занимает ли микросхема памяти BIOS-а все адресное пространство в реальном режиме или я не доконца что-то понял ???
Автор: MERCURY127
Дата сообщения: 21.03.2013 11:52
Во1х, микросхем биос размером 1 мб тогда, конечно, не было.
Во2х, даже если бы биос занимал 1 мб - никаких проблем не было бы, тк дос во время инициализации машины не нужен.
В3х, после инициализации биос сам себя обрезает и перемещает в старшие адреса, тч проблем опять таки нет.
И в4х, начиная с 286, биос размещается и запускается в старших адресах выше 1го мб, и может занимать сколько ему нужно, совершенно незаметно систем реального режима.
Учите матчасть, наконец!
Автор: redradist
Дата сообщения: 21.03.2013 12:01
То есть как я понял это происходит методами страничной адресации ????

Добавлено:
То есть меня интересует механизм ...)
Автор: MERCURY127
Дата сообщения: 21.03.2013 12:31
Нет, это не методы страничной адресации, хотя на более новых машинах есть и убогий биос защищенного режима. Просто под дос выделено первые 640 кб адресов, минус служебные несколько кб в самом начале, которые вы перечислили, и это не биос! Биос в том виде, в котором он используется прикладным окружением, располагается выше этих 640 кб, и даже выше служебных областей видеокарты.
Автор: redradist
Дата сообщения: 21.03.2013 12:48
А в какой литературе можно про это почитать ????
Автор: VGrad
Дата сообщения: 21.03.2013 13:29

Цитата:
Вопрос, если первый Мегабайт отведен под BIOS? да еще и типа EPROM, то куда будет грузиться MS DOS ???

Ссылка
Автор: redradist
Дата сообщения: 21.03.2013 13:36
Я не про это ))) Про то какими методами происходит адресация к биос размером больше 1МБайта ????
Автор: MERCURY127
Дата сообщения: 21.03.2013 14:42
Если проц 386 - то биос может спокойно быть любого размера, если же младше, или если нужен реальный режим - то сегментация, как и в обычных программах реального режима.

Добавлено:
В реальном режиме есть лимит на размер одного куска биос в 128 кб, так что больше этого биос реального режима не бывает...
В защищенном режиме, понятное дело, подход иной, да и биос там обычно не нужен, а чаще его там и нет
Автор: redradist
Дата сообщения: 21.03.2013 15:07
Да но каким образом откусывается кусок памяти 128кБ, како механизм лежит в основе отображения именно этого куска памяти ????? Это делает железо, контроллер портов или процессор по определенному алгоритму обращается именно с этими ячейками памяти ????
Автор: MERCURY127
Дата сообщения: 21.03.2013 15:52
redradist, а, вон оно что...
На очень старых машинах, по этим адресам располагалось физическое ПЗУ - те микросхема с прошивкой, к которой были физически подведены адресные линии, отображающие ее в этот кусок.
В чуть более новых железках, когда уже появились более жирные чипы, могущие программно мапить адреса на разные линии, а так же ограничивать возможность записи по ним, процессоры стали биос стартовать из ПЗУ, и потом записывать его в верхние адреса ОЗУ и закрывать туда запись. Это называется BIOS Shadow Copy. Естественно, что после настройки железяк и завершения процедуры инициализации нет необходимости записывать всю копию ПЗУ в ОЗУ, потому биосы уже давно конструируют свой видимый код реального режима (это то, что мы как раз и называем биосом, обращаясь к нему из приложений) из многих модулей динамически, складируя их по верхним адресам. Например, при выключенной сетевой карте нет нужды записывать кусок, отвечающий за ее работу, поэтому размер занятой БИОС памяти в верхних адресах при переключении сетевухи может различаться.

Добавлено:
Т.о. это железо северного моста отвечает за разделение доступа к адресам...
Автор: redradist
Дата сообщения: 21.03.2013 16:30
Так уже понятнее, а можно ссылочку на литературнее источники, чтобы углубиться в исследование этого вопроса ???? (книги там и т.д.) Буду весьма признателен ...
Автор: MERCURY127
Дата сообщения: 21.03.2013 16:55
Эээ... А насколько глубоко нужно углубится?
Если can you read in English - читайте RBIL и TECH Help!.
Если нет, то увы, на русском языке я это не читал... Поищите что нибудь выпуска конца 80х - начала 90х годов.

Добавлено:
вот еще наковырял... http://www.whitetown.com/ru/misc/ng/asm/

Добавлено:
Ну а если вам таки надо самые, кхм, основы чипсетоманипулирования - то читайте документацию на сайтах Интел/Амд... но к ассемблеру это уже не имеет отношения
Автор: redradist
Дата сообщения: 21.03.2013 17:30
Все что имеет отношение к железу компьютера имеет отношение и к процесСсору ... так как самые интересные программы можно написать только представляя архитектуру и все возможности системы для которой пишешь эту программу ... дальше по уровню абстракции все проще но уже и возможности ограничены языком программирования )))
Углубиться хочу глубоко, так чтобы разбираться во всех тонкостях аппаратуры на уровне железа с возможностью написания программ под эту аппаратуру естественно )
Автор: MERCURY127
Дата сообщения: 21.03.2013 18:26
о как... тогда микроконтроллеры учите так как там с этим все гораздо доступнее, втч и на русском, и куда веселее.
возможности старых железок на совр машинах не имеют сущ значения, тк запускать написанные программы все равно нужно на эмуляторах.
а изучать все мощь СОВРЕМЕННОГО железа, с его конвейерами, параллелизацией и гибридизацией - даром не надо, только за нехилые бабки...

Цитата:
архитектуру и все возможности системы

вы таки думаете, что под дос нынче можно что то полезное сделать??? учите ядерные технологии линукса и винды, и желательно х64 (где биосом и не пахло) - мож и на работу возьмут куда...
Автор: redradist
Дата сообщения: 21.03.2013 18:33
Микроконтроллеры можно знаю, писал собственные программы на под них во время учебы в универе и так для себя, а также под заказ под специальные проекты, как раз поэтому и хочу освоить что-то новое программированиена асм с знанием базовой архитектуры всего ПК ....
Автор: MERCURY127
Дата сообщения: 21.03.2013 18:51
ба, какой вы продвинутый...
но все же мой вам совет - если не заставляют учить дос/биос и пр отходы мамонтов - лучше сразу переходить к NT & Linux kernel. иначе это пустая трата времени...
Автор: delover
Дата сообщения: 25.03.2013 19:43
Толко не бейте.
Рекоммендую не изучать ассемблер всем. Всё же это математика которая наряду бывает плохо оплачиваемой. Однако это гигинтские вложения интелекта. Да и компиляторы Linux & NT на месте не стояли. Ассемблер всегда знать хорошо - мне нравятся те кто знают. Но жаль их, если я не могу им помочь в заработке. Тем же кто вкусил - базовую архитектуру ПК можно изучить на курсах сис админа. Это эффективнее.
Автор: MERCURY127
Дата сообщения: 25.03.2013 19:54
delover, я в принципе согласен современные Си компиляторы, если их правильно настроить через комстроку - генерируют современный код (те для СОВРЕМЕННЫХ машин, а не 20 летней давности) не хуже лучше человека, за исключением особо извращенных случаев... Ну а уж ручной кодинг для Итаниума например - это я вообще не представляю как...
Автор: delover
Дата сообщения: 26.03.2013 06:03
MERCURY127
По поводу Сисадмина, я бы не советовал того чего сам не хотел. Тот же сетевой драйвер, мобильные устройства и прочее. Онлайн игры - графика. Это вполне приемлемая сфера для асмкодинга.
Автор: bomzzz
Дата сообщения: 26.03.2013 06:08
сам микрософт пишет дрова на Си. не надо рассуждать о том чего не знаешь.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.