Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Сб июн 24, 2017 9:57 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 45 сообщений ]  На страницу Пред. 1 2 3 След.
Автор Сообщение
 Заголовок сообщения: Re: помогите новичку FASM syntax
СообщениеДобавлено: Сб окт 02, 2010 3:52 am 
Не в сети

Зарегистрирован: Пн июл 12, 2010 7:03 am
Сообщения: 43
чёта дело как то не движется,
прочитал кучу всякой литературы, но результата как такового не получил,
в некоторых учебниках даже про синтаксис(начало всех начал) ничего не пишут,
прям так сразу и ляпают давайте напишем драйвер для микрочипа CX-52,
прям с первой страницы, а про описание команд вообще уж нечего говорить,
(команда *** - делает *****, вбиваешь эту команду в код и компилятор пишет ошибку)
посмотрев на это безобразие понимаешь,
что ASM максимально приближен к машинному коду только тем что там постоянно встречаются слова из 3-х букв,
а в хекс(поидее машинном) коде встречаются слова из 2-х букв
Рассмотрим простейшую команду ассемблера:
Код:
mov ebx, eax

На машинном языке это будет выглядеть так:
Код:
8B D8

8B – это код операции. Теперь рассмотрим еще один пример:
Код:
mov ecx, 128

А на машинном языке ей соответсвует:
Код:
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
СообщениеДобавлено: Сб окт 02, 2010 4:32 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пт июн 27, 2008 3:22 pm
Сообщения: 971
scuter писал(а):
скажите где достать список команд процессора IA-32(с объяснениями)

http://ftp.kolibrios.org/users/Asper/docs/mydocs.7z Документ "Инструкции IA".

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


В Колибри используется плоская модель памяти, код и данные программы хранятся вместе (не нужно париться с сегментами). Зачем все эти механизмы тебе нужны, главное, что инструкции выполняются одна за другой, пока не встретится инструкция перехода или вызов функции, всё как и в других языках.

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


Какой-то урезанный вариант обратной польской нотации.


Вернуться к началу
 Заголовок сообщения: Re: помогите новичку FASM syntax
СообщениеДобавлено: Сб окт 02, 2010 1:51 pm 
Вот книжки которые надо читать как в самом начале, так и в процессе.
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
СообщениеДобавлено: Сб окт 02, 2010 2:08 pm 
Не в сети

Зарегистрирован: Вс ноя 04, 2007 2:46 am
Сообщения: 390
Mario, мне очень сильно понравился Брэдли, сейчас учусь по нему.
Расписано все хорошо. Нравится.


Вернуться к началу
 Заголовок сообщения: Re: помогите новичку FASM syntax
СообщениеДобавлено: Сб окт 02, 2010 3:05 pm 
Не в сети

Зарегистрирован: Ср дек 26, 2007 5:09 am
Сообщения: 214
Но во всех указанных книгах -- не ФАСМ, а МАСМ и/или ТАСМ.


Вернуться к началу
 Заголовок сообщения: Re: помогите новичку FASM syntax
СообщениеДобавлено: Сб окт 02, 2010 3:32 pm 
Не в сети

Зарегистрирован: Вс ноя 04, 2007 2:46 am
Сообщения: 390
Увы, это так. Правда я сейчас взялся больше за теоретические основы, вроде систем счисления, устройство процессора, как это у брэдли расписано. Когда дойду до практических вещей, наверное, придется держать под рукой ещё справочник по фасму.


Вернуться к началу
 Заголовок сообщения: Re: помогите новичку FASM syntax
СообщениеДобавлено: Сб окт 02, 2010 4:16 pm 
SII писал(а):
Но во всех указанных книгах -- не ФАСМ, а МАСМ и/или ТАСМ.

А какая собственно разница? Юров так вообще не привязан ни к чему.
Вообще я начинал с FASM и код TASM замечательно переписывается на него - исходники Кулакова из книги "Дисковая подсистема ПК" я достаточно легко использовал в ядре Колибри в свое время.
МАСМ недавно ковырял пытаясь приложение Kpack переписать на FASM. Работа правда застопорилась из-за отсутствия линковки в FASM, но ассемблерная часть компилируется вполне себе. Проблем особых именно с переписыванием одного синтаксиса на другой не имеется. Здесь мы наблюдаем привычки человека железно привыкшего к языкам высокого уровня, которые упрощают жизнь, но никак не стимулируют к пониманию всего процесса, который происходит на более низком уровне, приближенном к работе аппаратной части.


Вернуться к началу
   
 Заголовок сообщения: Re: помогите новичку FASM syntax
СообщениеДобавлено: Сб окт 02, 2010 5:31 pm 
Не в сети

Зарегистрирован: Ср дек 26, 2007 5:09 am
Сообщения: 214
Mario писал(а):
SII писал(а):
Но во всех указанных книгах -- не ФАСМ, а МАСМ и/или ТАСМ.

А какая собственно разница?


Когда уже освоился с языком, проблем с переходом на другой синтаксис обычно нет (ну, кроме привычки или там борьбы с кривостями конкретного транслятора). Ну а в данном случае человек элементарных вещей ещё не понимает. Примеры программ для МАСМа на ФАСМе просто не пойдут из-за разницы синтаксиса, а самостоятельно преобразовать их к ФАСМовским требованиям он не сможет за отсутствием необходимых знаний.

Цитата:
Работа правда застопорилась из-за отсутствия линковки в FASM, но ассемблерная часть компилируется вполне себе.


Разве ФАСМ не умеет создавать объектные файлы (КОФФ, ЭЛФ, ОМФ/ОМФ32 -- не суть важно)?


Вернуться к началу
 Заголовок сообщения: Re: помогите новичку FASM syntax
СообщениеДобавлено: Сб окт 02, 2010 5:57 pm 
SII писал(а):
Mario писал(а):
Работа правда застопорилась из-за отсутствия линковки в FASM, но ассемблерная часть компилируется вполне себе.

Разве ФАСМ не умеет создавать объектные файлы (КОФФ, ЭЛФ, ОМФ/ОМФ32 -- не суть важно)?

Проблема в том, что подключаемая либа создается на MSVS и имеет формат LIB. Суть проблемы в теме Либы на ЯВУ


Вернуться к началу
   
 Заголовок сообщения: Re: помогите новичку FASM syntax
СообщениеДобавлено: Вт окт 05, 2010 11:49 pm 
Не в сети

Зарегистрирован: Пн июл 12, 2010 7:03 am
Сообщения: 43
вот на счёт примеров вы правильподметили,
MASM c FASM-мом не дружит,
но вот только хотелось бы узнать
всё таки по какому алгоритму процессор разбирает програмный год,
и команды процессора, имеется в виду не код ASM
Код:
mov ecx, 128

а реальный машинный код
Код:
8B D8

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


Вернуться к началу
 Заголовок сообщения: Re: помогите новичку FASM syntax
СообщениеДобавлено: Ср окт 06, 2010 12:00 am 
Это уже разбирается микрокодом самого центрального процессора.
А вообще есть правила кодирования - так сказать "Principles of operations". Можно погуглить, прямую ссылку не скажу, ибо не знаю - не интересовался.


Вернуться к началу
   
 Заголовок сообщения: Re: помогите новичку FASM syntax
СообщениеДобавлено: Ср окт 06, 2010 1:18 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3927
scuter

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


Вернуться к началу
 Заголовок сообщения: Re: помогите новичку FASM syntax
СообщениеДобавлено: Ср окт 06, 2010 1:53 am 
Не в сети

Зарегистрирован: Ср дек 26, 2007 5:09 am
Сообщения: 214
scuter писал(а):
но вот только хотелось бы узнать
всё таки по какому алгоритму процессор разбирает програмный год,
и команды процессора, имеется в виду не код ASM
Код:
mov ecx, 128

а реальный машинный код
Код:
8B D8

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


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

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


Вернуться к началу
 Заголовок сообщения: Re: помогите новичку FASM syntax
СообщениеДобавлено: Ср окт 06, 2010 12:06 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1291
scuter писал(а):
всё таки по какому алгоритму процессор разбирает ... реальный машинный код


Чтобы это понять, вовсе не надо быть носителем каких-то коммерческих тайн или высших знаний.

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

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

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

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

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

_________________
Узкий специалист подобен флюсу: полнота его - односторонняя.
Козьма Прутков


Вернуться к началу
 Заголовок сообщения: Re: помогите новичку FASM syntax
СообщениеДобавлено: Пн мар 28, 2011 11:55 pm 
Не в сети

Зарегистрирован: Пн июл 12, 2010 7:03 am
Сообщения: 43
ура наконец то я нашёл хоть какое то упоминание реального синтаксиса процессора x86
вместе с командами ASM http://ref.x86asm.net/geek.html
вот теперь осталось найти описание команд на русском и примеры их использования.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 45 сообщений ]  На страницу Пред. 1 2 3 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB