2015-01-25 3 views
0

Для добавления: iadd/Лэдд/FADD/DADD, Для суб: ISub/LSUB/FSUB/DSUB, Для мул: IMUL/lmul/FMUL/dmul Для DIV: IDIV/ldiv/FDIV/ddiv Для бэр: Irem/lrem/FREM/DREM Фро нег: ИНЭГ/lneg/fneg/dneg ...В инструкциях JVM некоторые из них имеют разные префиксы, но их функции очень похожи. Нам действительно нужны все они? Если да, то почему?

  1. Можем ли мы только использовать только одну команду, например,добавить, чтобы заменить все инструкции по добавлению?
  2. Если ответ Q1 верен, будет ли это лучше, чем текущие решения?
  3. Если Q1 является ложным, почему?
+2

«совершенно похоже» совершенно отличается от «точно такой же». Если бы все эти инструкции сделали то же самое, вы действительно думаете, что все они будут существовать? –

+0

Это просто номенклатура. Java выбрала явно разные имена для того, что в противном случае могло бы быть «перегрузками» одного и того же имени для разных типов аргументов. По сути, они * представляют собой различные инструкции, независимо от того, имеют ли они мнемонику или нет. –

ответ

2

Как и в реальных машинах, вы не можете иметь одну и ту же инструкцию для отрицания двойника или int. Эти инструкции работают по-разному на уровне бит, и они одинаковы на достаточно высоком уровне абстракции (т. Е. Отрицают число).

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

0

Q1: Можно ли использовать только одну инструкцию, например. добавить для реализации всех инструкций добавления?

№ Они предназначены для выполнения разных действий. Похоже, но другое.

Если Q1 является ложным, почему?

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

Набор инструкций для байт-кода JVM также был разработан, чтобы быть стабильным; то есть разрешить Java-код, который был скомпилирован для байт-кодов 20+ лет назад, чтобы быть исполняемым на текущей JVM. Изменения в наборе команд, которые нарушают совместимость, являются анафемой: их не произойдет.