Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

AOM / Tannenbaum

.pdf
Скачиваний:
93
Добавлен:
17.05.2015
Размер:
5.64 Mб
Скачать

Общий обзор уровня архитектуры команд

343

Процессор 80386 был первой 32-разрядной машиной, выпущенной компанией Intel. Все последующие процессоры (80486, Pentium, Pentium Pro, Pentium II, Celeron и Хеоп) имеют точно такую же 32-разрядную архитектуру, которая называется IA-32, поэтому мы сосредоточим наше внимание именно на этой архитектуре. Единственным существенным изменением архитектуры со времен процессора 80386 было введение команд ММХ в более поздние версии системы Pentium и их включение в Pentium II и последующие процессоры.

Pentium II имеет 3 операционных режима, в двух из которых он работает как 8086. В реальном режиме все особенности, которые былидобавлены к процессору со времен системы 8088, отключаются, и Pentium II работает как простой компьютер 8088. Если программа совершает ошибку, то происходит полный отказ системы. Если бы компания Intel занималась разработкой человеческих существ, то внутрь каждого человека был бы помещен бит, который превращает людей обратно в режим шимпанзе (примитивный мозг, отсутствие речи, питание в основном бананами и т.д.).

На следующей ступени находится виртуальный режим 8086, который делает возможным выполнение старых программ, написанных для 8088, с защитой. Чтобы запустить старую программу 8088, операционная система создает специальную изолированную среду, которая работает как процессор 8088, за исключением того, что если программа дает сбой, операционной системе передается соответствующая информация и полного отказа системы не происходит. Когда пользователь WINDOWS начинает работу с MS-DOS, ""рограмма, которая действует там, запускается в виртуальном режиме 8086, чтобы программа WINDOWS не могла вмешиваться в программы MS-DOS.

Последний режим — это защищенный режим, в котором Pentium II работает как Pentium II, а не как 8088. В этом режиме доступны 4 уровня привилегий, которые управляются битами во флаговом регистре. Уровень 0 соответствует привилегированному режиму на других компьютерах и имеет полный доступ к машине. Этот уровень используется операционной системой. Уровень 3 предназначен для пользовательских программ. Он блокирует доступ к определенным командам и регистрам управления, чтобы ошибки какой-нибудь пользовательской программы не привели к поломке всей машины. Уровни 1 и 2 используются редко. Pentium II имеет огромное адресное пространство. Память разделена на 16 384 сегмента, каждый из которых идет от адреса 0 до адреса 23J-1. Однако большинство операционных систем (включая UNIX и все версии WINDOWS) поддерживают только один сегмент, поэтому большинство прикладных программ видят линейное адресное пространство в 232 байтов, а иногда часть этого пространства занимает сама операционная система. Каждый байт в адресном пространстве имеет свой адрес. Слова состоят из 32 битов. Байты нумеруются справа налево (то есть самый первый адрес соответствует самому младшему байту).

Регистры процессора Pentium II показаны на рис. 5.3. Первые четыре регистра ЕАХ, ЕВХ, ЕСХ и EDX 32-битные. Это регистры общего назначения, хотя у каждого из них есть определенные особенности. ЕАХ — основной арифметический регистр; ЕВХ предназначен для хранения указателей (адресов памяти); ЕСХ связан с организацией циклов; EDX нужен для умножения и деления — этот регистр

344

Глава 5. Уровень архитектуры команд

вместе с ЕАХ содержит 64-битные произведения и делимые. Каждый из этих регистров имеет 16-разрядный регистр в младших 16 битах и 8-разрядный регистр в младших 8 битах. Данные регистры позволяют легко манипулировать 16-битны- ми и 8-битными значениями соответственно. В компьютерах 8088 и 80286 есть только 8-битные и 16-битные регистры. 32-битные регистры появились в системе 80386 вместе с приставкой Е (Extended — расширенный).

Следующие три регистра также являются регистрами общего назначения, но сбольшейстепенью специализации. Регистры ESI и EDI предназначеныдляхранения указателей, особенно для команд манипулирования цепочками, где ESI указывает на входную цепочку, a EDI — на выходную цепочку. Регистр ЕВР тоже предназначендляхраненияуказателей. Обычноон используетсядля указаниянаоснову текущего фрейма локальных переменных, как и регистр LV в машине IJVM. Такой регистр обычно называют указателем фрейма. Наконец, регистр ESP — это указатель стека.

Биты-*- •16-

АН

А X

AL

 

ВН

В X

BL

 

сн -с х

CL

DH

D X

DL

 

Рис. 5.3. Основные регистры процессора Pentium

ЕАХ

ЕВХ

ЕСХ EDX

ESI EDI ЕВР ESP

CS

SS

DS

ES

FS

GS

EIP

EFLAGS

Общий обзор уровня архитектуры команд

345

Следующая группа регистров от CS до GS — сегментные регистры. Это электронныетрилобиты — атавизмы, оставшиеся от процессора8088, который обращался к 2байтам памяти, используя 16-битные адреса. Достаточно сказать, что когда Pentium II установлен на использование единого линейного 32-битного адресного пространства, их можно смело проигнорировать. Регистр EIP — это счетчик программ (Extended Instruction Pointer — расширенный указатель команд). Регистр EFLAGS — это флаговый регистр.

Общий обзор уровня команд системы UltraSPARC II

Архитектура SPARC была впервые введена в 1987 году компанией Sun Microsystems. Эта архитектура была одной из первых архитектур промышленного назначения типа RISC. Она была основана на исследовании, проведенном в Беркли в 80-е годы [110,113]. Изначально система SPARC была 32-разрядной архитектурой, но UltraSPARC II — это 64-разрядная машина, основанная на Version 9, и именно ее мы будем описывать в этой главе. В целях согласованности с остальными частями книги мы будем называть данную систему UltraSPARC II, хотя на уровне команд все машины UltraSPARC идентичны.

Структура памяти машины UltraSPARC II очень проста: память представляет собой линейный массив из 2м байтов. К сожалению, память настолько велика (18 446 744 073 709 551 616 байтов), что в настоящее время ее невозможно реализовать. Современные реализации имеют ограничение на размер адресного пространства, к которому они могут обращаться (2й байтов у UltraSPARC II), но в будущем это число увеличится. Байты нумеруются слева направо, но нумерацию можно изменить и сделать ее справа налево, установив бит во флаговом регистре.

Важно, что архитектура команд имеет больше байтов, чем требуе!ся для реализации, поскольку в будущем, скорее в-его, понадобится увеличить размер памяти, к которой может обращаться процессор. Одна из самых серьезных проблем при разработке архитектур состоит в том, что архитектура команд ограничивает размер адресуемой памяти. В информатике существует один вопрос, который совершенно невозможно разрешить: никогда не хватает того количества битов, которое имеется в данный момент. Когда-нибудь ваши внуки спросят у вас, как же могли работать компьютеры, которые содержат всего-навсего 32-битные адреса и только 4 Гбайт памяти.

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

В системе UltraSPARC II имеется две группы регистров: 32 64-битных регистра общего назначения и 32 регистра с плавающей точкой. Регистры общего назначения называются R0-R31, но в определенных контекстах используются другие названия. Варианты названий регистров и их функции приведены в табл. 5.1.

3 4 6

Глава 5. Уровень архитектуры команд

Таблица 5 . 1 . Регистры общего назначения в системе UltraSPARC II

Регистр

Другой вариант названия

Функция

 

 

 

 

 

RO

GO

Связан с 0. То, что сохранено в этом регистре,

 

 

просто игнорируется

R1-R7

G1-G7

Содержит глобальные переменные

R8-R13

О0-О5

Содержит параметры вызываемой процедуры

R14

SP

Указатель стека

R15

07

Временный регистр

R16-R23

L0-L7

Содержит локальные переменные для текущей

 

 

процедуры

R24-R29

I0-I5

Содержит входные параметры

R30

FP

Указатель на основу текущего стекового фрейма

R31

17

Содержит адрес возврата для текущей процедуры

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

Глобальные переменные используются для хранения констант, переменных и указателей, которые нужны во всех процедурах, хотя они могут загружаться и перезагружаться при входе в процедуру и при выходе из процедуры, если нужно. Регистры 1х и Ох используются для передачи параметров процедурам, чтобы избежать обращений к памяти. Ниже мы расскажем, как это происходит.

Специальные регистры используются для особых целей. Регистры FP и SP ограничивают текущий фрейм. Первый указывает на основутекущего фрейма и используется для обращения к локальным переменным, точно так же как LV на рис. 4.9. Второй указывает на текущую вершину стека и изменяется, когда слова помещаются в стек или выталкиваются оттуда. Значение регистра FP изменяется только при вызове и завершении процедуры. Третий специальный регистр — R31. Он содержит адрес возврата для текущей процедуры.

В действительности процессор UltraSPARC II имеет более 32 регистров общего назначения, но только 32 из них видны для программы в любой момент времени. Эта особенность, называемая регистровыми окнами, предназначена для повышения эффективности вызова процедур. Система регистровых окон проиллюстрирована рис. 5.4. Основная идея — имитировать стек, используя при этом регистры. То есть существует несколько наборов регистров, точно так же как и несколько

Общий обзор уровня архитектуры команд

3 4 7

фреймов в стеке. Ровно 32 регистра общего назначения видны в любой момент. Регистр CWP (Current Window Pointer — указатель текущего окна) следит за тем, какой набор регистров используется в данный момент.

R0

GO

0

R1

G1

Глобальная перемена 1

R7

G7

Глобальная перемена 7

Альтернативное имя

R8

ОО

Выходной параметр О

R13

OS

Выходной параметр 5

R14

SP

Указатель стека

R15

07

Промежуточный

R16

L0

Локальная переменная О

R23

L7

Локальная переменная 7

R24

Ю

ВходнойпараметрО

R29

15

Входной параметр 5

R30

FP

Указатель фрейма

R31

17

Адрес возврата

R0

GO

0

R1

G1

Глобальная перемена 1

R7

G7

Глобальная перемена 7

 

R8

ОО

 

 

R13

0 1

 

 

R14

SP

Указатель стека

 

R15

07

Промежуточный

 

R16

L0

Локальная переменная О

 

R23

L7

Локальная переменная 7

 

R24

10

Входной параметр О

Перекрытие

R29

15

Входной параметр 5

R30

FP

Указатель фрейма

 

R31

17

Адрес возврата

Часть предыдущего окна

CWP уменьшается при вызове в этом направлении

Часть предыдущего окна

а

б

Рис. 5.4. Регистровые окна системы UltraSPARC II

Команда вызова процедуры скрывает старый набор регистров и путем изменения CWP предоставляет новый набор, который может использовать вызванная процедура. Однако некоторые регистры переносятся из вызывающей процедуры к вызванной процедуре, что обеспечивает эффективный способ передачи параметров между процедурами. Для этого некоторые регистры переименовываются: после вызова процедуры прежние выходные регистры с R8 по R15 все еще видны, но

3 4 8 Глава 5. Уровень архитектуры команд

теперь это входные регистры с R24 по R31. Восемь глобальных регистров не меняются. Это всегда один и тот же набор регистров.

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

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

Всистеме UltraSPARC II есть также 32 регистра с плавающей точкой, которые могут содержать либо 32-битные (одинарная точность), либо 64-битные (двойная точность) значения. Возможно также использовать пары этих регистров, чтобы поддерживать 128-битные значения.

Архитектура UltraSPARC II — архитектура загрузки/хранения. Это значит, что единственные операции, которые непосредственно обращаются к памяти — это команды LOAD (загрузка) и STORE (сохранение), служащиедля перемещенияданных между регистрами и памятью. Все операнды для команд арифметических и логических действий должны браться из регистров или предоставляться самой командой (но не должны браться из памяти), и все результаты должны сохраняться

врегистрах (но не в памяти).

ОбщийобзорвиртуальноймашиныJava

Уровень команд машины JVM необычен, но достаточно прост. Мы уже отчасти рассмотрели его во время изучения машиныJVM. Модель памятиJVM точно такая же, как у IJVM, о которой мы говорили в главе 4 (см. рис. 4.9), но с одной дополнительной областью, о которой мы сейчас расскажем. Порядок байтов обратный.

Память содержит 4 основные области: фрейм локальных переменных, стек операндов, область процедур и набор констант. Напомним, что в реализациях Mic-x машины IJVM на эти области указывают регистры LV, SP, PC и СРР. Доступы к памяти должны осуществляться только по смещению от одного из этих регистров; указатели и абсолютные адреса памяти не используются. Хотя JVM не требует наличия этих регистров, в большинстве реализаций такие регистры (или подобные им) имеются.

Отсутствие указателей для доступа к локальным переменным и константам не случайно. Это нужно для достижения одной из главных целей языкаJava: возможности загружать двоичную программу из Интернета и выполнять ее, не опасаясь шпионских программ или какого-либо сбоя в машине, на которой это программа выполняется. Если ограничить использование указателей, можно добиться высокой безопасности.

Напомним, что ни одна из областей памяти, определенных в машине IJVM, не может быть очень большой. Объем области процедур может быть всего лишь 64 Кбайт. Пространство, занимаемое локальными переменными, не должно превышать 64 Кбайт. Набор констант также ограничивается 64 Кбайт. JVM характеризуется теми же ограничениями по той же причине: смещения для индексирования этих областей ограничиваются 16 битами.

Типы данных

349

Область локальных переменных меняется с каждой процедурой, поэтому каждая вызываемая процедура имеет собственные 64 Кбайт для своих локальных переменных. Точно так же определенный набор констант распространяется только на определенный класс, поэтому каждый из них имеет собственные 64 Кбайт. Здесь нет места для хранения больших массивов и динамических структур данных, например списков и деревьев. Именно поэтому в JVM включается дополнительная область памяти, так называемая «куча», которая предназначена для хранения динамических объектов, а также очень крупных объектов. Когда компилятор Java воспринимает следующее выражение:

int a[]-new -int[4096]

он посылает сигнал распределителю памяти, который определяет место в памяти для «кучи» и возвращает ей указатель. Таким образом, указатели используются в JVM, но программисты не могут непосредственно манипулировать ими.

Если в «куче» создаются все новые и новые структуры данных, она в конце концов переполнится. Когда специальная система определяет, что «куча» почти заполнилась, она вызывает программу чистки памяти (сборщик мусора), которая ищет ненужные объекты в «куче». Для этого применяется сложный алгоритм. Ненужные объекты отбрасываются, чтобы освободить место в «куче». Схема действия автоматической программы чистки памяти полностью отличается от использования стека локальных переменных. Эти два метода находятся в отношении дополнительности; каждый из них имеет свое место.

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

Однако у машины со стековой организацией есть один недостаток: здесь требуется большое количество обращений к памяти. Но, как мы видели в разделе «Микроархитектура процессора picojava II» главы 4, при умелой разработке можно устранить большую часть из них путем свертывания команд JVM. Более того, поскольку данная архитектура очень проста, ее можно реализовать в небольшом кусочке кремния, оставив большую часть пространства микросхемы свободной для кэш-памяти первого уровня, которая в дальнейшем сократит число обращений к основной памяти. (Размер кэш-памяти picojava II составляет максимум 16 Кбайт + 16 Кбайт, поскольку основной целью было создание дешевой микросхемы.)

Типыданных

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

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

3 5 0 Глава 5. Уровень архитектуры команд

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

Теперь рассмотрим другую бухгалтерскую фирму, которая только что заключила договор на проверку федерального долга. 32-битная арифметика здесь не подойдет, поскольку числа превышают 232 (около 4 миллиардов). Одно из возможных решений — использовать два 32-битных целых числа для представления каждого числа, то есть все 64 бита. Если машина не поддерживает такие числа с удвоенной точностью, то все арифметические операции над ними должны выполняться программным обеспечением, но эти две части могут располагаться в произвольном порядке, поскольку для аппаратного обеспечения это не важно. Это пример типа данных без аппаратной поддержки и, следовательно, без аппаратной реализации. В следующих разделах мы рассмотрим типы данных, которые поддерживаются аппаратным обеспечением и для которых требуются специальные форматы.

Числовыетипыданных

Типы данных можно разделить на две категории: числовые и нечисловые. Среди числовых типов данных главными являются целые числа. Они бывают различной длины: обычно 8,16,32 и 64 бита. Целые числа применяются для подсчета различных предметов (например, они показывают, сколько на складе имеется отверток), для идентификации различных объектов (например, банковских счетов), а также для других целей. В большинстве современных компьютеров целые числа хранятся в двоичной записи, хотя в прошлом использовались и другие системы. Двоичные числа обсуждаются в приложении А.

Некоторые компьютеры поддерживают целые числа и со знаком, и без знака. В целом числе без знака нет знакового бита, и все биты содержат данные. Этот тип данных имеет преимущество: у него есть дополнительный бит, поэтому 32-битное слово может содержать целое число без знака от 0 до 2л -1 включительно. Двоичное целое число со знаком, напротив, может содержать числа только до 231-1, но зато включает и отрицательные числа.

Для выражения нецелых чисел (например, 3,5) используются числа с плавающей точкой. Они обсуждаются в приложении Б. Их длина составляет 32,64, а иногда и 128 битов. В большинстве компьютеров есть команды для выполнения операций с числами с плавающей точкой. Во многих компьютерах имеются отдельные регистры для целочисленных операндов и для операндов с плавающей точкой.

Некоторые языки программирования, в частности COBOL, допускают в качестве типа данных десятичные числа. Машины, предназначенные для программ на языке COBOL, часто поддерживают десятичные числа в аппаратном обеспечении,

Типы данных

351

обычно кодируя десятичный разряд в 4 бита и затем объединяя два десятичных разряда в байт (двоично-десятичный формат). Однако результаты арифметических действий над такими десятичными числами будут некорректны, поэтому требуются специальные команды для коррекции десятичной арифметики. Эти команды должны знать выход переноса бита 3. Вот почему код условия часто содержит бит служебного переноса. Между прочим, проблема 2000 года была вызвана программистами на языке COBOL, которые решили, что дешевле будет представлять год в виде двух десятичных разрядов, а не в виде 16-битного двоичного числа.

Нечисловые типы данных

Хотя самые первые компьютеры работали в основном с числами, современные компьютеры часто используются для нечисловых приложений, например, для обработки текстов или управления базой данных. Для этих приложений нужны другие, нечисловые, типы данных. Они часто поддерживаются командами уровня архитектуры команд. Здесь очень важны символы, хотя не каждый компьютер обеспечивает аппаратную поддержку для них. Наиболее распространенными символьными кодами являются ASCII и UNICODE. Они поддерживают 7-бит- ные и 16-битные символы соответственно. Эти коды обсуждались в главе 2.

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

Кроме того, важны значения булевой алгебры. Этих значений два: истина и ложь. Теоретически булево значение может представлять один бит: 0 — ложь, а 1 — истина (или наоборот). На практике же используется байт или слово, поскольку отдельные биты в байте не имеют собственных адресов, и следовательно, к ним трудно обращаться. В обычных системах применяется следующее соглашение: 0 означает ложь, а все остальное означает истину.

Единственная ситуация, в которой булево значение представлено 1 битом, — это когда имеется целый массив бит и 32-битное слово может содержать 32 булевых значения. Такая структура данных называется битовым отображением. Она встречается в различных контекстах. Например, битовое отображение может использоваться для того, чтобы следить за свободными блоками на диске. Если диск содержит п блоков, тогда битовое отображение содержит п битов.

Последний тип данных — это указатели, которые представляют собой машинные адреса. Мы уже неоднократно рассматривали указатели. В машинах Mic-д: регистры SP, PC, LV и СРР — это примеры указателей. Доступ к переменной на фиксированном расстоянии отуказателя (а именно так работает команда ILOAD) широко применяется на всех машинах.

Типы данных процессора Pentium II

Pentium II поддерживает двоичные целые числа со знаком, целые числа без знака, числа двоично-десятичной системы счисления ичисла с плавающей точкой по стандарту IEEE 754 (табл. 5.2). Эта машина является 8-, 16-разрядной и оперирует с

3 5 2 Глава 5. Уровень архитектуры команд

целыми числами такой длины. У нее имеются многочисленные арифметические команды, булевы операции и операции сравнения. Операнды необязательно должны быть выровнены в памяти, но если адреса слов кратны 4 байтам, то наблюдается более высокая производительность.

Таблица 5.2. Числовые типы данных процессора Pentium II. Поддерживаемые типы отмечены крестом (х)

Тип

8 битов

16 битов

32 бита 64 бита 128 битов

Целые числа со знаком

X

X

X

Целые числа без знака

X

X

X

Двоично-десятичныецелыечисла

X

 

 

Числа с плавающей точкой

 

 

X

Pentium II также может манипулировать 8-разрядными символами ASCII: существуют специальные команды для копирования и поиска цепочек символов. Эти команды используются и для цепочек, длина которых известна заранее, и для цепочек, в конце которых стоит специальный маркер. Они часто используются в библиотеках операций над строками.

Типы данных машины UltraSPARC II

UltraSPARC II поддерживает широкий ряд форматов данных (табл. 5.3). Эта машина может поддерживать 8-, 16-, 32- и 64-битные целочисленные операнды со знаком и без знака. Целые числа со знаком используют дополнительный код. Кроме того, имеются операнды с плавающей точкой по 32,64 и 128 битов, которые соответствуют стандарту ШЕЕ 754 (для 32-битных и 64-битных чисел). Двоично-десятич- ные числа не поддерживаются. Все операнды должны быть выровнены в памяти.

Таблица 5.3. Числовые типы данных компьютера UltraSPARC II

Тип

8 битов

16 битов

32 бита

64 бита 128 битов

Целые числа со знаком

X

X

X

X

Целые числа без знака

X

X

X

X

Двоично-десятичныецелыечисла

 

 

 

Числа с плавающей точкой

 

 

X

X

UltraSPARC II представляет собой регистровую структуру, и почти все команды оперируют с 64-разрядными регистрами. Символьные и строковые типы данных специальными командами аппаратного обеспечения не поддерживаются.

Типы данных виртуальной машины Java

Java — это язык со строгим контролем типов. Это значит, что каждый операнд имеет особый тип и размер, который известен в период компиляции. Это отражено в типах, поддерживаемых JVM. JVM поддерживает числовые типы, приведенные в табл. 5Л. Целые числа со знаком используют дополнительный код.

Соседние файлы в папке AOM