Как процессор знает сколько байт занимает команда машинного кода?
Некоторые команд могут 1 байт занимать другие больше, как машина определяет сколько байт нужно считать, и раcдекодить.
В ассемблере есть номера строк, и команда на строке, а что это в Машином коде, их же там нету, тогда как процессор знает сколько их просчитать. Может часть первых битов определяет сколько байтов нужно посчитать.
90 NOP ;;// почему процессор к примеру 90 D9 05 B0 D9 05 B0 08 1E 01 dword ptr ds:[11E08B0h] 011E0879 DD 5D BC qword ptr [ebp-44h] 011E087C 8B 05 44 23 D0 03 mov eax,dword ptr ds:[3D02344h] // Console.WriteLine("SSS "+r)
- Вопрос задан более двух лет назад
- 487 просмотров
1 комментарий
Простой 1 комментарий
Размер машинного слова и типы данных
Машинное слово (word) — это количество данных, которые процессор может обработать за одну операцию. Здесь можно применить аналогию документа, состоящего из символов (character, 8 бит) и страниц (много слов). Слово— это некоторое количество битов, как правило 16, 32 или 64. Когда говорят о «n-битовой» машине, то чаще всего имеют в виду размер машинного слова. Например, когда говорят, что процессор Intel Pentium — это 32-разрядный процессор, то обычно имеют в виду размер машинного слова, равный 32 бит, или 4 байт.
Размер процессорных регистров общего назначения равен размеру машинного слова этого процессора. Обычно разрядность остальных компонентов этой же аппаратной платформы в точности равна размеру машинного слова. Кроме того, по крайней мере для аппаратных платформ, которые поддерживаются ОС Linux, размер адресного пространства соответствует размеру машинного слова[92]. Следовательно, размер указателя равен размеру машинного слова. В дополнение к этому, размер типа long языка С также равен размеру машинного слова. Например, для аппаратной платформы Alpha размер машинного слова равен 64 бит. Следовательно, регистры, указатели и тип long имеют размер 64 бит. Тип int для этой платформы имеет размер 32 бит. Машины платформы Alpha могут обработать 64 бит — одно слово с помощью одной операции.
Слова, двойные слова и путаница
Для некоторых операционных систем и процессоров стандартную порцию данных не называют машинным словом. Вместо этого, словом называется некоторая фиксированная порция данных, название которой выбрано случайным образом или имеет исторические корни. Например, в некоторых системах данные могут разбиваться на байты (byte — 8 бит), слова (word — 16 бит), двойные слова (double word — 32 бит) и четверные слова (quad word — 64 бит), несмотря на то что на самом деле система является 32-разрядной. В этой книге и вообще в контексте операционной системы Linux под машинным словом понимают стандартную порцию данных процессора, как обсуждалось ранее.
Для каждой аппаратной платформы, поддерживаемой операционной системой Linux, в файле определяется константа BITTS_PER_LONG, которая равна размеру типа long языка С и совпадает с размером машинного слова системы. Полный список всех поддерживаемых аппаратных платформ и их размеры машинного слова приведены в табл. 19.1.
Таблица 19.1. Поддерживаемые аппаратные платформы
Аппаратная платформа Описание Размер машинного слова alpha Digital Alpha 64 бит arm ARM и StrongARM 32 бит cris CRIS 32 бит h8300 H8/300 32 бит I386 Intel x86 32 бит ia64 IA-64 64 бит m68k Motorola 68k 32 бит m86knommu m68k без устройства MMU 32 бит mips MIPS 32 бит mips64 64-разрядная MIPS 64 бит parisc HP PA-RISC 32 бит, или 64 бит ppc PowerPC 32 бит ppc64 POWER 64 бит s390 IBM S/390 32 бит, или 64 бит sh Hitachi SH 32 бит sparс SPARC 32 бит sparc64 UltraSPARC 64 бит um Usermode Linux 32 бит, или 64 бит v850 v850 32 бит x86_64 X86-64 64 бит
Стандарт языка С явно указывает, что размер памяти, которую занимают переменные стандартных типов данных, зависит от аппаратной реализации[93], при этом также определяется минимально возможный размер типа. Неопределенность размеров стандартных типов языка С для различных аппаратных платформ имеет свои положительные и отрицательные стороны. К плюсам можно отнести то, что для стандартных типов языка С можно пользоваться преимуществами, связанными с размером машинного слова, а также отсутствие необходимости явного указания размера. Для ОС Linux размер типа long гарантированно равен размеру машинного слова. Это не совсем соответствует стандарту ANSI С, однако является стандартной практикой в ОС Linux. Как недостаток можно отметить, что при разработке кода нельзя рассчитывать на то, что данные определенного типа занимают в памяти определенный размер. Более того, нельзя гарантировать, что переменные типа int занимают столько же памяти, сколько и переменные типа long[94].
Ситуация еще более запутывается тем, что одни и те же типы данных в пространстве пользователя и в пространстве ядра не обязательно должны соответствовать друг другу. Аппаратная платформа sparc64 предоставляет 32-разрядное пространство пользователя, а поэтому указатели, типы int и long имеют размер 32 бит. Однако в пространстве ядра для аппаратной платформы размер типа int равен 32 бит, а размер указателей и типа long равен 64 бит. Тем не менее такая ситуация не является обычной.
Всегда необходимо помнить о следующем.
• Как и требует стандарт языка С, размер типа char всегда равен 8 бит (1 байт),
• Нет никакой гарантии, что размер типа int для всех поддерживаемых аппаратных платформ будет равен 32 бит, хотя сейчас для всех платформ он равен именно этому числу.
• То же касается и типа short, который для всех поддерживаемых аппаратных платформ сейчас равен 16 бит.
• Никогда нельзя надеяться, что тип long или указатель имеет некоторый заданный размер. Этот размер для поддерживаемых аппаратных платформ может быть равен 32, или 64 бит.
• Так как размер типа long разный для различных аппаратных платформ, никогда нельзя предполагать, что sizeof(int) == sizeof(long).
• Точно так же нельзя предполагать, что размер типа int и размер указателя совпадают.
Читайте также
Типы данных
Типы данных Приведенные в этой главе таблицы взяты непосредственно из оперативной справочной системы и представляют единую модель данных Windows (Windows Uniform Data Model). Определения типов можно найти в заголовочном файле BASETSD.H, входящем в состав интегрированной среды разработки
Типы данных
Типы данных В JScript поддерживаются шесть типов данных, главными из которых являются числа, строки, объекты и логические данные. Оставшиеся два типа — это null (пустой тип) и undefined (неопределенный
14.5.1 Типы данных
14.5.1 Типы данных Файл может содержать текст ASCII, EBCDIC или двоичный образ данных (существует еще тип, называемый локальным или логическим байтом и применяемый для компьютеров с размером байта в 11 бит). Текстовый файл может содержать обычный текст или текст, форматированный
20.10.3 Типы данных MIB
20.10.3 Типы данных MIB Причиной широкого распространения SNMP стало то, что проектировщики придерживались правила «Будь проще!»? Все данные MIB состоят из простых скалярных переменных, хотя отдельные части MIB могут быть логически организованы в таблицы.? Только небольшое число
Типы данных
Типы данных Несмотря на то, что типы данных подробно описаны в документации (см. [1, гл. 4]), необходимо рассмотреть ряд понятий, которые будут часто использоваться в последующих главах книги. Помимо изложения сведений общего характера будут рассмотрены также примеры
Типы данных
Типы данных Один из этапов проектирования базы данных заключается в объявлении типа каждого поля, что позволяет процессору базы данных эффективно сохранять и извлекать данные. В SQL Server предусмотрено использование 21 типа данных, которые перечислены в табл. 1.1.Таблица 1.1.
Глава 2 Ввод данных. Типы, или форматы, данных
Глава 2 Ввод данных. Типы, или форматы, данных Работа с документами Excel сопряжена с вводом и обработкой различных данных, то есть ин формации, которая может быть текстовой, числовой, финансовой, статистической и т. д. МУЛЬТИМЕДИЙНЫЙ КУРС Методы ввода и обработки данных
Ключевые слова, используемые для спецификации типа данных
Ключевые слова, используемые для спецификации типа данных Ключевые слова для спецификации типов данных в операторах DDL представлены здесь в качестве краткой справки. Точный синтаксис см. в соответствующей главе, связанной с типами данных этой части книги, а также в
Типы данных
Типы данных Многие языки программирования при объявлении переменной требуют указывать, какой тип данных будет ей присваиваться. Например, в языке Java кодint i = 15;объявит переменную целого типа int с именем i и присвоит ей значение 15. В этом случае тип данных ставится в
12.2. Типы баз данных
12.2. Типы баз данных Группу связанных между собой элементов данных называют обычно записью. Известны три основных типа организации данных и связей между ними: иерархический (в виде дерева), сетевой и реляционный.Иерархическая БДВ иерархической БД существует
5.2.4. Типы данных
5.2.4. Типы данных Мы можем вводить в ячейки следующие данные: текст, числа, даты, также приложение Numbers предоставляет возможность добавлять флажки, ползунки и другие элементы управления. Аналогично MS Excel для выравнивания чисел, дат и текстовых данных в Numbers существуют
Слова, слова, слова… Автор: Евгений Козловский.
Слова, слова, слова… Автор: Евгений Козловский. © 2004, Издательский дом | http://www.computerra.ru/Журнал «Домашний компьютер» | http://dk.compulenta.ru/Этот материал Вы всегда сможете найти по его постоянному адресу: /2006/120/276445/Интересно, сколько двенадцатизначных чисел вы способны оперативно
Размер головного мозга и размер социального окружения
Размер головного мозга и размер социального окружения Дискуссии по поводу взаимосвязи между размером головного мозга какого-либо организма и размером группы, к которой этот организм принадлежит, ведутся нейробиологами уже давно. При этом взаимосвязь с социальной
Задачка по информатике!:) Сколько бит памяти ПК займет слово ПРОЦЕССОР? И если можно с объяснениями:) Заранее спасибо
создай текстовой документ — -напиши ПРОЦЕССОР
и посмотри размер .
где то 10 байт .
Похожие вопросы
Ваш браузер устарел
Мы постоянно добавляем новый функционал в основной интерфейс проекта. К сожалению, старые браузеры не в состоянии качественно работать с современными программными продуктами. Для корректной работы используйте последние версии браузеров Chrome, Mozilla Firefox, Opera, Microsoft Edge или установите браузер Atom.
Машинное слово, каков его размер?
Есть понятие «машинного слово», я читала об этом, но везде пишут по разному, на сколько я понимаю одно машинное слово равно 2 байта, а двойное машинное слово 4 байта, но откуда оно берётся, почему 2 байта а не один? То есть как я понимаю если процессор 32-битный он может за один такт принять и обработать с оперативной памяти 32 бита информации, а это 4 байта значит у него должно быть одно слово 4 байта ну а 64-х битный в 2 раза больше и его слово будет больше?
Отслеживать
371 1 1 золотой знак 5 5 серебряных знаков 13 13 бронзовых знаков
задан 7 сен 2013 в 12:25
Алина_Климова Алина_Климова
177 1 1 золотой знак 4 4 серебряных знака 15 15 бронзовых знаков
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Думаю, вся путаница возникла из-за того, что когда то разработчики Интела (я так думаю) назвали два байта — словом (word) — тогда 16 битные процессоры были прорывом. Соответственно, 4 байта — двойным словом. (DWORD, double word). Это сохранилось и в многих языках программирования (в том числе в с/с++). Почему два байта — слово? да видимо от того, что байт это как буква. А две буквы — это уже слово. (Хотя сейчас прибегут филологи и скажут, что это скорее всего слог, чем слово). В википедии есть хорошая фраза «* Для 32-битных процессоров x86: исторически машинным словом считается 16 бит, реально — 32 бита.»
А вот словосочетание «двойное машинное слово» я никогда не слышал. Даже гугл мало находит статей с таким сочетанием. А вот «двойное слово» или «машинное слово» — это нормально.
То есть как я понимаю если процессор 32-битный он может за один такт принять и обработать с оперативной памяти 32 бита информации
не все так просто. Далеко не факт, что он может даже принять 32 бита. Современные процессоры сложные, имеют кеш. Имеют сложные комманды, которые за один раз (не так, а именно раз) могут обработать до 16 байт памяти (всякие mmx и sse).
Обычно, машинным словом называют «разрядность процессора», так как разрядность обычно показывает оптимальный размер данных внутри процессора (регистры 32битного процессора 32 битные и с 32битными данными в основном все команды и работают). В некоторых процессорах слово было 60 бит:)
В любом случае рекомендую всегда всматриваться в контекст. Если о «слове» говорит программист на С/С++ — это 16 бит, если программист на ассемблере под 32 битные ARM процессоры — то скорее всего слово — это 32 бита.