Конвертировать код в IJVM

Я перевел фрагмент кода в IJVM, но не уверен, работает ли он или нет. Скажите, правильно ли я это делаю или нет. Или как я могу проверить, работает ли код или нет. Вот код

a = 0 sum = x  
while( a<= x){
sum += a;
a++;
}

Вот код IJVM, который я сделал: // следующие 3 строки устанавливают a = 0

ILOAD a  
BIPUSH 0 
ISTORE a
//following 2 lines set sum = x
ILOAD x
ISTORE sum
//checking the condition of the loop
L1: ILOAD a 
ILOAD x
ISUB
IFEQ L2 //GO TO BODY OF WHILE LOOP
ILOAD x
ILOAD a
ISUB
IFLT L3 //GO OUT OF WHILE LOOP
GOTO L1 
//L2 IS THE BODY OF WHILE LOOP
L2: ILOAD sum
ILOAD a
IADD
ISTORE sum
ILOAD a
IPUSH 1
IADD
ISTORE a
GOTO L1 //AGAIN GO BACK TO CHECK THE CONDITION OF WHILE LOOP

L3:

1 ответ

Первая инструкция ILOAD A не нужна. Он помещает A в стек, но значение никогда не используется.

Первый GOTO L1 вызывает бесконечный цикл, когда A

BIPUSH 1 вместо IPUSH 1

Вместо ISUB, за которым следует IFEQ, используйте IF_ICMPEQ.

У вас правильная идея.

Чтобы проверить код, сделайте ручную трассировку. Используйте ручку и бумагу, чтобы записать начальные значения переменных A, X, SUM. Обновите значения переменных (в столбцах) по мере продвижения по коду.

Другие вопросы по тегам