n3m1z1d4 OS
Пятница, 01.11.2024, 06:36
Меню сайта
Категории каталога
кодинг на асме [3]
все что оносится к асме ;)
n3m1z1d4 [2]
все, что относится к немизиде: кодинг под нее, описание и все-все-все :).
Наш опрос
Разработка Операционной Системы - это
Всего ответов: 44
Начало » Статьи » кодинг на асме

Ассемблерные мысли
 
Привет всем =)!

Сегодня мы поговорим про ассемблер. Статья теоретическая, но надеюсь она
кому-небуть чем-небуть поможет.

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

Все программы написаные на высоком уровне(C, С++, Delphi etc)
воврема компеляции преобразуютса в опкод ассемблера.
Опкод - это числовое представление камманд ассеблера, то что удобно
хранить на винте и исполнять процессором, он исполняет
команды представленые в бинарном виде(на винте все тоже хранитса
в бинарном виде(0, 1), но удобнее, безусловно, для человека
смотреть на двоичный файл в хексе(в одном байте 8 бит(
нули и единици) тоесть в нем может находитса значение
от 0x0 до 0xFF(2^8-1)=11111111(0xFF в двоичной системе исчисления))
поскольку можно утонуть в нулях и единицах(на куждый байт
нужно было бы виделять не два символа а
восем (00000000, 00000001, ..., 11111111).

Еще ассембер имеет символьное представление - мнемонику.
Ето то начем пишут прораммы. Например возмем комманду
nop(no oparation), которая игнорируетс(читай пропускаетса)
процессором: nop - это мнемоника, которая имеет опкод 90h
(или 0x90, кто привык к С/С++).

В одной статье на васме(www.wasm.ru, советую посетить)
я прочитал такую вещь: вызывать виндовые апи из ассемлерных приложений
это как-то не правильно(или аналогично, но другими словами).
Имхо, это бред. Если ты знаком с кодингом под вынь то знаеш, что
к примеру, вызов функции MessageBoxA на ЯВУ(Язык Высокого Уровня)
выглядит так:

MessageBoxA(0,"Any text","Any caption",0).

После компиляции в твоем экзешнике этот вызов будет выглядеть
так(Смори cтолбик опкод):

------------------------------------------------------------------------------------------------------
Адрес | Опкод | Мнемоника | Коментарии
инструкции | | |(добавила Олька :))
------------------------------------------------------------------------------------------------------
00401000 > $ 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
00401002 . 68 14104000 PUSH 1.00401014 ; |Title = "Any caption"
00401007 . 68 18104000 PUSH 1.00401018 ; |Text = "Any text"
0040100C . 6A 00 PUSH 0 ; |hOwner = NULL
0040100E . FF15 3B204000 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA

Поэтому сказаное автором той статьи хуйня!!!! Все программы под
винду( и другие оси, у которых соответственно свои апи) хранятса
и исполнятса в опкоде.

Вообще ассемблер - это язык процессора.

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

В случае с кодингом роль переводчика выполняет компилятор,
при этом он добавляет кучу левого кода, который увеличивает
размер программы в несколько раз , иногда замедляет(в случае с Дэлфями).

Нет, я не хочу сказыть что все ЯВУ маздай, а ассемблер самый рульный.
Я считаю, что ассемблер - более универсальный инструмент, на котором
можно писать и под нулевое кользо(дрова) и под третье(программы и сервисы).

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

Всеми любимый язык программирования C/C++ известен как очень переносимый и
независимый от проца и оси язык. Если он такой класный - попробуйте написать
гуи приложение, которое нормально скомпилитса под виндой и линухом.
Не выйдет. Эта байда не стандартизирована(В принципе, в случае с дэлфями и
киликсом ты окажешся в лучшем положении, но дофига возможностей дэлфи потеряетса,
что не очень выгодно).

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

На этом я закончу. Жди продолжение :).
-eof-

Категория: кодинг на асме | Добавил: 3n3m1 (05.03.2007) | Автор: mn3m0n1c 3n3m1
Просмотров: 787 | Рейтинг: 0.0 |

Форма входа
Поиск по каталогу
Друзья сайта
Copyright [mn3m0n1c 3n3m1] © 2007 Хостинг от uCoz