Сборка класса jasmin приводит к инвертированным операторам и сравнениям - PullRequest
0 голосов
/ 07 мая 2020

Когда я пытаюсь собрать свой файл test.j jasmin с помощью командной строки java -jar Jasmin.jar test.j, он генерирует файл test.class без каких-либо ошибок. Весь код такой же, за исключением операторов и сравнений, все мои + станут -, == все станут != и так далее и так далее.

My test.j jasmin добавляет 2 числа и проверяет, равны ли они 7, если true, напечатайте что-то, иначе напечатайте что-то еще. В конце всегда будет печататься одна строка текста.

test.j файл:

.class public test
.super java/lang/Object

.method public static main([Ljava/lang/String;)V
.limit stack 5
.limit locals 3

ldc 5
ldc 3
isub
ldc 7
if_icmpne L1
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "It is not bigger"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
goto LE1
L1:
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "It is bigger"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
LE1:
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "this will always print"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
return
.end method

Собран test.class, 5 - 3 != 7 должно быть 5 + 3 == 7 здесь:

public class test {
    public static void main(String[] var0) {
        if (5 - 3 != 7) {
            System.out.println("It is not bigger");
        } else {
            System.out.println("It is bigger");
        }

        System.out.println("this will always print");
    }
}

1 Ответ

1 голос
/ 07 мая 2020

Опубликованный вами код jasmin содержит isub, который предназначен для вычитания, а не для сложения. Ассемблер правильный. Вы выводите сборку, которая не соответствует предполагаемому поведению.

...