Если разрядность процессора 64, то его регистр имеет размер

Обновлено: 29.06.2024

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

Эта глава из книги

Эта глава из книги

Эта глава из книги 

История микропроцессоров до ПК

Мозгом или двигателем ПК является процессор (иногда называемый микропроцессором) или центральный процессор (ЦП). ЦП выполняет системные вычисления и обработку. Процессор часто является самым дорогим отдельным компонентом в системе (хотя цены на графические карты в некоторых случаях превышают его); в системах более высокого класса он может стоить в четыре или более раз больше, чем материнская плата, к которой он подключается. Как правило, Intel приписывают создание первого микропроцессора в 1971 году с появлением чипа под названием 4004. Сегодня Intel по-прежнему контролирует рынок процессоров, по крайней мере, для ПК, хотя с годами AMD завоевала солидную долю рынка. Это означает, что все ПК-совместимые системы используют либо процессоры Intel, либо Intel-совместимые процессоры нескольких конкурентов (например, AMD или VIA/Cyrix).

Доминирование Intel на рынке процессоров не всегда было гарантировано. Хотя обычно Intel приписывают изобретение процессора и выпуск первого процессора на рынок, к концу 1970-х годов два самых популярных процессора для персональных компьютеров были не от Intel (хотя один из них был клоном процессора Intel). процессор). Персональные компьютеры того времени в основном использовали Z-80 от Zilog и 6502 от MOS Technologies. Z-80 был известен как улучшенный и менее дорогой клон процессора Intel 8080, подобно тому, как такие компании, как AMD, VIA/Cyrix, IDT и Rise Technologies, клонировали процессоры Intel Pentium. Однако в случае с Z-80 клон стал намного популярнее оригинала. Кто-то может возразить, что AMD добилась такого статуса за последний год или около того, но даже несмотря на то, что они добились значительных успехов, Intel по-прежнему контролирует рынок процессоров для ПК.

Тогда у меня была система, содержащая оба этих процессора, состоящая из 1 МГц (да, это 1, как в одном мегагерце!) Система Apple II на базе 6502 с Microsoft Softcard (Z -80) вставляется в один из слотов. Softcard содержала процессор Z-80 с тактовой частотой 2 МГц. Это позволило мне запускать программное обеспечение для обоих процессоров в одной системе. Z-80 использовался в системах конца 1970-х и начала 1980-х годов, которые работали под управлением операционной системы CP/M, тогда как 6502 был наиболее известен своим использованием в ранних компьютерах Apple I и II (до Mac).

Судьба как Intel, так и Microsoft резко изменилась в 1981 году, когда IBM представила IBM PC, основанный на процессоре Intel 8088 с частотой 4,77 МГц и работающем под управлением Microsoft Disk Operating System (MS-DOS) 1.0. С тех пор как было принято судьбоносное решение использовать процессор Intel в первом ПК, в последующих ПК-совместимых системах использовалась серия процессоров Intel или Intel-совместимых процессоров, причем каждый новый процессор был способен запускать программное обеспечение предыдущего процессора — начиная с 8088 до текущих Pentium D/4/Celeron и Athlon XP/Athlon 64. В следующих разделах рассматриваются различные типы процессорных микросхем, которые использовались в персональных компьютерах с момента появления первого ПК почти два десятилетия назад. В этих разделах содержится много технических подробностей об этих микросхемах и объясняется, почему один тип микросхемы ЦП может выполнять больше работы, чем другой, за определенный период времени.

Когда разрядность компьютеров увеличилась с 16 до 32 разрядов, они стали гораздо более мощными и полезными. Но переход на 64-разрядную версию может оказаться выгоднее для маркетологов, чем для пользователей.

В вашем будущем 64-битный компьютер?

С учетом всей шумихи вокруг 64-разрядных процессоров вы, вероятно, предполагаете, что мой ответ будет недвусмысленным: "Да, и чертовски скоро!" Но отбросьте маркетинговую болтовню о таких чипах, как AMD Athlon64; на самом деле, наличие 64-битной системы имеет гораздо меньшее значение, чем вы думаете в компьютерной индустрии. Действительно, если вы не являетесь пользователем Macintosh, возможно, вы не купите 64-разрядный компьютер еще десять лет, если вообще купите его.

Во-первых, немного предыстории. Процессоры в подавляющем большинстве современных настольных и портативных компьютеров представляют собой 32-разрядные микросхемы. Большинство из них основаны на невероятно успешной архитектуре Intel IA32, также известной как x86 (как в 286, 386, 486). Все компьютеры Intel Celeron и Pentium имеют IA32, как и чипы AMD Athlon.

Но вдруг у 64-битных машин появился кеш.Уже два года AMD продает процессоры, способные одновременно выполнять как 32-битный, так и 64-битный код; компьютеры, построенные с этими чипами, могут работать под управлением Linux или специальной 64-разрядной версии Windows XP, которую Microsoft выпустила ранее в этом году. Тем временем Apple поставляет все свои компьютеры Power Mac с микропроцессором G5, 64-битным мозгом, созданным IBM. И в каком-то смысле все эти настольные системы догоняют: Nintendo перешла на 64-разрядную версию в 1996 году, когда выпустила игровую консоль Nintendo64.

Чтобы понять, почему все это так важно, сначала нужно понять, что словосочетание «32 бита» — это своего рода сокращение, которое используют разработчики компьютеров. Это число относится к двум вещам внутри архитектуры компьютера. Во-первых, это означает, сколько битов используют эти компьютеры, когда они указывают место в памяти, где хранится часть информации. Во-вторых, он указывает размер регистров внутри микропроцессора, которые используются для выполнения математических операций. Каждый бит может быть 1 или 0, поэтому 32 бита могут использоваться для представления 232 или 4 294 967 296 различных значений. Таким образом, очевидная разница между 32-битными и 64-битными машинами заключается в том, что 64-битные системы намного больше: они могут адресовать больше памяти и могут выполнять математические операции с большими числами.

Но больше не обязательно означает лучше — все зависит от того, что вы получаете больше.

Вниз по переулку памяти

Переход с 32-битной на 64-битную систему имеет наибольшее значение, когда речь идет о способности этих компьютеров адресовать память. Программа, работающая на 32-разрядном компьютере, может легко адресовать 4 гигабайта памяти, 232 — это примерно 4,3 миллиарда. С другой стороны, программа, работающая на 64-разрядной машине, может адресовать 264 — это 4 миллиарда умножить на 4 миллиарда байт, поразительно большое число. Просто сделайте цифры, и станет ясно, что в 64-битной системе гораздо больше «запаса». Но эти два факта на самом деле являются причиной большой путаницы, как мы увидим далее.

Первоначальный персональный компьютер IBM использовал микропроцессор Intel 8088 — забавный маленький чип, в котором было много странных инженерных компромиссов. По своей сути 8088 был 16-разрядным процессором: он имел 16-разрядные математические регистры, что позволяло ему легко представлять числа от 0 до 65 535 (или от -32 768 до 32 767), и 16-разрядные адресные регистры, позволяющие ему легко общаться с 64 килобайтами основной памяти. Теперь 64 КБ было недостаточно, чтобы что-то делать, даже в 1981 году, когда впервые появился ПК, поэтому у 8088 был набор сегментных регистров, которые были сдвинуты на 4 бита влево и добавлены к регистру адреса до того, как адреса памяти были фактически заполнены. читать или писать. В результате 8088 мог легко получить доступ к одному мегабайту памяти. В 1981 году мегабайт был большим объемом оперативной памяти. Действительно, тогдашние разработчики компьютеров не могли себе представить, что обычному домашнему или деловому пользователю потребуется столько памяти, не говоря уже о том, что он сможет себе это позволить в течение многих лет. Поэтому дизайнеры IBM начертили линию на карте памяти компьютера и поместили память для видеодисплея прямо посередине верхней половины, фактически ограничив ранние ПК не более чем 640 килобайтами ОЗУ. Так возникло ограничение в 640 КБ, которое было наложено компьютером IBM на свою операционную систему DOS.

Несколько лет спустя Intel представила свой следующий микропроцессор, 80286. (80186 так и не появился в персональных компьютерах.) 286 был основой IBM PC/AT. У него был режим эмуляции (называемый «реальным режимом»), который позволял 286 запускать то же программное обеспечение, что и 8088, но также был расширенный «защищенный» режим, который позволял ему работать с 16 мегабайтами ОЗУ. Подавляющее большинство этих машин работало в реальном режиме, чтобы на них можно было запускать Microsoft DOS и все другие программы, написанные для оригинального IBM PC. Действительно, 286-й был гораздо более популярен при работе с программным обеспечением 8088, чем когда-либо был 8088-й, потому что 286-й был намного быстрее. Если разобраться, очень немногие чипы 286 действительно работали в «защищенном» режиме.

Только когда число 32-разрядных машин значительно превысило количество 16-разрядных, Microsoft начала поставлять свою первую настоящую 32-разрядную операционную систему — Windows 95. К тому времени Intel выпустила еще два поколения машины на базе x86 — 80486 и Pentium. Да, Microsoft могла поставить 32-разрядную операционную систему за годы до выпуска Windows 95. Но это, вероятно, было бы ошибкой: зачем продавать на рынке операционную систему, которая не работает на большинстве ПК?

Вся эта история внезапно снова становится актуальной, поскольку мы рассматриваем следующий большой скачок в архитектуре ПК — переход от 32-разрядных вычислений к 64-разрядным. Но в то время как отдача от перехода с 16-битного адресного пространства (или 20-битного, если учитывать сегментированную архитектуру 8088) на 32-битное была огромной, переход от 32-битного к 64-битному почти не будет замечен большинством пользователей компьютеров.Причина в том, что 32 бита на самом деле достаточно для решения подавляющего большинства вычислительных задач — не только сегодняшних, но и завтрашних.

Переход с 32-битного на 64-битный вряд ли приведет к такому же квантовому скачку в скорости или возможностях, который мы получили при переходе с 16-битного на 32-битный. Да, 64-битный адрес действительно огромен, но 32-битный не имеет значения. чихать.

Сегодня мало приложений, которым действительно требуется более 4 гигабайт памяти. Если вы занимаетесь обработкой текстов, электронными таблицами, электронной почтой и просмотром веб-страниц, 32-битное пространство обеспечит достаточно адресного пространства в обозримом будущем. Мой настольный компьютер с Windows потребляет много памяти — его копия Internet Explorer регулярно раздувает до 64 мегабайт. Но это все еще одна шестьдесят четвертая размера карты памяти машины в 4 гигабайта. Я не могу себе представить, чтобы я мог запустить веб-браузер, для которого потребовалась бы карта памяти объемом 4 гигабайта: потребовалось бы почти 10 часов только для того, чтобы загрузить такое количество информации по моей линии DSL!

Вы можете подумать, что многозадачность с другими приложениями такого же размера приведет к постоянно растущему давлению на память, до такой степени, что кто-то действительно начинает беспокоиться об использовании адресного пространства. Но это не так. Windows, Unix и другие современные операционные системы используют технику, называемую виртуальной памятью, чтобы предоставить каждой программе собственную изолированную карту памяти. На 32-битном компьютере это означает, что каждая работающая программа получает свои собственные 4 гигабайта виртуальной памяти для экспериментов. Таким образом, хотя один экземпляр работающей программы не может получить доступ к более чем 4 гигабайтам, 32-разрядная машина под управлением Windows XP с 10 или 20 гигабайтами памяти без проблем разделит эту память между раздутым браузером, раздутой копией Word 2003 и раздутую копию Access.

Большую разницу имеет 64-битное адресное пространство, когда одной программе требуется одновременный доступ к более чем 4 гигабайтам памяти. Например, если вы управляете хранилищем данных для многонациональной корпорации с 10 терабайтами онлайн-хранилища, ваш сервер базы данных может серьезно выиграть, имея 10 или 20 гигабайт индексных файлов, хранящихся в памяти. Масштабное моделирование также могло бы выиграть, если бы в распоряжении было много оперативной памяти для выполнения таких задач, как моделирование погоды на послезавтра.

Поскольку такие компании, как Dell, поставляют домашние компьютеры с 512 МБ ОЗУ, а компьютеры с Windows XP обычно используют 1,5 ГБ памяти для хранения всех своих программ, маркетологи, продвигающие 64-разрядные вычисления, будут говорить, что вам нужна 64-разрядная -битная машина для преодоления быстро приближающегося предела в 4 гигабайта. Не верьте этому. На самом деле Dell уже продает 32-битные компьютеры с 8, 16 и 32 гигабайтами оперативной памяти. Маркетологи хотят, чтобы вы покупали 64-разрядные машины, потому что эти системы стоят дороже.

Еще одна причина, по которой 64-разрядные машины превосходят современные 32-разрядные системы, связана с выполнением математических операций. В то время как современные 32-разрядные машины имеют процессоры, которые могут представлять любое целое число от 0 до 4 294 967 295 (это 232-1), 64-разрядная машина может представлять целые числа от 0 до 18 446 744 073 709 551 615 (264-1).

Еще раз повторим, что возможность выполнять математические операции с такими огромными числами в одной инструкции может быть огромным преимуществом в небольшом числе научных приложений. Но оказывается, что для большинства повседневных офисных задач 64-битная целочисленная математика не так уж и полезна. Во-первых, это потому, что у нас уже есть машины, которые могут выполнять 64-битные операции: сегодняшние машины просто делают это с помощью специальных процессоров с плавающей запятой или с помощью нескольких 32-битных инструкций. Для большинства операций специальное 64-битное математическое оборудование просто не требуется.

Вам не нужно верить мне на слово. Просто посмотрите на историю других 64-битных архитектур. В то время как 64-битная система является новинкой в ​​мире x86, другие микропроцессоры перешли на 64-битную систему еще в 1990-х годах. Alpha, MIPS64 и Sparc64 — все это 64-битные машины. Тем не менее, большинство программ, работающих на этих компьютерах, эффективно игнорируют старшие 32 бита каждого числа, потому что эти цифры неизменно равны 0.

Настоящая отдача от 64-разрядной версии: новые разработки

Все эти аргументы против 64-разрядных машин растворяются в древесине, однако, когда вы садитесь перед новым компьютером Apple G5: независимо от того, редактируете ли вы видео или просто просматриваете веб-страницы, машина чувствует себя намного быстрее, чем на самом деле. 32-битные родственники G4. Так что же дает?

За исключением процессора Intel Itanium, современные 64-разрядные машины обычно выполняют 32-разрядный код быстрее, чем их 32-разрядные собратья, по той же причине, по которой 32-разрядный процессор Intel 80386 выполнял 16-разрядный код быстрее, чем 8088. и 80286. Причина в том, что 64-битные ЦП просто более современные устройства. Эти чипы производятся с использованием более продвинутых кремниевых процессов, они имеют более высокие тактовые частоты и содержат больше транзисторов. AMD Athlon64 и IBM G5 не просто имеют более широкие регистры: они также имеют больше функциональных блоков внутри своих кремниевых мозгов.Эти чипы лучше справляются с такими задачами, как одновременное выполнение нескольких инструкций, выполнение не по порядку и прогнозирование переходов. Этот 64-битный PowerMac G5, работающий в Apple Store, в основном использует 32-битный код. Впечатляющая скорость машины обусловлена ​​сочетанием двух процессоров, более высокой тактовой частотой, большим объемом кэш-памяти и улучшенной шиной памяти.

Да, AMD и IBM могли внедрить ту же технологию в новый 32-разрядный дизайн. Но в наши дни разработка нового чипа стоит миллиарды долларов. 64-разрядный процессор может иметь более высокую цену, чем 32-разрядный, поэтому в интересах этих компаний использовать свои новейшие технологии в своих 64-разрядных продуктах.

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

То же самое произошло и с игровыми консолями. Хотя несколько лет назад было много волнений, когда Nintendo решила использовать 64-битный процессор R4300i для своей системы Nintendo 64, игроки в видеоигры не получили особой пользы от дополнительных 32 бит адреса или математики. В то время R4300i был быстрым чипом, потому что в нем было реализовано множество других современных технологий для ускорения выполнения программ. Он мог бы обеспечить такой же уровень производительности, если бы эти трюки были применены к 32-битному процессору. Именно трюки принесли скорость, а не биты.

Важно помнить, что биты экспоненциальны. 32-разрядная система может адресовать в 65 тысяч раз больше памяти, чем 16-разрядная система, а 64-разрядная система имеет теоретическое адресное пространство памяти в 4 миллиарда раз больше. чем у 32-битной системы. На самом деле вы могли бы построить единую систему памяти, которая вмещала бы 264 байта памяти с современным оборудованием, но вам нужно было бы использовать более 200 миллионов жестких дисков, каждый из которых содержал бы 256 гигабайт информации. Это больше, чем было предоставлено всей мировой индустрией жестких дисков в 2003 году. Таким образом, хотя сегодня можно создать систему памяти, вмещающую 264 байта памяти, вам, вероятно, придется использовать каждый компьютер в мире, подключенный к Интернету. .

Хотя можно представить себе будущее, в котором компьютеры будут иметь доступ к 264-байтным базам данных, трудно представить себе хоть одну проблему, которая потребовала бы от программы такого большого объема памяти, доступной в одном адресном пространстве. Одна из причин, по которой такая невероятно большая система не имеет смысла, заключается в том, что вы не будете строить такую ​​систему с одним процессором и единым унифицированным адресным пространством: вместо этого вы будете использовать миллионы или миллиарды процессорных элементов, все с перекрывающейся памятью и обязанность. Таким образом, если один процессор или блок памяти выйдет из строя, другие системы легко вступят во владение.

Учитывая такие аргументы, довольно неразумно думать, что вам потребуется 2128 бит дискового пространства — ни при нашей жизни, ни при жизни кого бы то ни было.

С другой стороны, я могу ошибаться во всем этом: 64-битная технология может быть как раз тем, что нужно для создания виртуальной реальности всего тела с возможностью преобразования разума в разум. Или, что более вероятно, такие компании, как Dell, могут последовать примеру Apple и перестать продавать недорогие машины с 32-разрядными процессорами, вместо этого полагаясь на маркетинговую рекламу 64-разрядных машин, чтобы оправдать более высокую прибыль.

Но помните, внизу всегда есть место. А поскольку 32-разрядные машины, скорее всего, будут полезны по крайней мере еще десятилетие, если не дольше, я был бы удивлен, если бы Dell уступила этот рынок другой компании. Просто посмотрите на Apple: хотя все настольные компьютеры PowerMac, которые продает Apple, поставляются с процессорами G5, компания по-прежнему использует процессоры G4 в своих компьютерах iMac, eMac и PowerBook.

Лично я думаю, что 32-битные системы будут с нами еще долго.


16-разрядный — это компьютерное аппаратное устройство или программа, способная передавать 16 бит данных за раз. Например, ранние компьютерные процессоры (например, 8088 и 80286) были 16-разрядными процессорами, то есть они могли работать с 16-разрядными двоичными числами (десятичные числа до 65 535).

Контентидос

Что лучше 16 бит или 32 бит?

Хотя 16-разрядный процессор может имитировать 32-разрядные арифметические операции с использованием операндов двойной точности, 32-разрядные процессоры намного эффективнее. Хотя 16-разрядные процессоры могут использовать сегментные регистры для доступа к более чем 64 КБ элементов памяти, этот метод становится неудобным и медленным, если его приходится использовать часто.

В чем разница между 16-битной и 32-битной операционной системой?

Что именно означают 16-разрядные и 32-разрядные версии? Все дело в размере регистра процессора на платформе Intel. 16-битная операционная система означает, что операционная система работает на процессоре, который поддерживает только 16-битные регистры. 32-разрядная операционная система означает, что размер регистра ЦП составляет 32 бита.

В чем разница между 16-битной, 32-битной и 64-битной версиями?

Число бит (обычно 8, 16, 32 или 64) указывает, к какому объему памяти процессор может получить доступ из регистра ЦП. … В то время как 32-разрядный процессор может получить доступ к 232 адресам памяти, 64-разрядный процессор может получить доступ к 264 адресам памяти. Это не в два раза больше, чем у 32-битного процессора, а в 232 (4 294 967 296) раз больше.

Как работает 16-битная версия?

В 16-битном целом числе может храниться 216 (или 65 536) различных значений. В беззнаковом представлении эти значения представляют собой целые числа от 0 до 65 535; с использованием дополнения до двух возможные значения находятся в диапазоне от -32 768 до 32 767. Следовательно, процессор с 16-разрядными адресами памяти может напрямую обращаться к 64 КБ памяти с байтовой адресацией.

Звучит ли 24-битный звук лучше, чем 16-битный?

Разрешение звука, измеряемое в битах

Аналогично 24-битный звук может записывать 16 777 216 дискретных значений уровней громкости (или динамический диапазон 144 дБ), тогда как 16-битный звук может представлять 65 536 дискретных значений уровней громкости (или динамический диапазон 96 дБ). ).

Что лучше: 16-битный или 24-битный звук?

Думайте о битовой глубине как о возможных цветах, которые может воспроизводить каждый пиксель. Чем выше битовая глубина, тем более точным будет оттенок, скажем, синего, чем его 16-битный эквивалент. 16-битная выборка имеет потенциал для более чем 65 тысяч назначений, а 24-битная — более 16 миллионов присваиваний точности.

Что такое 32-разрядный Photoshop?

Photoshop: 32-разрядная версия по сравнению с 32-разрядной версией. 64-бит. … Биты в данном случае относятся к числу возможных адресов памяти. В 32-разрядной версии вы можете использовать до 4 ГБ физической памяти, а в 64-разрядной версии теоретически можно использовать до 17,2 млрд ГБ памяти (хотя этот объем обычно жестко ограничивается операционной системой).

Что такое 32-разрядная операционная система?

32-разрядная архитектура — это тип архитектуры ЦП, способный передавать 32-разрядные данные. Это объем информации, который может быть обработан вашим ЦП всякий раз, когда он выполняет операцию.

Что означает 16-битное изображение?

64-битная версия лучше 32-битной?

Если у компьютера 8 ГБ оперативной памяти, лучше использовать 64-разрядный процессор. В противном случае как минимум 4 ГБ памяти будут недоступны для процессора. Основное различие между 32-разрядными и 64-разрядными процессорами заключается в количестве вычислений, которые они могут выполнять в секунду, что влияет на скорость, с которой они могут выполнять задачи.

В чем разница между 8-битным и 16-битным?

Основное различие между 8-битным и 16-битным изображением заключается в количестве тонов, доступных для данного цвета. 8-битное изображение состоит из меньшего количества тонов, чем 16-битное. … Это означает, что для каждого цвета в 8-битном изображении существует 256 тональных значений.

Что лучше 32-битная или 64-битная?

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

Какой регистр 16-битный?

В 16-разрядном регистре сегмента данных или регистре DS хранится начальный адрес сегмента данных. Сегмент стека — содержит данные и адреса возврата процедур или подпрограмм. Он реализован в виде структуры данных «стек». Регистр сегмента стека или регистр SS хранит начальный адрес стека.

Какое разрешение 16 бит?

Количество возможных значений, которые могут быть представлены целочисленной битовой глубиной, можно рассчитать с помощью 2n, где n — битовая глубина. Таким образом, 16-битная система имеет разрешение 65 536 (216) возможных значений. Целочисленные аудиоданные PCM обычно хранятся в виде чисел со знаком в формате дополнения до двух.

Что такое 32-битное изображение?

Как и 24-битный цвет, 32-битный цвет поддерживает 16 777 215 цветов, но имеет альфа-канал, позволяющий создавать более убедительные градиенты, тени и прозрачность. С альфа-каналом 32-битный цвет поддерживает 4 294 967 296 цветовых комбинаций. По мере расширения поддержки большего количества цветов требуется больше памяти.

С развитием архитектуры ЦП размер регистров увеличился с 8 до 16, 32 и, в конечном итоге, до 64 бит. Мне было интересно, есть ли способ получить доступ к старшей части регистров.

Вот пример, касающийся 64-битного регистра rax и его последующих подразделений:

Можно легко получить доступ к верхней и нижней части топора, сославшись на ah и al соответственно. Но я не смог найти ссылку на более высокие части rax и eax. (обозначается (.))

  1. Можно ли получить доступ к старшей части 32-битных и 64-битных регистров? Если да, то какие?
  2. Если предположить, что это невозможно, каковы причины этого?

Примечание. Я говорю о прямом доступе к этим байтам, а не о последовательности инструкций, которые могли бы их получить.


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

@ChrisStratton: Спасибо за ваш вклад; Я понимаю вашу точку зрения. Не стесняйтесь поднимать вопрос о мета, так как это действительно беспокоит вас. Лично я считаю, что обратный инжиниринг (RE) охватывает (и применяется) несколько областей. Без сомнения, этот вопрос мог бы иметь больше оснований на другом сайте SE, точно так же, как вопросы, связанные со сборкой, могут быть перенаправлены в StackOverflow, вопросы, связанные с программным обеспечением, могут быть перенаправлены суперпользователю и т. д. Понимание того, как работает программное обеспечение, языки и архитектуры возможно, часть процесса обучения RE.

Этот вопрос можно (должно) перенести в SO и закрыть как дубликат. Есть много вещей, которые вы должны изучить в качестве основы для изучения реверс-инжиниринга, но это не означает, что все это является реверс-инжинирингом или принадлежит этому сайту. Я не думаю, что это хорошая идея, чтобы разделить вопросы архитектуры asm/cpu на несколько сайтов, за исключением тех, которые конкретно касаются обратного проектирования; это усложняет, а не упрощает поиск связанных вопросов, когда общие вопросы по дизайну ISA разделены между здесь и SO.

3 ответа 3

Можно ли получить доступ к старшей части 32-битных и 64-битных регистров? Если да, то какие?

Невозможно напрямую получить доступ к старшим частям регистров EAX и RAX или любых других 32- и 64-битных регистров. Вам придется использовать косвенные последовательности инструкций, если вы заинтересованы в этом. Это связано с тем, что ни в одной инструкции нет кодировок для доступа к этим частям.

Предполагая, что это невозможно, каковы причины этого?

Как отметил @nordwald в комментариях ниже, это просто определено в руководствах. Чтобы получить более подробный официальный ответ, нам нужно было бы задать членам спецификации определение. Мы можем с уверенностью предположить, что основной причиной является то, что затраты на предоставление доступа ко всем доступным долям регистров превышают выгоды.

Я попытаюсь перечислить несколько возможных причин, почему затраты превышают выгоду сейчас, а раньше этого не было:

Преимущество большего доступного регистрового пространства

Во времена 16-битных регистров регистров было мало (из-за затрат на производство микросхем), и микросхемы могли похвастаться большим количеством регистров, доступных пользователю. Возникла потребность в большем количестве регистров. Открытие полурегистров позволило лучше использовать имеющуюся (драгоценную и дорогую) регистровую недвижимость. Со временем стало доступно больше регистров, и потребность в лучшем использовании точного размера регистра уменьшилась. В настоящее время вы можете использовать 64-битные регистры только для их младшего байта или слова, не «беспокоясь» о нехватке регистров.

Стоимость увеличения набора инструкций

Поскольку доступный набор инструкций был относительно небольшим и было всего несколько регистров, было доступно достаточно битов для кодирования другой половины регистров без увеличения размера набора инструкций. В первые дни 16-битных регистров использовалась большая часть доступного пространства набора команд. Переходя к 32 (а затем снова к 64-битным), вместо повторной реализации тех же инструкций с разными размерами регистров были введены префиксы (например, 0x66 для 32-битных регистров), сохраняя остальную часть инструкции в такт. Это сделало тривиальной поддержку 32-битных регистров поверх 16-битного исходного набора инструкций, но доступ к старшим частям этих регистров требовал более сложной конструкции. Вы можете заметить, что было только 8 регистров полного размера (AX, CX, DX, BX, SP, BP, SI и DI), а также только 8 регистров половинного размера (AL, CL, DL, BL, AH, CH и DH). , так что для указания требуемого регистра требовалось всего 3 бита.

В настоящее время кодирование всех частей регистров увеличило бы набор инструкций и общую сложность ЦП.

Поддержка устаревшего кода

Кроме того, при переходе с 16-разрядных на 32-разрядные процессоры, а затем с 32-разрядных на 64-разрядные, желательно поддерживать обратную совместимость и поддержку устаревших режимов выполнения. По этой причине сохранение одного и того же двоичного кодирования было достигнуто за счет сохранения одного и того же набора инструкций, а также одной и той же двоичной кодировки для нескольких инструкций, «вынуждая» включение полурегистров как часть доступного набора инструкций.

Стоимость синхронизации доступа к реестру

По мере того, как конвейерная оптимизация становилась все более и более популярной, нагрузка на доступ к регистрам синхронизации (среди прочего) увеличивалась, что усложняло отслеживание доступа к регистрам ЦП.

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

Поначалу доступ к регистру половинного размера возможен только частично

Хотя вы можете предположить иное, доступ к регистрам половинного размера или их использование не всегда возможны. Например, вы не можете протолкнуть половину регистра (нет "Push AL"). Это было сделано только для поддержки минимума, необходимого для того, чтобы сделать полурегистры полезными, но они не рассматриваются как полноценные регистры.

Очевидно, что некоторые причины могут иметь больший вес, чем другие, некоторые из них могут быть не связаны с первоначальным решением, некоторые первоначальные причины могут отсутствовать здесь и т. д. Это просто обоснованные догадки и YMMV

Читайте также: