Page 2 of 3

Re: помогите новичку FASM syntax

Posted: Sat Oct 02, 2010 3:52 am
by scuter
чёта дело как то не движется,
прочитал кучу всякой литературы, но результата как такового не получил,
в некоторых учебниках даже про синтаксис(начало всех начал) ничего не пишут,
прям так сразу и ляпают давайте напишем драйвер для микрочипа CX-52,
прям с первой страницы, а про описание команд вообще уж нечего говорить,
(команда *** - делает *****, вбиваешь эту команду в код и компилятор пишет ошибку)
посмотрев на это безобразие понимаешь,
что ASM максимально приближен к машинному коду только тем что там постоянно встречаются слова из 3-х букв,
а в хекс(поидее машинном) коде встречаются слова из 2-х букв
Рассмотрим простейшую команду ассемблера:

Code: Select all

mov ebx, eax
На машинном языке это будет выглядеть так:

Code: Select all

8B D8
8B – это код операции. Теперь рассмотрим еще один пример:

Code: Select all

mov ecx, 128
А на машинном языке ей соответсвует:

Code: Select all

B9 00000080
Код операции – B9
скажите где достать список команд процессора IA-32(с объяснениями)
и где объясняется логика обработки программного кода(процессором),

в принципе если вспомнить начальную школу, то
любое математическое вычисление происходит благодаря 2-м действиям - это
+ плюс
и
- минус
так же в математике есть такие действия как сравнение т.е.
= равно
< меньше
> больше
любая логика начинается с одного простого действия
? если
любая обработка данных происходит благодаря простому перебору этой информации т.е.
чтобы обработать предположим строку нужно "откусывать" от строки,
предположим по 8 бит до тех пор пока она не закончится,
при этом каждый раз когда откусывается 8 бит над этими 8б производится какие либо действия


в принципе если рассматривать простейшую работу процессора, то всё что ему необходимо это:
память в которой находится программный код
память в которой хранятся данные т.е. переменные
механизм который производит пробор по программному коду
механизм выполняющий команды (среди них все выше упомянутые и команда перехода по коду "jmp")

память кода программы -> пробор по коду -> команды -> память данных

и соответственно в механизме пробора кода есть свой алгоритм по которому он выполняет команды
например "весь программный код делится на сегменты а сегменты делятся на функции(sub)" - это часть алгоритма,
в принципе примерно так, если в чём то ошибаюсь поправьте


и если на всё это дело посмотреть немного другим образом всё действительно просто т.е.
если писать + 10,12; а не add 10,12;
если - 30,12; а не sub 30,12;
если = x,y; а не cmp x,y;
..................................
т.е. заменить непонятные 3-х значные слова на понятные символы (хотябы),
и становится понятно, почему действие (y=x*10/12) не может быть записано в одну строчку
и многие другие вещи становятся как то значительно проще

Re: помогите новичку FASM syntax

Posted: Sat Oct 02, 2010 4:32 am
by Asper
scuter wrote:скажите где достать список команд процессора IA-32(с объяснениями)
http://ftp.kolibrios.org/users/Asper/docs/mydocs.7z Документ "Инструкции IA".
scuter wrote:в принципе если рассматривать простейшую работу процессора, то всё что ему необходимо это:
память в которой находится программный код
память в которой хранятся данные т.е. переменные
механизм который производит пробор по программному коду
механизм выполняющий команды (среди них все выше упомянутые и команда перехода по коду "jmp")
В Колибри используется плоская модель памяти, код и данные программы хранятся вместе (не нужно париться с сегментами). Зачем все эти механизмы тебе нужны, главное, что инструкции выполняются одна за другой, пока не встретится инструкция перехода или вызов функции, всё как и в других языках.
scuter wrote:и если на всё это дело посмотреть немного другим образом всё действительно просто т.е.
если писать + 10,12; а не add 10,12;
если - 30,12; а не sub 30,12;
если = x,y; а не cmp x,y;
..................................
т.е. заменить непонятные 3-х значные слова на понятные символы (хотябы),
и становится понятно, почему действие (y=x*10/12) не может быть записано в одну строчку
и многие другие вещи становятся как то значительно проще
Какой-то урезанный вариант обратной польской нотации.

Re: помогите новичку FASM syntax

Posted: Sat Oct 02, 2010 1:51 pm
by Mario
Вот книжки которые надо читать как в самом начале, так и в процессе.
1) Юров - http://ftp.kolibrios.org/users/Mario/Assembler_Jurov.7z
2) Зубков - http://ftp.kolibrios.org/users/Mario/As ... _Zubkov.7z
и если на всё это дело посмотреть немного другим образом всё действительно просто т.е.
если писать + 10,12; а не add 10,12;
если - 30,12; а не sub 30,12;
если = x,y; а не cmp x,y;
..................................
т.е. заменить непонятные 3-х значные слова на понятные символы (хотябы),
и становится понятно, почему действие (y=x*10/12) не может быть записано в одну строчку
и многие другие вещи становятся как то значительно проще
Все не так просто - в ассемблере у процессора есть мнемоники команд, в принципе это сокращения английских слов. К этому просто надо привыкнуть как и в любом языке программирования есть специфика и нужен багаж знаний некоторый.
К тому же основные команды процессора рассчитаны на целые числа и никаких дробных частей, без собственно логических вывертов мозгом программиста (я не рассматриваю сейчас FPU и другие расширения команд, которые во-первых отъедают место в памяти, не всегда эффективны и не всегда ускоряют работу программы, а иногда даже и наоборот замедляют).

Re: помогите новичку FASM syntax

Posted: Sat Oct 02, 2010 2:08 pm
by maximYCH
Mario, мне очень сильно понравился Брэдли, сейчас учусь по нему.
Расписано все хорошо. Нравится.

Re: помогите новичку FASM syntax

Posted: Sat Oct 02, 2010 3:05 pm
by SII
Но во всех указанных книгах -- не ФАСМ, а МАСМ и/или ТАСМ.

Re: помогите новичку FASM syntax

Posted: Sat Oct 02, 2010 3:32 pm
by maximYCH
Увы, это так. Правда я сейчас взялся больше за теоретические основы, вроде систем счисления, устройство процессора, как это у брэдли расписано. Когда дойду до практических вещей, наверное, придется держать под рукой ещё справочник по фасму.

Re: помогите новичку FASM syntax

Posted: Sat Oct 02, 2010 4:16 pm
by Mario
SII wrote:Но во всех указанных книгах -- не ФАСМ, а МАСМ и/или ТАСМ.
А какая собственно разница? Юров так вообще не привязан ни к чему.
Вообще я начинал с FASM и код TASM замечательно переписывается на него - исходники Кулакова из книги "Дисковая подсистема ПК" я достаточно легко использовал в ядре Колибри в свое время.
МАСМ недавно ковырял пытаясь приложение Kpack переписать на FASM. Работа правда застопорилась из-за отсутствия линковки в FASM, но ассемблерная часть компилируется вполне себе. Проблем особых именно с переписыванием одного синтаксиса на другой не имеется. Здесь мы наблюдаем привычки человека железно привыкшего к языкам высокого уровня, которые упрощают жизнь, но никак не стимулируют к пониманию всего процесса, который происходит на более низком уровне, приближенном к работе аппаратной части.

Re: помогите новичку FASM syntax

Posted: Sat Oct 02, 2010 5:31 pm
by SII
Mario wrote:
SII wrote:Но во всех указанных книгах -- не ФАСМ, а МАСМ и/или ТАСМ.
А какая собственно разница?
Когда уже освоился с языком, проблем с переходом на другой синтаксис обычно нет (ну, кроме привычки или там борьбы с кривостями конкретного транслятора). Ну а в данном случае человек элементарных вещей ещё не понимает. Примеры программ для МАСМа на ФАСМе просто не пойдут из-за разницы синтаксиса, а самостоятельно преобразовать их к ФАСМовским требованиям он не сможет за отсутствием необходимых знаний.
Работа правда застопорилась из-за отсутствия линковки в FASM, но ассемблерная часть компилируется вполне себе.
Разве ФАСМ не умеет создавать объектные файлы (КОФФ, ЭЛФ, ОМФ/ОМФ32 -- не суть важно)?

Re: помогите новичку FASM syntax

Posted: Sat Oct 02, 2010 5:57 pm
by Mario
SII wrote:
Mario wrote: Работа правда застопорилась из-за отсутствия линковки в FASM, но ассемблерная часть компилируется вполне себе.
Разве ФАСМ не умеет создавать объектные файлы (КОФФ, ЭЛФ, ОМФ/ОМФ32 -- не суть важно)?
Проблема в том, что подключаемая либа создается на MSVS и имеет формат LIB. Суть проблемы в теме Либы на ЯВУ

Re: помогите новичку FASM syntax

Posted: Tue Oct 05, 2010 11:49 pm
by scuter
вот на счёт примеров вы правильподметили,
MASM c FASM-мом не дружит,
но вот только хотелось бы узнать
всё таки по какому алгоритму процессор разбирает програмный год,
и команды процессора, имеется в виду не код ASM

Code: Select all

mov ecx, 128
а реальный машинный код

Code: Select all

8B D8
мне говорили что, что-то такое есть на официальном сайте компании интел,
только вот где

Re: помогите новичку FASM syntax

Posted: Wed Oct 06, 2010 12:00 am
by Mario
Это уже разбирается микрокодом самого центрального процессора.
А вообще есть правила кодирования - так сказать "Principles of operations". Можно погуглить, прямую ссылку не скажу, ибо не знаю - не интересовался.

Re: помогите новичку FASM syntax

Posted: Wed Oct 06, 2010 1:18 am
by Serge
scuter

Идём сюда и качаем Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 2: Instruction Set Reference. Остальное тоже рекомендую.

Re: помогите новичку FASM syntax

Posted: Wed Oct 06, 2010 1:53 am
by SII
scuter wrote:но вот только хотелось бы узнать
всё таки по какому алгоритму процессор разбирает програмный год,
и команды процессора, имеется в виду не код ASM

Code: Select all

mov ecx, 128
а реальный машинный код

Code: Select all

8B D8
мне говорили что, что-то такое есть на официальном сайте компании интел,
только вот где
Про подробности работы процессора информацию Вы не найдёте: это коммерческая тайна. Ну а способы разбора могут быть самые разные. Разбираться с этим для архитектуры IA-32 -- дело неблагодарное из-за запутанной и малоэффективной системы кодирования команд (вообще, архитектура в этом плане просто ужасная).

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

Re: помогите новичку FASM syntax

Posted: Wed Oct 06, 2010 12:06 pm
by art_zh
scuter wrote:всё таки по какому алгоритму процессор разбирает ... реальный машинный код
Чтобы это понять, вовсе не надо быть носителем каких-то коммерческих тайн или высших знаний.

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

8B в твоем примере - для процессора это не цифра, это группа из восьми электрических сигналов 10001101 (1=высокий уровень напряжения, 0=низкий). При такой (и только такой) комбинации включается цепь записи данных в один из 16- или 32-разрядных регистров. Номер регистра, разрядность и источник информации задаются вторым байтом команды.
Входящие в состав процессора схемы декодирования команд (дешифраторы) обеспечивают однозначный разбор второго (и последующих) байтов, определяют регистр-приемник (здесь - ecx) и источник информации (в данном случае информация лежит сразу за опкодом - в 3,4,5 и 6 байтах самой команды).

Потоки информации внутри процессора переключаются специальными шлюзами (мультиплексорами). Над самой информацией могут совершаться какие-то арифметические или логические действия, для чего служит отдельная крутонавороченная схема ALU.

Если ты попробуешь представить себе ЦПУ именно с этой стороны - все окажется не таким уж и сложным.

Да и разница между разными ассемблерами тоже будет выглядеть не очень существенной. Ведь asm-команды, в сущности, это слегка "очеловеченные" процессорные опкоды.
Как говорил мудрейший Козьма Прутков, "Зри в корень!" (вариант: ls /root ; )

Re: помогите новичку FASM syntax

Posted: Mon Mar 28, 2011 11:55 pm
by scuter
ура наконец то я нашёл хоть какое то упоминание реального синтаксиса процессора x86
вместе с командами ASM http://ref.x86asm.net/geek.html
вот теперь осталось найти описание команд на русском и примеры их использования.