Форум программистов, компьютерный форум, киберфорум
Низкоуровневое программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/41: Рейтинг темы: голосов - 41, средняя оценка - 4.78
31 / 31 / 5
Регистрация: 24.09.2014
Сообщений: 243

Машинный код Intel-486 (подробно) + прочие процессоры

28.04.2015, 11:31. Показов 8128. Ответов 16
Метки нет (Все метки)

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

Интересуют Intel, 486 (прежде всего), а также RISC и AMD-64 + факультативно другие процессоры...

Не по теме:

Мануалы Интела и x86asm просмотрел - пользы мало. В "интеле" можно утонуть навечно, причём со словариком. :) А x86asm провоцирует много вопросов. Например, что за префиксы стоят перед базовым, когда они пишутся, когда нет? Что за "постфиксы" стоят после него? Какие поля таблицы имеют непосредственное отношение к будущему машинному коду? Ещё не понятно, что из себя представляет операнд1 в виде регистра (r8, r32) - ибо регистр это не данные, а контейнер... ну и т. д.

0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.04.2015, 11:31
Ответы с готовыми решениями:

Подскажите мать поддерживающую процессоры Intel Celeron D 347 и Intel Core i3-2100.
Подскажите мать поддерживающую процессоры: Intel Celeron D 347 Intel Core i3-2100 Желательно без портов SATA 6Gb/s! ОООчень...

Сильно ли отличаются процессоры по мощности: DualCore Intel Pentium D 820 от Intel Core 2 Duo E4500?
Подскажите пожалуйста у меня стоит DualCore Intel Pentium D 820 если поменять на Intel Core 2 Duo E4500 заметна будет разница в мощности?

В погоне за скоростью: многоядерные процессоры, пропускная способность шины и прочие технические нюансы
Выделено в отдельную тему как интересный вопрос, достойный обсуждения. А почему Вы решили, что все упирается в шину ? Допустим, у...

16
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
28.04.2015, 13:24
Это имелось в виду?
Вложения
Тип файла: zip OPCODES.ZIP (65.5 Кб, 69 просмотров)
0
31 / 31 / 5
Регистрация: 24.09.2014
Сообщений: 243
28.04.2015, 13:36  [ТС]
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Это имелось в виду?
Я сейчас из-под линукс не могу запустить *.хлп. Если это просто справочник опкодов - то нет. Мне нужен больше учебник, объяснение. В принципе, могу и здесь в теме назадавать вопросы... Просто, боюсь, что их будет слишком много!
Таблички с сайта x86asm очень хороши, но есть потребность в подробном описании их содержимого (желательно на русском языке и с примерами). Я хочу знать всё о каждом бите, ну или хотя бы байте...
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
28.04.2015, 14:01
panotnap,
Цитата Сообщение от panotnap Посмотреть сообщение
В принципе, могу и здесь в теме назадавать вопросы... Просто, боюсь, что их будет слишком много!
Конкретные вопросы - конкретные ответы, никто же не знает, чего ты ожидаешь...
Цитата Сообщение от panotnap Посмотреть сообщение
есть потребность в подробном описании их содержимого (желательно на русском языке и с примерами). Я хочу знать всё о каждом бите, ну или хотя бы байте
Возьми, к примеру, команду DIV и распиши в каком виде ты хотел бы ее увидеть

P.S. посмотри https://www.cyberforum.ru/asse... 05284.html там есть частичный разбор опкодов, хотя лучше чем в мануалах от Intel это никто не опишет
0
31 / 31 / 5
Регистрация: 24.09.2014
Сообщений: 243
28.04.2015, 15:10  [ТС]
09 r L OR r/m16/32 r16/32
09 (primary opcode) - тут всё понятно, байт есть байт
r - (либо поле расширения опкода от 0 до 7, либо байт ModR/M, содержащий регистровый операнд и операнд r/m)
...Что это за расширение величиной в 8 значений? Его нужно добавлять к опкоду, но тремя битами или одним байтом?
...Второе понял пока всё это писал (речь об указании номера конкретного регистра).
Но. Допустим, OR ax, bx. AX я выражаю через значение расширения r. А как же BX? В этой ситуации опкод будет 09 или 0B? Мне же надо OR r16, r16. Я такого не вижу.
Другие префиксы / поля сколькими битами должны выражаться? Байтом?

В поле первичного опкода в одной таблице написано 40+r, в другой - 40 в первичном опкоде и r в расширении (то есть отдельно). И как это понимать? Это одно и то же или это означает разное?

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

Добавлено через 5 минут
(ремарка: ссылки форум потёр, они были на сайт x86asm, раздел coder32)

Ещё забавно, что в этой таблице поле расширения базового опкода 0F стоит ДО этого поля, хотя является не другим полем вовсе а именно этим самым базовым; а то, что указано в поле базового опкода уже должно по идее занимать соседнюю, следующую полосу...
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
28.04.2015, 17:53
Вообще, пытаться понять принципы формирования машинных кодов из англоязычных справочных таблиц - то ещё извращение...
Ну вот тебе intel manual на русском, но пытаться понять принципы бессмысленно, ибо это нагваль. То есть инженеры руководствовались хер знает чем - просто для каждой инструкции предназначен свой цифровой код, вот и всё.
1
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
29.04.2015, 04:34
hex opcode1dwmodopcode2Reg
08C3 or bl,al0000100011000011
09C3 or ebx,eax0000100111000011
0BC3 or eax,ebx0000101111000011
Бит W и кодировка регистров
RegW=0W=1
 rbrwrd
000ALAXEAX
001CLCX ECX
010DLDX EDX
011BLBX EBX
100AHSPESP
101 CHBPEBP
110DHSIESI
111 BHDIEDI
Opcode2 может представлять либо уточняющий опкод (в случае, если один из операндов представлен непосредственным значением), либо регистр
Бит d (бит направления) показывает, чем является регистр в поле Reg: операндом-источником (d=0) или операндом-приемником (d=1)
Зависимость режима адресации от поля Mod
Mod Адрес
00 [Reg]
01 [Reg+8-битное смещение]
10 [Reg+32-битное смещение]
11 Reg
1
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
29.04.2015, 15:44
Цитата Сообщение от panotnap Посмотреть сообщение
Но. Допустим, OR ax, bx. AX я выражаю через значение расширения r. А как же BX? В этой ситуации опкод будет 09 или 0B?
Наивная буратина. Система команд Интеля вещь та еще.
Рисовалась, видать, с бодуна.

Правильны оба ответа. Можно 09, а можно 0B :

09 D8 OR AX,BX
0B C3 OR AX,BX

Добавлено через 5 минут
TASM, кстати, компиляет 0B C3 , а вот MASM 09 D8.

Из ностальжи :
Когда-то давным давно некий перец выпустил книжку "Пишем вирусы и антивирусы", в котором привел текст простейшего нерезидентного файлового вируса. И пошла писать губерния. Авторам антивирусных программ пришлось ловить его в нескольких вариантах, в зависимости от того каким ассемблером откомпиляли.

Добавлено через 2 минуты
Цитата Сообщение от murderer Посмотреть сообщение
просто для каждой инструкции предназначен свой цифровой код, вот и всё.
Или два.

Добавлено через 5 минут
Цитата Сообщение от murderer Посмотреть сообщение
но пытаться понять принципы бессмысленно
В базовом варианте системы команд 8088/8086 принципы были. Правда, принципы те еще.
Но их можно вполне однозначно понять. Если согласно принципу получается команда JMP FAR [AL], значит это она и есть. Отдельный вопрос куда произойдет этот JMP, но он произойдет. А вот когда следующие процессоры линейки стали насыщать дополнительными опкодами, принципы пошли лесом. Дополнительные опкода сразу стали вешать сделав POP CS префиксом. А какая команда была.

Добавлено через 6 минут
Вот тебе еще приколы :
87 D9 XCHG BX, CX
87 CB XCHG CX, BX

Добавлено через 2 минуты
А вот приколы с длиной команды :
83 E3 FE AND BX,0FFFEH
81 E3 FFFE AND BX,0FFFEH

Добавлено через 4 минуты
А вот тебе даже 3 разных опкода у одной команды :
93 XCHG AX, BX
93 XCHG BX, AX
87 C3 XCHG AX, BX
87 D8 XCHG BX, AX
1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
29.04.2015, 15:59
Цитата Сообщение от murderer Посмотреть сообщение
То есть инженеры руководствовались хер знает чем - просто для каждой инструкции предназначен свой цифровой код, вот и всё.
Немножко не так - инструкции вполне себе декодируются в восьмиричной системе счисления: http://tnovelli.net/ref/opx86.html
2
31 / 31 / 5
Регистрация: 24.09.2014
Сообщений: 243
15.05.2015, 14:49  [ТС]
Я компилирую NASM'ом два следующих кода:
Assembler
1
2
3
4
5
cpu 486
bits 16 
mov AX, BX
mov AX, CX
mov AX, DX
Assembler
1
2
3
4
5
cpu 486
bits 32 
mov EAX, EBX
mov EAX, ECX
mov EAX, EDX
Ассемблируется в одно и то же:
Assembler
1
89 D8 89 C8 89 D0
Почему?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
15.05.2015, 16:42
panotnap,
потому, что
bits 16/bits 32
1
31 / 31 / 5
Регистрация: 24.09.2014
Сообщений: 243
15.05.2015, 18:02  [ТС]
Подождите. А процессор-то как узнает по одинаковому байт-коду, что я от него хочу - mov eax или mov ax?

Добавлено через 37 минут
Assembler
1
2
3
4
5
6
7
8
9
10
mov AX, BX
mov EAX, EBX
 
bits 16
mov AX, BX
mov EAX, EBX
 
bits 32
mov AX, BX
mov EAX, EBX
Assembler
1
2
3
4
5
6
7
8
89 D8
66 89 D8
 
89 D8
66 89 D8
 
66 89 D8
89 D8
Как это понять? Где закономерность?
Процессору приходит 89 D8 - что он будет делать с верхним словом регистра EAX?
Процессору приходит 66 89 D8 - то же вопрос.
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
15.05.2015, 21:59
Цитата Сообщение от panotnap Посмотреть сообщение
Подождите. А процессор-то как узнает по одинаковому байт-коду, что я от него хочу - mov eax или mov ax?
Если процессор находится в 32-разрядном режиме, значит ты хочешь EAX, если в 16-разрядном значит AX.
А если тебе хочется наоборот, то прилепи перед инструкцией префикс переключения разрядности.

Добавлено через 4 минуты
Цитата Сообщение от panotnap Посмотреть сообщение
Процессору приходит 89 D8 - что он будет делать с верхним словом регистра EAX?
В 16-разрядном режиме ? А ничего не будет делать. Скопирует только bx в ax.
А в 32-разрядном режиме скопирует ebx в eax. Т.е. изменит.

Добавлено через 1 минуту
Цитата Сообщение от panotnap Посмотреть сообщение
Процессору приходит 66 89 D8 - то же вопрос.
В 16-разрядном режиме ? Скопирует ebx в eax. Т.е. изменит.
Зато в 32-разрядном ничего не будет делать. Скопирует только bx в ax.
2
656 / 409 / 76
Регистрация: 21.09.2008
Сообщений: 1,407
15.07.2015, 16:23
Цитата Сообщение от panotnap Посмотреть сообщение
А процессор-то как узнает по одинаковому байт-коду, что я от него хочу - mov eax или mov ax?
Читайте у Зубкова про префиксы команд. По-моему, байт 66h.
Так и есть.
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
16.07.2015, 08:36
Там-же сказано по ОДИНАКОВОМУ байткоду. А если лепить или не лепить 66, то это означает неодинаковость.
0
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
22.07.2015, 23:56
panotnap,
Цитата Сообщение от panotnap Посмотреть сообщение
Подождите. А процессор-то как узнает по одинаковому байт-коду, что я от него хочу
Он не знает, он только обрабатывает входящие байты команд. Все зависит от того, какой информацией процессор распологает. Тут нужно смотреть служебные регистры(в том числе и флаги), там всегда найдется бит, который всем "пудрит мозги". Всё это касается:
Цитата Сообщение от panotnap Посмотреть сообщение
Процессору приходит 89 D8 - что он будет делать с верхним словом регистра EAX?
Процессору приходит 66 89 D8 - то же вопрос
Считаете, что тот или инной пефиск команды заставляет игнорировать(инвертировать - только для следующей команды) тот или инной бит служебных регистров. Это, что-то наподобие CLI/STI, для Доса

Почитайте Кулакова - Программирование на аппаратном уровне, специальный справочник(в сети есть djvu). Обратите внимание на перевод процессора в защищенный режим. Сами разработчики "Камня" не знают, что они сделали. Есть "реальный"(чистый Биос/Дос, прерывания и 1 Мб памяти), есть "защищенный"(исключения-типа прерывания, и памяти сколько подарили), а есть ещё(появился потом) и "не реальный" режим-(Биос/Дос + память, сколько подарили [ представили Биос/Дос и несколько гиг памяти ] ). А сколько этих режимов можно выжать из "Камня" - Х / З.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
23.07.2015, 00:32
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Почитайте Кулакова - Программирование на аппаратном уровне, специальный справочник
Крайне нехорошая книжка в плане ознакомления с архитектурой (касается не только процессора, а почти всего). Автор там пишет кучу своих предположений, большинство из которых ошибочны. Правда пример с изменением теневой части сегментного регистра у него рабочий, хотя его можно было написать в разы более компактным.
На самом деле реальный режим в IA-32 -это не эквивалент режима оригинального 8086. По большому счету в нем поверх защищенного режима налеплены костыли, которыми легко воспользоваться, что и продемонстрировано в книге Кулакова. Ну так например в защищенном режиме в сегментый регистр пишется селектор и подгружается теневая часть и таблицы дескрипторов. В реальном при запись в сегментный регистр приводит к смещению базы в теневой части. А адресация работает одинаково, поэтому изменив предел можно получить доступ ко всей памяти. Более того, загрузив в CS соответствующую теневую часть можно в реальном режиме выполнять 32х-битный код (этим мало кто пользуется в силу очевидных причин). Кстати прерывания защиты в реальном режиме прекрасно работают.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.07.2015, 00:32
Помогаю со студенческими работами здесь

Процессоры Core-i5 Intel
Привет Хочу спросить про процессоры от Intel (для игрового ПК) Сore i5 8400 Сore i5 8600 Сore i5 7600K Сore i5 8600 и Сore...

Процессоры g intel pentium
Надеюсь хоть тут скажут что-то конкретное . Решил обновить себе немного компьютер , а т.к. денег немного , то выбираю все подешевле . Купил...

Новые процессоры Intel!
Intel Главный мировой производитель процессоров продолжит выпускать микрочипы, которые будут все меньше, а их многоядерность — все ...

Подскажите дизассемблер, который переведет код ассемблера в машинный 8 битный код для КР580
Подскажите программу дизассемблер которая переведет код ассемблера в машинный 8 битный код для КР580

(очередной раз) Java код в native (машинный) код
Возможно тема довольно баянистая, но все же подниму ее. Вопрос тот же - как java код преобразовать в чистый машинный код(и запихнуть в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru