Октябрь 2019
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031   

Календарь Календарь

Последние темы
» Новинки. Книги. Часть 1.
автор Viktor2312 Сегодня в 09:55

» Упрощаем схему Микро-80 и исправляем косяки. И собираем по технологиям 80-х годов.
автор Microsha Вчера в 23:02

» AVR AY плеер
автор Microsha Вчера в 17:55

» Микроконтроллеры STM32G0
автор Viktor2312 Вчера в 14:38

» SINOVATE (SIN). Криптовалюта Синовэйт.
автор Viktor2312 Вчера в 12:10

» Новости криптовалют: статьи, заметки, разное...
автор Viktor2312 Вчера в 09:11

» Усилитель на 6ф5п
автор freddy Ср Окт 16 2019, 16:07

» "Python". Статьи, заметки, очерки, разное...
автор Viktor2312 Вт Окт 15 2019, 21:18

» Анти Радио-86РК
автор freddy Вт Окт 15 2019, 16:38

» Конверсия atx бп
автор freddy Вт Окт 15 2019, 15:48

» Источники питания. Статьи, заметки, очерки, разное...
автор Viktor2312 Вт Окт 15 2019, 04:08

» Радио-86РК: внешние видео-адаптеры
автор freddy Вс Окт 13 2019, 19:28

» Изучаем основы VHDL, ISE, ПЛИС Xilinx.
автор Viktor2312 Сб Окт 12 2019, 11:20

» Электроника. Статьи, заметки, очерки, разное...
автор Viktor2312 Пт Окт 11 2019, 13:00

» Радио-86РК: Разное
автор barsik Чт Окт 10 2019, 15:36

» Общие вопросы по ПЭВМ Ириша
автор barsik Вс Окт 06 2019, 07:01

» ПО. ПЭВМ "Ириша". Текстовый редактор "WORDSTAR".
автор barsik Сб Окт 05 2019, 18:28

» Расширение ОЗУ в ИРИШЕ
автор Viktor2312 Пт Окт 04 2019, 17:27

» Радио РК-86: ПЭВМ с процессором 1821ВМ85
автор Viktor2312 Пт Окт 04 2019, 12:28

» Другой микропроцессор в ИРИШЕ
автор barsik Чт Окт 03 2019, 18:16

» Флейм касающийся ПЭВМ "Ириша".
автор barsik Чт Окт 03 2019, 07:31

» Модуль контроллера графического дисплея (МКГД).
автор Viktor2312 Ср Окт 02 2019, 00:50

» Новости. Xilinx.
автор Viktor2312 Вт Окт 01 2019, 12:07

» ПО. ПЭВМ "Ириша". Текстовый редактор "ИРИТЕКСТ".
автор Viktor2312 Сб Сен 28 2019, 00:34

» Криптовалюта — словарь терминов и определений.
автор Viktor2312 Пт Сен 27 2019, 23:00

Самые активные пользователи за месяц
Viktor2312
Ассемблер для современных CPU Intel. Vote_lcapАссемблер для современных CPU Intel. Voting_barАссемблер для современных CPU Intel. Vote_rcap 
barsik
Ассемблер для современных CPU Intel. Vote_lcapАссемблер для современных CPU Intel. Voting_barАссемблер для современных CPU Intel. Vote_rcap 
freddy
Ассемблер для современных CPU Intel. Vote_lcapАссемблер для современных CPU Intel. Voting_barАссемблер для современных CPU Intel. Vote_rcap 
Microsha
Ассемблер для современных CPU Intel. Vote_lcapАссемблер для современных CPU Intel. Voting_barАссемблер для современных CPU Intel. Vote_rcap 
leoperetz
Ассемблер для современных CPU Intel. Vote_lcapАссемблер для современных CPU Intel. Voting_barАссемблер для современных CPU Intel. Vote_rcap 

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


Ассемблер для современных CPU Intel.

Перейти вниз

Ассемблер для современных CPU Intel. Empty Ассемблер для современных CPU Intel.

Сообщение  Viktor2312 в Вт Апр 24 2018, 09:01

1
.
Ассемблер для современных CPU Intel.

Ассемблер для современных CPU Intel. 0_1536e1_9b9b6172_orig


В данной теме будет подробно рассматриваться язык программирования ассемблер для современных микропроцессоров Intel Core i7 и ниже, вплоть до 80286, в виду их полной совместимости. Собираться вся доступная информация, литература, приёмы программирования, структура и внутреннее устройство микропроцессоров, описание регистров и т. д. и т. п...
Viktor2312
Viktor2312
Гуру+

Сообщения : 11953
Дата регистрации : 2012-08-10
Возраст : 40
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Ассемблер для современных CPU Intel. Empty .

Сообщение  Viktor2312 в Ср Апр 25 2018, 15:07

2
.
Введение. Общие вопросы.


____В отличие от языков высокого уровня, таких, как С++, Java, С# и т. п., для каждого АССЕМБЛЕРА существует свой язык АССЕМБЛЕРА. Это правило в корне отличает язык ассемблера от языков высокого уровня. Исходные тексты программы написанной на языке высокого уровня, в большинстве случаев можно откомпилировать разными компиляторами для разных процессоров и разных операционных систем. С ассемблерными исходными кодами это сделать будет намного сложнее. Конечно, эта разница почти не ощутима для разных ассемблеров, которые предназначены для одинаковых процессоров. Но в том то и дело, что для КАЖДОГО ПРОЦЕССОРА существует СВОЙ АССЕМБЛЕР и СВОЙ ЯЗЫК АССЕМБЛЕРА. В этом смысле программировать на языках высокого уровня гораздо проще. Однако за все удовольствия надо платить. В случае с языками высокого уровня мы можем столкнуться с такими вещами как больший размер исполняемого файла, худшее быстродействие и т. п.
____Язык программирования низкого уровня (низкоуровневый язык программирования) – это язык программирования, максимально приближённый к программированию в машинных кодах. В отличие от машинных кодов, в языке низкого уровня каждой команде соответствует не число, а сокращённое название команды (мнемоника). Например, команда ADD – это сокращение от слова ADDITION (сложение). Поэтому использование языка низкого уровня существенно упрощает написание и чтение программ (по сравнению с программированием в машинных кодах). Язык низкого уровня привязан к конкретному процессору.
____Язык ассемблера – это низкоуровневый язык программирования, на котором вы пишите свои программы. Для каждого процессора существует свой язык ассемблера.
____Ассемблер – это специальная программа, которая преобразует (ассемблирует, то есть собирает) исходные тексты вашей программы, написанной на языке ассемблера, в исполняемый файл (файл с расширением EXE или COM). Если быть точным, то для создания исполняемого файла требуются дополнительные программы, а не только ассемблер.


Что такое процессор?

____Что такое процессор? Процессор - это важнейшая часть любой вычислительной системы, именно на нём и происходит вся вычислительная деятельность (или почти вся). Процессор – это мозг компьютера. Физически это специальная микросхема с несколькими сотнями выводов, которая устанавливается в разъём на материнской плате.
____Любая вычислительная система состоит из трёх частей: центральный процессор CPU, системная память и внешние устройства. Все три компонента взаимодействуют друг c другом посредством шин; наиболее важная из них - системная шина: именно с её помощью процессор взаимодействует с системной памятью и с важнейшими контроллерами. Здесь нам понадобится ввести четвёртое понятие - контроллер. Контроллер может выполнять разные действия: быть посредником между процессором и внешними устройствами (контроллер ввода-вывода, контроллер прерываний, USB-контроллер и т. д.) либо выполнять некоторые специфичные операции (например, контроллер прямого доступа к памяти ПДП).
____Основная задача памяти и контроллеров в целом понятна; какова же задача процессора? Основная задача процессора - это выполнение инструкций, которые находятся в памяти. Всё время после включения компьютера и до самого выключения процессор выполняет инструкции - за исключением некоторых случаев, когда он переходит в режим "сна", состояние для экономии энергии. В зависимости от режима, в котором находится процессор, инструкции он выполняет по-разному.
____Что такое инструкция? Инструкция, или машинная команда, - это просто некоторый код, фактически обычное число, которое находится в памяти и обозначает некоторое действие. Инструкции бывают разные и разного размера - они могут занимать от одного до нескольких байт. По сути, они дают указание процессору, что ему надо делать. Для того чтобы процессор «знал», откуда из памяти брать команды для выполнения, он использует специальный указатель инструкции (счётчик команд, как принято называть этот регистр в 8-битных микропроцессорах). Выполнив очередную инструкцию, процессор обновляет этот указатель, так чтобы он указывал на следующую команду в памяти, и т. д. Если какая-либо инструкция не может быть выполнена, процессор генерирует исключение; если исключение не может быть обработано, то он перезагружается.
____На рис. 1 приведена наиболее упрощённая схема устройства процессорной системы.

Ассемблер для современных CPU Intel. 0_15375b_339bc4f0_orig

____Линии, которыми соединяются блоки, - это шины: шина адреса, шина данных и шина управления. Все они объединяются в одну системную шину. Для расширения возможностей системы к системной шине подключаются контроллеры. Каждый контроллер исполняет команды, которые были посланы ему через системную шину.
____Самая главная составляющая любой системы - это память (системная память). Память бывает двух видов: физическая и линейная.
____Процессор тоже имеет свою память двух видов: кэш-память и регистровую. Кэш-память - это такая же системная память, просто находящаяся внутри кристалла процессора. Кэш-память является копией некоторой области основной памяти, к которой он часто обращается.
____Регистровую память представляют собой регистры. Каждый процессор обладает своим набором регистров. Регистры процессора – это такие специальные ячейки памяти, которые находятся непосредственно в микросхеме процессора. Регистр хранит в себе некоторую информацию, т. е. некоторое значение. Разрядность значения определяет разрядность регистра. Одни регистры могут хранить только определённую информацию, другие - любую. Те регистры, которые могут хранить любую информацию, называются регистрами общего назначения РОН. Остальные регистры напрямую управляют работой процессора; точнее сказать, сами они не управляют, а процессор работает по-разному в зависимости от значений, которые принимают эти регистры. Регистры бывают разной разрядности, но большинство регистров 8-, 16-, 32- и 64-разрядные.
____Для того чтобы получить значение, которое находится по определённому адресу памяти, процессор выставляет на шину адреса физический адрес, после чего на шине данных появляется значение. Конечно, появляется не мгновенно, но очень быстро - это зависит от скорости работы системной шины, памяти и других параметров.
____Обращения к определённым адресам памяти (которых обычно реально нет в системной памяти) могут перехватываться некоторыми контроллерами и перенаправлять данные, которые должны быть помещены в память (или считаны из памяти) некоторому устройству. Таким образом, программа может взаимодействовать с внешними устройствами посредством записи/чтения из определённых адресов памяти. Это основной метод взаимодействия программ и устройств: например, так происходит взаимодействие с PCI-устройствами.
____Как уже было сказано выше, адрес, который выставляется на шину адреса, - это и есть физический адрес. С виртуальной памятью всё будет сложнее. Виртуальная память может и не существовать реально, т. е. она «вроде бы есть, но её как бы нет». Если приложение операционной системы обращается к несуществующему адресу, процессор транслирует его в существующий адрес, а если памяти не хватает, то другая занятая память выгружается на внешнюю память (HDD, Flash и т. д.).
____Как же происходит выполнение программ на процессоре? Все данные, которыми может оперировать процессор, находятся в памяти и только в памяти; если данные находятся не в памяти, а на внешних устройствах, то необходимо сначала загрузить эти данные в память и только потом с ними работать. Программа - это тоже данные, просто они представляют собой коды инструкций. Код инструкции называют опкодом. Опкод - это несколько байтов данных (от 1 до 10 и более), закодированных специальным образом, чтобы процессор мог понять, что от него «хотят». Иначе говоря, опкоды инструкций - это приказы процессору, которые тот беспрекословно выполняет, например: переслать данные из одного регистра в другой, из регистра в память, выполнить вычитание или сложение и т. д.
____Процессор использует специальный регистр в качестве указателя инструкции EIP
(16-разрядов IP, 32-разряда EIP, 64-разряда RIP). Этот регистр всегда содержит адрес следующей инструкции. После выполнения очередной инструкции процессор читает инструкцию из адреса, на который указывает регистр EIP, определяет её размер и обновляет адрес в регистре EIP (прибавляет к значению в регистре EIP размер текущей инструкции). После выборки инструкции из памяти и изменения регистра EIP процессор приступает к её выполнению. Инструкция может выполняться от одного до нескольких десятков процессорных тактов. В процессе выполнения инструкции может измениться адрес в регистре EIP. При изменении адреса в регистре EIP следующей будет выполнена именно та инструкция, адрес которой содержит регистр EIP - иными словами, произойдёт переход, или прыжок. После выполнения инструкции процессор читает следующую инструкцию, которая находится по адресу, содержащемуся в регистре EIP, и процесс повторяется. Вся сущность работы процессора заключается в выполнении команд. Однажды включившись, он всегда должен выполнять команды до тех пор, пока он не выключится или не перейдёт в режим ожидания.
____Ещё одно важное понятие - это стек. Стек - это специальная область памяти, которая используется для хранения промежуточных данных. Представьте, что одна подпрограмма вызывает другую; вызываемая подпрограмма завершила свое выполнение, и теперь ей надо передать управление подпрограмме, которая её вызвала. Адрес команды, к которой надо вернуться после выполнения вызванной подпрограммы, находится на верхушке стека.
____На рис. 2 приведён пример цепочки вызова подпрограмм и содержимого стека.

Ассемблер для современных CPU Intel. 0_15379c_70e2ee17_orig

____Стек - как магазин автомата: добавили адрес, добавили второй, добавили третий, и затем адреса достают в порядке, обратном добавлению: третий, второй, первый. Следовательно, подпрограмма может вызвать ещё одну подпрограмму, а та, в свою очередь, - ещё одну, и так сколько угодно - всё ограничивается только размером стека. На верхушку стека указывает определённый регистр.
____На рис. 2 адреса возврата выделены рамкой. Адрес возврата - это адрес следующей инструкции после инструкции вызова (CALL). При выполнении команды возврата из подпрограммы (RET) адрес возврата извлекается из верхушки стека и происходит передача управления по этому адресу.
____Исторически сложилось так, что все процессоры, которыми мы пользуемся, называются процессорами х86. Под процессорами х86 подразумевают следующие модели процессоров: 8086, 80186, 80286, 80386, 80486, 80586 (Pentium I), 80686 (Pentium II) и т. д. Процессоры 8086-80286 - 16-разрядные, все остальные - 32-разрядные. Процессоры Intel с поддержкой технологии EM64Т и процессоры AMD с поддержкой технологии AMD64 являются 64-разрядными процессорами. Фактически технологии AMD64 и EM64Т - это одно и то же; разработчиком этой технологии является компания AMD, a Intel всего лишь «лицензировала» технологию AMD64 у компании AMD.
____Компания Intel тоже разработала свою 64-разрядную технологию под названием IA-64, но она настолько инновационная, что заслуживает отдельного рассмотрения, не в рамках этой темы. По этой технологии компания Intel разработала свой процессор Itanium. Архитектура IA-64 (и процессоры Itanium) главным образом создавалась для использования на высокопроизводительных серверных системах.
____Платформы, базирующиеся на процессорах с поддержкой AMD64 или EM64Т, мы в дальнейшем будем называть х86-64 платформами. Часто платформа х86-64 упоминается под названием х64, но это более узкое понятие, которое подразумевает только 64-разрядный режим процессора. Платформа х86-64 полностью совместима с х86 и является её логическим развитием и продолжением. Платформы, базирующиеся на процессорах Itanium, будем называть IA-64. Не следует путать х86-64 и IA-64: это совершенно разные технологии.

.


Последний раз редактировалось: Viktor2312 (Сб Апр 28 2018, 08:34), всего редактировалось 2 раз(а)
Viktor2312
Viktor2312
Гуру+

Сообщения : 11953
Дата регистрации : 2012-08-10
Возраст : 40
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Ассемблер для современных CPU Intel. Empty .

Сообщение  Viktor2312 в Чт Апр 26 2018, 07:21

3
.
Процессоры х86-64.

____Сейчас в основном выпускают только процессоры с поддержкой технологии AMD64 (EM64Т). Процессоры х86-64 - это почти все процессоры, которые можно встретить на рынке и при повседневном использовании.
____Процессоры х86-64 в основном могут работать в трёх основных режимах: реальный режим, защищённый режим и 64-разрядный режим, или long mode (далее - long mode):

  • реальный режим - это режим, в который переходит процессор после включения или перезагрузки. Это стандартный 16-разрядный режим, в котором доступно только 1 Мб физической памяти и возможности процессора почти не используются, а если и используются, то в очень малой степени. Иногда этот режим называют режимом реальных адресов, потому что в нем нельзя активировать механизм трансляции виртуальных адресов в физические. Это значит, что все адреса, к которым обращаются программы, являются физическими, т. е. без какого-либо преобразования будут выставлены на шину адреса. В этом режиме «родной» для процессора размер равен 2 байтам, или слову (WORD);

  • защищённый режим (protected mode, или legacy mode по документации AMD) - это 32-разрядный режим; разумеется для процессоров х86 этот режим главный. В защищённом режиме 32-разрядная операционная система может получить максимальную отдачу от процессора - разумеется, если ей это потребуется. В этом режиме можно получить доступ к 4-гигабайтному физическому адресному пространству, если память, конечно, установлена на материнской плате, а при включении специального механизма трансляции адресов можно получить доступ к 64 Гб физической памяти. В защищённый режим можно перейти только из реального режима. Защищённый режим называется так потому, что позволяет защитить данные операционной системы от приложений. В этом режиме «родной» для процессора размер данных - это 4 байта, или двойное слово (DWORD). Все операнды, которые выступают в этом режиме как адреса, должны быть 32-битными;

  • long mode («длинный режим», или IA-32е по документации Intel) - это собственно сам 64-разрядный режим. По своему принципу работы он почти полностью сходен с защищённым режимом, за исключением нескольких аспектов. В этом режиме можно получить доступ к 252 байтам физической памяти и к 248 байтам виртуальной памяти. В 64-разрядный режим можно перейти только из защищённого режима. В этом режиме «родной» для процессора размер данных - это двойное слово (DWORD), но можно оперировать данными размером в 8 байт, 64-разряда. Размер адреса всегда 8-байтовый, 64-разрядный.

____Помимо приведённых выше режимов есть ещё один режим. Это режим системного управления (System Management Mode), в который процессор переходит при получении специального прерывания SMI. Режим системного управления предназначен для выполнения некоторых действий с возможностью их полной изоляции от прикладного программного обеспечения и даже операционной системы. Переход в этот режим возможен только аппаратно. Режим системного управления может использоваться для реализации системы управления энергосбережением компьютера или функций безопасности и контроля доступа.
____Помимо вышеперечисленных режимов работы процессор поддерживает следующие два подрежима:

  • Режим виртуального процессора 8086 - это подрежим защищённого режима для поддержки старых 16-разрядных приложений. Его можно включить для отдельной задачи в многозадачной операционной системе защищённого режима;

  • Режим совместимости для long mode. В режиме совместимости приложениям доступны 4 Гб памяти и полная поддержка 32-разрядного и 16-разрядного кода; «родной» для процессора размер данных - это двойное слово. Режим совместимости, можно сказать, представляет собой в long mode то же самое, что и режим виртуального 8086 процессора в защищённом режиме. Режим совместимости можно включить для отдельной задачи в многозадачной 64-битной операционной системе. В режиме совместимости размер адреса 32-битный, а размер операнда не может быть 8-байтовым.

____В официальной документации производителей процессоров (Intel и AMD) немного другая терминология. Если следовать официальной документации, есть два режима работы процессора: 32-битный и 64-битный. 32-битный режим в документации от AMD называется legacy mode, а в документации от Intel носит название IA-32. Он включает в себя режим реальных адресов и защищённый режим. 64-битный режим в документации от AMD называется long mode, в документации от Intel - IA-32e; он включает в себя два подрежима: сам 64-разрядный режим и режим совместимости.
____На рис. 3 изображены диаграмма режимов работы процессора и возможности перехода из одного режима в другой.

Ассемблер для современных CPU Intel. 0_1538c0_b83764f3_orig

____Из схемы видно, что в 64-битный режим можно перейти, только лишь предварительно включив защищённый режим. После перезагрузки процессора, в каком бы он режиме ни находился, он всё равно начнёт работать в режиме реальных адресов. Непосредственный переход в режим реальных адресов возможен только из защищённого режима, а находясь в других режимах это придется делать только посредством перезагрузки процессора.


Регистры процессоров X86-64.

____В защищённом режиме, в режиме реальных адресов и режиме совместимости
доступны следующие регистры.
____Регистры общего назначения: 32-разрядные EAX, EBX, ECX, EDX, EBP, ESP, ESI, EDI.
На рис. 4 в таблице указаны названия регистров общего назначения:

Ассемблер для современных CPU Intel. 0_1538c7_3d0ddbce_orig
Рис. 4. Регистры общего назначения.

____Регистры EAX, EBX, ECX, EDX – это регистры общего назначения. Они имеют определённое назначение (так уж сложилось исторически), однако в них можно хранить любую информацию.
____Регистры EBP, ESP, ESI, EDI – это также регистры общего назначения. Они имеют уже более конкретное назначение. В них также можно хранить пользовательские данные, но делать это нужно уже более осторожно, чтобы не получить «неожиданный» результат.
____В свою очередь эти регистры, условно разделены, на регистры с меньшей разрядностью. Так как когда-то процессоры были 4-, 8- и 16-разрядными, и, соответственно, все их регистры были также 4-, 8- или 16-разрядными. Для совместимости со старыми программами, а также для удобства программирования некоторые регистры разделены на 2 или 4 «маленьких» регистра, у каждого из которых есть свои имена. 16-разрядные AX, BX, CX, DX, BP, SP, SI, DI (они являются младшими частями 32-разрядных регистров); 8-битные регистры AH, BH, CH, DH и AL, BL, CL, DL (старшие и младшие части 16-битных регистров соответственно). Таблица на рис. 5 поможет более наглядно понять структуру регистров:

Ассемблер для современных CPU Intel. 0_1538c8_458e975a_orig
Рис. 5. Структура регистров.

____Мы пока не говорили о разрядах (битах). Эту тему мы рассмотрим позже. А сейчас пока нам достаточно знать, что нулевой разряд (бит) – это младший бит. Он крайний справа. Старший бит – крайний слева. Номер старшего бита зависит от разрядности числа/регистра. Например, в 32-разрядном регистре старшим битом является 31-й бит (потому что отсчёт начинается с 0, а не с 1).
____Также доступны и другие регистры:

  • 32-разрядный EIP (IP в реальном режиме) - указатель инструкции;
  • 16-разрядные сегментные регистры: CS, DS, SS, ES, FS, GS;
  • 32-разрядный регистр флагов - EFLAGS;
  • 80-битные регистры математического сопроцессора ST0-ST7 и др.;
  • 64-битные MMX-регистры - MM0 - MM7;
  • 128-разрядные XMM-регистры - XMM0 - XMM7 и 32-битный MXCSR;
  • 32-разрядные регистры управления CR0 - CR4; регистры-указатели системных таблиц GDTR, LDTR, IDTR и регистр задачи TR;
  • 32-разрядные регистры отладки - DR0 - DR3, DR6, DR7;
  • MSR-регистры.

____В режиме реальных адресов доступны не все вышеуказанные регистры, но регистры управления доступны в любом случае. В режиме реальных адресов нельзя использовать некоторые регистры размером более 16 бит.

Примечание.
____Если мы напишем в программе следующие команды:

MOV____AX, _1
MOV____EAX, 1


Обе команды поместят в регистр AX число 1. Разница будет заключаться только в том, что вторая команда обнулит старшие разряды регистра EAX, то есть после выполнения второй команды в регистре EAX будет число 1. А первая команда оставит в старших разрядах регистра EAX старые данные. И если там были данные, отличные от нуля, то после выполнения первой команды в регистре EAX будет какое-то число, но не 1. А вот в регистре AX будет число 1.

____При переключении процессора в 64-разрядный режим программе доступны следующие регистры:
Регистры общего назначения:

  • 64-разрядные RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP и R8, R9, R15; 32-разрядные EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP, R8D - R15D (являются младшими частями 64-разрядных регистров); 16-разрядные AX, BX, CX, DX, SI, DI, SP, BP, R8W - R15W (являются младшими частями 32-разрядных регистров); 8-битные регистры AH, BH, CH, DH и AL, BL, CL, DL, SIL, DIL, SPL, BPL, R8L - R15L (старшие и младшие части 16-битных регистров соответственно);
  • 64-разрядный RIP - указатель инструкции;
  • 16-разрядные сегментные регистры: CS, DS, SS, ES, FS, GS;
  • 64-разрядный регистр флагов - RFLAGS;
  • 80-битные регистры математического сопроцессора ST0 - ST7;
  • 64-битные MMX-регистры (MM0 - MM7);
  • 128-разрядные XMM-регистры - XMM0 - XMM15 и 32-битный MXCSR;
  • 64-разрядные регистры управления CR0 - CR4 и CR8; регистры-указатели системных таблиц GDTR, LDTR, IDTR и регистр задачи TR;
  • 64-разрядные регистры отладки - DR0 - DR3, DR6, DR7;
  • MSR-регистры.

____Теперь немного пояснений. Регистры сегментов напрямую участвуют в формировании адресов, каждый сегментный регистр указывает на свой сегмент памяти, а именно: CS - сегмент кода, DS - сегмент данных, SS - сегмент стека; остальные три регистра дополнительные и могут не использоваться программой. Свободная работа с ними не всегда возможна; например в защищённом и 64-разрядном режимах загружать в них можно лишь определённые значения. В защищённом и 64-разрядном режимах доступность регистров зависит от уровня привилегий, на котором выполняется программа.
____Регистр общего назначения ESP (RSP) всегда указывает на верхушку стека, но при этом нам ничто не мешает использовать его в других целях, хотя тогда будет потеряна возможность нормальной работы со стеком. Вообще все регистры общего назначения можно свободно использовать в своих целях, но следует помнить, что некоторые регистры используются некоторыми командами: например, EBP (RBP) обычно указывает на начало фрейма в стеке, где хранятся локальные данные подпрограмм.
____Указатель инструкции EIP (RIP) напрямую использовать нельзя - данный регистр используется самим
процессором.
____Регистры STn (ST0 - ST7), MMn (MM0 - MM7), XMMn (XMM0 - XMM15) используются математическим сопроцессором при работе с числами с плавающей точкой.
____Регистры CRn (CR0 - CR4 и CR8), DRn (DR0 - DR3, DR6, DR7), регистры-указатели системных таблиц, MSR-регистры являются системными и управляются ключевыми механизмами работы процессора.
____Это краткая информация о регистрах, что запомнится хорошо, что нет, потом будет рассмотрено более подробно и детально.
Viktor2312
Viktor2312
Гуру+

Сообщения : 11953
Дата регистрации : 2012-08-10
Возраст : 40
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Ассемблер для современных CPU Intel. Empty Re: Ассемблер для современных CPU Intel.

Сообщение  a.oleg.a в Вт Май 07 2019, 13:42

4
Здравствуйте. На ноутбуке стоит процессор INTEL CELERON CPU № 2840. Эта статья о нём?

a.oleg.a
новичёк

Сообщения : 2
Дата регистрации : 2019-05-07

Вернуться к началу Перейти вниз

Ассемблер для современных CPU Intel. Empty Re: Ассемблер для современных CPU Intel.

Сообщение  Viktor2312 в Вт Май 07 2019, 14:01

5
a.oleg.a пишет:Здравствуйте. На ноутбуке стоит процессор INTEL CELERON CPU № 2840. Эта статья о нём?

И о нём, в частности. Любой современный микропроцессор фирмы Intel имеет общую архитектуру, но у каждой конкретной модели могут быть свои отличия, в объёме кэш памяти, в тех. процессе, по которому он изготовлен, в потребляемой мощности, в диапазоне поддерживаемых тактовых частот и т. д. Но, базовая архитектура у всех одинаковая, опять же за исключением может небольших отличий, которые обычно подробно описываются в технической документации на конкретный микропроцессор.

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 11953
Дата регистрации : 2012-08-10
Возраст : 40
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Ассемблер для современных CPU Intel. Empty Re: Ассемблер для современных CPU Intel.

Сообщение  a.oleg.a в Вт Май 07 2019, 14:40

6
Большое спасибо за ответ. Не могли бы Вы затронуть тему среды программирования в  .asm для современных процессоров 86*64, так как практически во всех учебных пособиях по ассемблеру эта тема не раскрыта. Я пробовал писать ассемблерный код в Visual Studio C++ 2017, но у меня к сожалению ничего не выходит.

a.oleg.a
новичёк

Сообщения : 2
Дата регистрации : 2019-05-07

Вернуться к началу Перейти вниз

Ассемблер для современных CPU Intel. Empty Re: Ассемблер для современных CPU Intel.

Сообщение  Viktor2312 в Вт Май 07 2019, 17:12

7
a.oleg.a пишет:Большое спасибо за ответ. Не могли бы Вы затронуть тему среды программирования в  .asm для современных процессоров 86*64, так как практически во всех учебных пособиях по ассемблеру эта тема не раскрыта. Я пробовал писать ассемблерный код в Visual Studio C++ 2017, но у меня к сожалению ничего не выходит.

Боюсь я сам до этого не скоро дойду, так как сейчас отложил изучение ассемблера для х86-64 в сторону и полностью погружён в алгоритмы SHA-256/512 и другие и в изучение микросхем ПЛИС, и языка описания аппаратуры VHDL, но буду иметь в виду ваше пожелание.

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 11953
Дата регистрации : 2012-08-10
Возраст : 40
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Ассемблер для современных CPU Intel. Empty Re: Ассемблер для современных CPU Intel.

Сообщение  Спонсируемый контент

8

Спонсируемый контент


Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения