2014-11-05 65 views
1

我已經將代碼片段翻譯成IJVM,但不知道它是否有效。告訴我我是否做得對。或者我該如何檢查代碼是否正常工作。這是代碼。轉換代碼到IJVM

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

這裏是我做了IJVM代碼: //如下因素3行設置α= 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: 

回答

0

是不需要的第一指令ILOAD甲。它將A放在堆棧上,但該值從不使用。

第一個GOTO L1導致無限循環,當A < X.將其刪除。讓代碼落在循環體中。

BIPUSH 1代替IPUSH 1

相反ISUB接着IFEQ的,使用IF_ICMPEQ。

你有正確的想法。

要測試代碼,請執行手動跟蹤。用筆和紙記下變量A,X,SUM的初始值。在逐步執行代碼時更新變量的值(在列中)。