Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Jan 18, 2020 1:22 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 45 posts ]  Go to page Previous 1 2 3 Next
Author Message
PostPosted: Sat Oct 02, 2010 3:52 am 
Offline

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

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

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

А на машинном языке ей соответсвует:
Code:
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) не может быть записано в одну строчку
и многие другие вещи становятся как то значительно проще


Top
   
PostPosted: Sat Oct 02, 2010 4:32 am 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
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) не может быть записано в одну строчку
и многие другие вещи становятся как то значительно проще


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


Top
   
PostPosted: Sat Oct 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
Quote:
и если на всё это дело посмотреть немного другим образом всё действительно просто т.е.
если писать + 10,12; а не add 10,12;
если - 30,12; а не sub 30,12;
если = x,y; а не cmp x,y;
..................................
т.е. заменить непонятные 3-х значные слова на понятные символы (хотябы),
и становится понятно, почему действие (y=x*10/12) не может быть записано в одну строчку
и многие другие вещи становятся как то значительно проще

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


Top
   
PostPosted: Sat Oct 02, 2010 2:08 pm 
Offline

Joined: Sun Nov 04, 2007 2:46 am
Posts: 390
Mario, мне очень сильно понравился Брэдли, сейчас учусь по нему.
Расписано все хорошо. Нравится.


Top
   
PostPosted: Sat Oct 02, 2010 3:05 pm 
Offline

Joined: Wed Dec 26, 2007 5:09 am
Posts: 214
Но во всех указанных книгах -- не ФАСМ, а МАСМ и/или ТАСМ.


Top
   
PostPosted: Sat Oct 02, 2010 3:32 pm 
Offline

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


Top
   
PostPosted: Sat Oct 02, 2010 4:16 pm 
SII wrote:
Но во всех указанных книгах -- не ФАСМ, а МАСМ и/или ТАСМ.

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


Top
   
PostPosted: Sat Oct 02, 2010 5:31 pm 
Offline

Joined: Wed Dec 26, 2007 5:09 am
Posts: 214
Mario wrote:
SII wrote:
Но во всех указанных книгах -- не ФАСМ, а МАСМ и/или ТАСМ.

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


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

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


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


Top
   
PostPosted: Sat Oct 02, 2010 5:57 pm 
SII wrote:
Mario wrote:
Работа правда застопорилась из-за отсутствия линковки в FASM, но ассемблерная часть компилируется вполне себе.

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

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


Top
   
PostPosted: Tue Oct 05, 2010 11:49 pm 
Offline

Joined: Mon Jul 12, 2010 7:03 am
Posts: 43
вот на счёт примеров вы правильподметили,
MASM c FASM-мом не дружит,
но вот только хотелось бы узнать
всё таки по какому алгоритму процессор разбирает програмный год,
и команды процессора, имеется в виду не код ASM
Code:
mov ecx, 128

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

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


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


Top
   
PostPosted: Wed Oct 06, 2010 1:18 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
scuter

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


Top
   
PostPosted: Wed Oct 06, 2010 1:53 am 
Offline

Joined: Wed Dec 26, 2007 5:09 am
Posts: 214
scuter wrote:
но вот только хотелось бы узнать
всё таки по какому алгоритму процессор разбирает програмный год,
и команды процессора, имеется в виду не код ASM
Code:
mov ecx, 128

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

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


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

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


Top
   
PostPosted: Wed Oct 06, 2010 12:06 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1377
scuter wrote:
всё таки по какому алгоритму процессор разбирает ... реальный машинный код


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

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

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

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

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

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

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


Top
   
PostPosted: Mon Mar 28, 2011 11:55 pm 
Offline

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 45 posts ]  Go to page Previous 1 2 3 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited